I thought so but I did not have a suitable testing noun handy. Do you have one?
On Thu, Feb 14, 2019 at 6:02 PM Henry Rich <[email protected]> wrote: > v3 is designed for lines of a million atoms, and could be made faster. > > Henry Rich > > On 2/14/2019 5:57 PM, Jose Mario Quintana wrote: > > 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 > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
