Comparisons based on solutions offered.

(Beware of line-wrapping!)

v0=. ~:@:({.@(/:~)@(i.@# |."0 1 ])  "1)  NB. RH
v1=. ~:@:(([: {.@/:~ {:@$ [\ (, }:))"1)  NB. REB
v2=. ~:@:((|.~ >:@(# -~ {: i. 1:)@((_1 |. ] #^:_1 (= <./)@#~)^:(1 <
+/@])^:a: 1"0))"1)
                                         NB. LdF
v3=. ~:@:((|.~ canonshift=. 3 : 0)"1)    NB. HR
NB. Try each atom of y until we find one that works
for_t. /:~ ~. y do.
   NB. get spacing between positions of t, including the wraparound
   cyclt =. 2 -~/\ tpos =. (, (#y) + {.) t I.@:= y
   NB. if there is only 1 value, use its position
   if. 1 = # cyclt do. {. tpos end.
   NB. If all spacings are the same, try the next value
   if. (}. -: }:) cyclt do. continue. end.
   NB. Canonicalize cyclt.  Use its result to canonicalize y
   (canonshift cyclt) { tpos return.
end.
NB. No atom worked; must be abcabc...; canonize by moving smallest to front
(i. <./) y
)

v4=. ~:@:(({.@(/:~)@:(|."0 1~) (I.@:=<./))"1) NB. MD (sig1)
v5=. ~:@:(([: {. [: /:~ ] |."0 1~ ([: I. ] = <./) #~ [: (= <./) ] {~ [: <:
[: I. ] = <./)"1)
                                              NB. MD (sig2)

stp=. ] (([ ((<;._1 '|Sentence|Space|Time|Space * Time') , (, */&.:>@:(1
2&{))@:(] ; 7!:2@:] ; 6!:2)&>) (10{a.) -.&a:@:(<;._2@,~) ]) [ (0 0 $
13!:8^:((0 e. ])`(12"_)))@:(2 -:/\ ])@:(".&.>)@:((10{a.) -.&a:@:(<;._2@,~)
]) ::(0 0&$@(1!:2&2)@:('Mismatch!'"_))) ".@:('0( : 0)'"_)

A=:  ". 12 59 $ (0 : 0) -. CRLF
 1  4  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  4 _1 _1  4  1
 1  4  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  1  4 _1 _1  4
 1  4  4  1 _4 _1 _4  1  1 _4 _1 _4 _4 _1  4  1  4 _1 _1  4
 4  1  1  4 _1  4  1 _4 _4  1 _4 _1 _1 _4  1 _4 _1  4  4 _1
 4  1  1  4 _1  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  4 _1
_1  4  1  1  4  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  4 _1
_1  4  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4  4  1  1  4 _1
_1  4  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4 _1  4  1  1  4
_1  4  4 _1 _4  1 _4 _1 _1 _4  1 _4 _4  1  4 _1  4  1  1  4
 4 _1 _1  4  1  4 _1 _4 _4 _1 _4  1  1 _4 _1 _4  1  4  4  1
 4 _1 _1  4  1  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4  4  1
 1  4 _1 _1  4  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4  4  1
)


JQt J807 (64 nonavx windows) performance results...

(v3 was excluded; otherwise, J crases (on v3 A)!  Can anyone confirm?)

   stp 111
  v0 A
  v1 A
  v2 A
  v4 A
  v5 A
)
┌────────┬─────┬──────────┬────────────┐
│Sentence│Space│Time      │Space * Time│
├────────┼─────┼──────────┼────────────┤
│  v0 A  │15680│9.79728e_5│1.53621     │
├────────┼─────┼──────────┼────────────┤
│  v1 A  │15680│4.4752e_5 │0.701711    │
├────────┼─────┼──────────┼────────────┤
│  v2 A  │6016 │9.1532e_5 │0.550657    │
├────────┼─────┼──────────┼────────────┤
│  v4 A  │7360 │4.14325e_5│0.304943    │
├────────┼─────┼──────────┼────────────┤
│  v5 A  │6016 │5.29863e_5│0.318766    │
└────────┴─────┴──────────┴────────────┘


Corresponding J806 results...

(v3 is included.)

   stp 111
  v0 A
  v1 A
  v2 A
  v3 A
  v4 A
  v5 A
)
┌────────┬─────┬──────────────┬────────────┐
│Sentence│Space│Time          │Space * Time│
├────────┼─────┼──────────────┼────────────┤
│  v0 A  │14336│0.000118566885│1.69977487  │
├────────┼─────┼──────────────┼────────────┤
│  v1 A  │12160│5.34553436e_5 │0.650016979 │
├────────┼─────┼──────────────┼────────────┤
│  v2 A  │11264│0.000124958141│1.4075285   │
├────────┼─────┼──────────────┼────────────┤
│  v3 A  │18688│0.000427807898│7.99487399  │
├────────┼─────┼──────────────┼────────────┤
│  v4 A  │7296 │4.23078038e_5 │0.308677736 │
├────────┼─────┼──────────────┼────────────┤
│  v5 A  │6272 │5.04595455e_5 │0.31648227  │
└────────┴─────┴──────────────┴────────────┘


On Thu, Feb 14, 2019 at 11:27 AM 'Mike Day' via Programming <
[email protected]> wrote:

> FWIW,  slightly better and faster versions of my rushed efforts of
> yesterday
>
> NB. rotate each occurrence of minimum to front
> sig1 =: {.@(/:~)@:(|."0 1~) (I.@:=<./)
>
> NB. rotate each occurrence of minimum with minimum left neighbour
> sig2 =: 13 : '{./:~ y |."0 1~ i#~ (=<./) y{~ <: i =. I. y = <./ y'
>
> Still not too elegant, but quite fast for the small example, a.  Don’t
> know about bigger arrays.
>
> Mike
>
> Sent from my iPad
>
> > On 14 Feb 2019, at 03:26, Roger Hui <[email protected]> wrote:
> >
> > And what would you use if you need a noun?  Normal form?  Again, more of
> a
> > mouthful.
> >
> > Other terms I would use for identity problems, when explaining to laymen,
> > is "ID number".  They usually get it immediately.
> >
> >
> >> On Wed, Feb 13, 2019 at 6:55 PM Raul Miller <[email protected]>
> wrote:
> >>
> >> I like “normalize” personally.
> >>
> >> The ideas I associate with “signature” are not robust enough for a
> reliable
> >> nub (and so would require additional care elsewhere).
> >>
> >> If that matters...
> >>
> >> Thanks,
> >>
> >> —
> >> Raul
> >>
> >> On Wednesday, February 13, 2019, Roger Hui <[email protected]>
> >> wrote:
> >>
> >>> In this context, I prefer words like signature or representative rather
> >>> than canonical form.  Shorter and less scary and puts one's mind on the
> >>> right track in multiple problems.
> >>>
> >>> e.g. What's a good representative for identity problems?  ~. i. ]
> (index
> >>> in nub).  What's a good representative for ordering problems?  (Seen a
> >>> couple of weeks ago.)  /:~@, i.!.0 ]  (ordinals).
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>> On Wed, Feb 13, 2019 at 5:19 PM Henry Rich <[email protected]>
> wrote:
> >>>>
> >>>> This is what I was looking for.  It works on REB's testcase but has
> >> less
> >>>> than quadratic run time I think.
> >>>>
> >>>> NB. Get # left-shifts to canonicalize y
> >>>>
> >>>> canonshift =: 3 : 0
> >>>>
> >>>> NB. Try each atom of y until we find one that works
> >>>>
> >>>> for_t. /:~ ~. y do.
> >>>>
> >>>>   NB. get spacing between positions of t, including the wraparound
> >>>>
> >>>>   cyclt =. 2 -~/\ tpos =. (, (#y) + {.) t I.@:= y
> >>>>
> >>>>   NB. if there is only 1 value, use its position
> >>>>
> >>>>   if. 1 = # cyclt do. {. tpos end.
> >>>>
> >>>>   NB. If all spacings are the same, try the next value
> >>>>
> >>>>   if. (}. -: }:) cyclt do. continue. end.
> >>>>
> >>>>   NB. Canonicalize cyclt.  Use its result to canonicalize y
> >>>>
> >>>>   (canonshift cyclt) { tpos return.
> >>>>
> >>>> end.
> >>>>
> >>>> NB. No atom worked; must be abcabc...; canonize by moving smallest to
> >>> front
> >>>>
> >>>> (i. <./) y
> >>>>
> >>>> )
> >>>>
> >>>>    ~: (|.~ canonshift)"1 a
> >>>> 1 1 1 1 1 0 1 1 1 1 1 0
> >>>>
> >>>> The canonical form used here does not always put the smallest atom at
> >> the
> >>>> front, but I think it causes vector that differ only by a rotation to
> >>>> canonicalize identically.
> >>>>
> >>>> Henry Rich
> >>>>
> >>>>
> >>>>
> >>>>> On 2/13/2019 7:29 PM, Roger Hui wrote:
> >>>>> Idea k: a minimum vector necessarily begins with a minimum
> >> sub-sequence
> >>>> in
> >>>>> x,(k-1){.x of length k , itself necessarily begins with the minimal
> >>> item.
> >>>>>
> >>>>>
> >>>>> On Wed, Feb 13, 2019 at 9:52 AM Roger Hui <[email protected]
> >>>
> >>>> wrote:
> >>>>>
> >>>>>> Yes, well, left as an exercise for the reader. :-)
> >>>>>>
> >>>>>> Idea: the minimum rotation of a vector necessarily begins with its
> >>>> minimal
> >>>>>> item.
> >>>>>>
> >>>>>> On Wed, Feb 13, 2019 at 9:34 AM Henry Rich <[email protected]>
> >>>> wrote:
> >>>>>>
> >>>>>>> Yes; but now suppose the lines are very long.  Is there a way to
> >> find
> >>>>>>> the signature (I would call it a canonical form) that doesn't
> >> require
> >>>>>>> enumerating rotations?  (I haven't found a good way yet).
> >>>>>>>
> >>>>>>> Henry Rich
> >>>>>>>
> >>>>>>>> On 2/13/2019 12:16 PM, Roger Hui wrote:
> >>>>>>>> For each row, find a "signature", then find the nub sieve of the
> >>>>>>>> signatures.  The signature I use here is the minimum of all
> >> possible
> >>>>>>>> rotations.
> >>>>>>>>
> >>>>>>>>     signature=: {. @ (/:~) @ (i.@# |."0 1 ])
> >>>>>>>>
> >>>>>>>>     ~: signature"1 a
> >>>>>>>> 1 1 1 1 1 0 1 1 1 1 1 0
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Wed, Feb 13, 2019 at 8:55 AM R.E. Boss <[email protected]>
> >>>> wrote:
> >>>>>>>>
> >>>>>>>>> Let the 12 x 20 matrix be defined by
> >>>>>>>>> a=: 0 : 0
> >>>>>>>>>   1  4  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  4 _1 _1  4  1
> >>>>>>>>>   1  4  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  1  4 _1 _1  4
> >>>>>>>>>   1  4  4  1 _4 _1 _4  1  1 _4 _1 _4 _4 _1  4  1  4 _1 _1  4
> >>>>>>>>>   4  1  1  4 _1  4  1 _4 _4  1 _4 _1 _1 _4  1 _4 _1  4  4 _1
> >>>>>>>>>   4  1  1  4 _1  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  4 _1
> >>>>>>>>> _1  4  1  1  4  4  1 _4 _4  1  1 _4 _1 _1 _4 _4 _1  4  4 _1
> >>>>>>>>> _1  4  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4  4  1  1  4 _1
> >>>>>>>>> _1  4  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4 _1  4  1  1  4
> >>>>>>>>> _1  4  4 _1 _4  1 _4 _1 _1 _4  1 _4 _4  1  4 _1  4  1  1  4
> >>>>>>>>>   4 _1 _1  4  1  4 _1 _4 _4 _1 _4  1  1 _4 _1 _4  1  4  4  1
> >>>>>>>>>   4 _1 _1  4  1  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4  4  1
> >>>>>>>>>   1  4 _1 _1  4  4 _1 _4 _4 _1 _1 _4  1  1 _4 _4  1  4  4  1
> >>>>>>>>> )
> >>>>>>>>>
> >>>>>>>>> Required is the nubsieve for the items modulo rotation.
> >>>>>>>>> So two arrays are considered to be equal if one is a rotation of
> >>> the
> >>>>>>> other.
> >>>>>>>>> The answer I found is
> >>>>>>>>> 1 1 1 1 1 0 1 1 1 1 1 0
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> R.E. Boss
> >>>>>>>>>
> >>>> ----------------------------------------------------------------------
> >>>>>>>>> For information about J forums see
> >>>> http://www.jsoftware.com/forums.htm
> >>>>>>>> ------------------------------------------------------------
> >>> ----------
> >>>>>>>> For information about J forums see
> >>>> http://www.jsoftware.com/forums.htm
> >>>>>>>
> >>>>>>> ---
> >>>>>>> This email has been checked for viruses by AVG.
> >>>>>>> https://www.avg.com
> >>>>>>>
> >>>>>>> ------------------------------------------------------------
> >>> ----------
> >>>>>>> For information about J forums see http://www.jsoftware.com/
> >>> forums.htm
> >>>>>>
> >>>>>
> >> ----------------------------------------------------------------------
> >>>>> For information about J forums see
> >> http://www.jsoftware.com/forums.htm
> >>>>
> >>>> ----------------------------------------------------------------------
> >>>> For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> ----------------------------------------------------------------------
> >>> For information about J forums see http://www.jsoftware.com/forums.htm
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to