Wait, no, you haven't. I misread the version. I'll look into it.

Henry Rich



On Thu, Feb 21, 2019, 12:42 PM 'Mike Day' via Programming <
[email protected]> wrote:

> Have I missed an update, then?
> Thanks,
> Mike
>
>
> Sent from my iPad
>
> > On 21 Feb 2019, at 16:58, Henry Rich <[email protected]> wrote:
> >
> > The crash should be fixed in the latest released version, but I haven't
> > verified that.
> >
> > Henry Rich
> >
> > On Thu, Feb 21, 2019, 5:40 AM 'Mike Day' via Programming <
> > [email protected]> wrote:
> >
> >> Back to this thread...
> >>
> >> I've worked up an explicit variant, sig3,  using I. and E. - fairly
> >> simple-minded,
> >>
> >> but might be of interest. Also revisiting sig1 for comparison. sig3 is
> >> not so good for
> >>
> >> space,  but is reasonably fast for the example.
> >>
> >> NB. minmd =: (({.@:/:~)`(<./)@.(0-:{.@:(0&{.)))
> >> minmd =: {.@:/:~  NB. this works for strings as well as numeric arrays
> >> sig1  =: {.@(/:~)@:(|."0 1~) (I.@:= minmd)
> >>
> >> NB. rotate each occurrence of minimum pair to front
> >> sig2 =: 13 : '{./:~ y |."0 1~ i#~ (=minmd) y {~ <: i   =. I. y = minmd
> y'
> >>
> >> sig3  =: 3 : 0
> >> b     =. (,.~) y
> >> NB. following replaces values by characters - assuming nub is small
> enough!
> >> NB. but it doesn't appear to save space!
> >> NB. b     =. (,.~) ((~.@:,) (a.{~i.) ]) y
> >> 'm n' =. $y
> >> bool  =. m#1
> >> for_pad. }.i.<: m do.
> >>   'a b' =. ({.;}.) b
> >>   if. bool{~<:pad do.
> >>      if. +/ i =. (n {.a) (+/@:E.)"1 b do.
> >>         bool =. 0 (pad + I.i) } bool
> >>      end.
> >>   end.
> >> end.
> >> bool
> >> )
> >>
> >> ts'~:sigb a'
> >>
> >> 0.000348269 6656
> >>
> >> ts'~:sigi a'
> >>
> >> 0.000235419 6272
> >>
> >> ts'~:sig3 a'
> >>
> >> 0.000233799 13248
> >>
> >> ts'~:sig1"1 a'
> >>
> >> 0.000106371 7680
> >>
> >>
> >> Also, I can confirm that Henry's canonical shift crashes this version of
> >> Jqt
> >>
> >>    JVERSION
> >> Engine: j807/j64/windows
> >> Release-b: commercial/2019-01-22T18:51:16
> >> Library: 8.07.22
> >> Qt IDE: 1.7.9/5.9.6
> >> Platform: Win 64
> >> Installer: J807 install
> >> InstallPath: c:/d/j807
> >> Contact: www.jsoftware.com
> >>
> >> Cheers,
> >>
> >> Mike
> >>
> >>
> >>
> >>> On 16/02/2019 17:52, [email protected] wrote:
> >>> I rewrote two explicit and perhaps clearer versions of my sig verb.
> Both
> >> work on the same principle as the original, but one uses a bit vector
> and
> >> the other uses a list of indices, and the indices are a bit faster (pun
> >> probably intended). I prefer the bit vector aesthetically though.
> >>>
> >>> Both basically store the set of indices where possible
> lexicographically
> >> minimal rotations could start (b and i in the verbs). On iteration n,
> the
> >> starting index of rotations whose nth element is not minimal among the
> nth
> >> elements of all possibly minimal rotations are removed from the
> >> aforementioned set. The iteration continues until only one possible
> >> rotation is left, and for a maximum of #y times, in which case all
> elements
> >> of y are identical and so any rotation will do.
> >>>
> >>> If I am not mistaken (I might be, have to hurry and go now), since
> there
> >> are a maximum of #y iterations and each includes at most #y comparisons
> (=
> >> <./), the number of comparisons is at worst quadratic in the length of
> y.
> >> This happens when 1=#~.y, but most of the time this number is much
> smaller.
> >>>
> >>> sigb=: (|.~ 3 : 0)"1
> >>>  b=. 1"0 y
> >>>  for. y do.
> >>>   if. 1 = +/b do. break. end.
> >>>   b=. (= <./)&.(b&#) y
> >>>   y=. 1|.y
> >>>  end.
> >>>  b i. 1
> >>> )
> >>>
> >>> sigi=: (|.~ 3 : 0)"1
> >>>  i=. i.#y
> >>>  for. y do.
> >>>   if. 1 = #i do. break. end.
> >>>   i=. i ((= <./)@:{ # [) y
> >>>   y=. 1|.y
> >>>  end.
> >>>  i
> >>> )
> >>>
> >>> Cheers,
> >>> Louis
> >>> ----------------------------------------------------------------------
> >>> For information about J forums see http://www.jsoftware.com/forums.htm
> >>
> >>
> >> ---
> >> This email has been checked for viruses by Avast antivirus software.
> >> https://www.avast.com/antivirus
> >> ----------------------------------------------------------------------
> >> 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