Probably it's just something going over my head, but how do these
permutations have more than one cycle?

   #@C. _1 1 |."0 _ i. 128
1 1

C. y returns boxed cycles in permutation y.

What am I missing?

Jan-Pieter

On Fri, 17 Mar 2023, 01:07 Marshall Lochbaum, <mwlochb...@gmail.com> wrote:

> Interesting problem! I think this works: for starting permutation p,
> keep two lists. At step i,
>
> - l is {~^:i p, that is, the index 2^i steps further along the cycle
> - m is the minimum index among those less than 2^i steps ahead.
>
> Initially l is p and m is i.#p . To update, simultaneously replace l
> with {~l and m with m<.l{m . This last expression is the minimum of
> steps i.2^i and (2^i)+i.2^i , which covers i.2^i+1 in total.
>
> One rendition of the whole thing:
>
>    1{:: ({~@[ ; ]<.{)&>/^:(>.2^.#p) (;i.@#) p
>
> I haven't come up with a nice way to write the termination condition so
> I just used a logarithmic number of steps, since as soon as 2^i exceeds
> the length of the permutation all indices have been covered. It should
> be safe to stop when m stops changing (in general, l won't), and that
> would give time proportional to the log of the longest cycle.
>
> Marshall
>
> On Thu, Mar 16, 2023 at 03:20:25PM -0700, Elijah Stone wrote:
> > I can characterise the cycles of a permutation with (<.{~)^:_ (this keys
> > each cycle by its lowest element, but any unique key is fine).
> >
> > But although this sometimes has log span (in the length of the longest
> cycle):
> >
> >    # (<.{~)^:(<_) _1|.i.128
> > 8
> >
> > The worst case is linear span:
> >
> >    # (<.{~)^:(<_) 1|.i.128
> > 128
> >
> > Is there anything with worst-case log span?
> >
> > The best-case log span solution is basically an instance of pointer
> > doubling. But the reason is sometimes doesn't work is that we have no
> > per-element key which is monotonic in the order of elements within a
> cycle;
> > <. is a crude approximation.  When there is an ascending run of
> permutation
> > indices, <. can drop down it in log time; but when the indices decrease,
> > climbing takes linear time as one element can get 'stuck' waiting for
> > another.  Is there any workaround or alternative?
> >
> > ----------------------------------------------------------------------
> > 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