Reading about dyadic /: made me realize I didn't answer your challenge:
B=:'I was sloppy before.' f=:/: g=:/: { ] h=:f;g h B ┌─────────────────────────────────────────────────┬────────────────────┐ │1 5 12 19 0 3 13 14 18 15 7 8 16 9 10 17 4 6 2 11│ .Iabeefloopprsswy│ └─────────────────────────────────────────────────┴────────────────────┘ Linda -----Original Message----- From: programming-boun...@forums.jsoftware.com [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Roger Hui Sent: Wednesday, March 05, 2014 11:28 PM To: Programming forum Subject: Re: [Jprogramming] a good bar bet! You use s=:/:~x to get the sort and g=:/:x to get the grade. It's faster than s=:x{~g=:/:x . (That's the bar bet.) Counter-intuitive to anyone who thinks indexing is always faster than sorting, or that sorting is necessarily an expensive slow operation. Knowing this is a strong hint on how to find the minimum of x faster than the conventional implementation. Without this hint, even expert C programmers (the ones I asked) can't solve the puzzle. And I mean EXPERT in capital letters. APL/J as a tool of thought: <./x ←→ 1 i.~ 1 x}M⍴0 ⌊/x ←→ b⍳1 ⊣ b[x]←1 ⊣ b←M⍴0 On Wed, Mar 5, 2014 at 8:18 PM, Linda Alvord <lindaalv...@verizon.net>wrote: > But if you use dyadic /: you won't get g , will you? I'm looking > forward to reading all the quotes again. > > Linda > > > -----Original Message----- > From: programming-boun...@forums.jsoftware.com [mailto: > programming-boun...@forums.jsoftware.com] On Behalf Of Roger Hui > Sent: Wednesday, March 05, 2014 11:00 PM > To: Programming forum > Subject: Re: [Jprogramming] a good bar bet! > > I respectfully suggest you study the dyad /: . The fact that the dyad /: > is defined to do what it does is one of Ken Iverson's > masterstrokes<http://keiapl.org/anec/#sort> > . > > > > On Wed, Mar 5, 2014 at 7:46 PM, Linda Alvord <lindaalv...@verizon.net > >wrote: > > > For me slow J is fast enough, but I really was delighted when this > worked > > at all. No doubt it is slow. > > > > > > ]A=:?10$100 > > 63 92 51 92 39 15 43 89 36 69 > > f=:/: > > g=:/: { ] > > h=:f;g > > h A > > --------------------T-----------------------------┐ > > │5 8 4 6 2 0 9 7 1 3│15 36 39 43 51 63 69 89 92 92│ > > L-------------------+------------------------------ > > > > Linda > > > > > > > > -----Original Message----- > > From: programming-boun...@forums.jsoftware.com > > [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Roger Hui > > Sent: Wednesday, March 05, 2014 8:45 PM > > To: Programming forum > > Subject: Re: [Jprogramming] a good bar bet! > > > > It's necessary to have the g because I asked for both the sort (s) and > the > > grade, which would be the g. > > > > The problem arose in an application where the sort and the grade are used > > for something else. > > > > > > > > On Wed, Mar 5, 2014 at 4:32 PM, Don Kelly <d...@shaw.ca> wrote: > > > > > Why is it necessary to have 'g' > > > > > > repeating the process on my machine which is obviously slower gives > an > > > insignifcant time difference. > > > > > > 20 timer 's=:/:~x [ /:x' > > > > > > 0.172937 > > > > > > > > > 20 timer 's=:/:~x [ g=:/:x' > > > > > > 0.173672 > > > > > > Is it because storage is necessary and it is just as fast to store to a > > > named location rather than to some temporary storage? > > > Space differences seem small. > > > > > > Don Kelly > > > > > > > > > On 05/03/2014 12:11 PM, Joe Bogner wrote: > > > > > >> Yes, the grade is done regardless. Here's my reasoning: In the > > >> incumbent version, s is taken from the grade with from { which is > > >> slower than just resorting. > > >> It seems like the difference between sorting and selecting by indexes. > > >> I am surprised if that's the answer though because selecting by index > > >> should be fast since it's a contiguous array. > > >> > > >> jtifrom looks more complicated than jtsortc but I haven't been able to > > >> figure out how jtsortc works. > > >> > > >> On Wed, Mar 5, 2014 at 2:50 PM, Roger Hui <rogerhui.can...@gmail.com> > > >> wrote: > > >> > > >>> x=: a.{~ 1e7 ?@$ 256 > > >>> timer=: 6!:2 > > >>> > > >>> 10 timer 's=:x{~g=:/:x' > > >>> 0.136961 > > >>> 10 timer 's=:/:~x [ g=:/:x' > > >>> 0.0765459 > > >>> > > >>> 10 timer '/:~x' > > >>> 0.012887 > > >>> 10 timer 'x{~g' > > >>> 0.065751 > > >>> 10 timer '/:x' > > >>> 0.0606987 > > >>> > > >>> > > >>> > > >>> On Wed, Mar 5, 2014 at 11:45 AM, Roger Hui < > rogerhui.can...@gmail.com> > > >>> wrote: > > >>> > > >>> That's my alternative faster expression as well. But the more > > >>>> interesting > > >>>> question is, why is it faster? Since we do the grade in both cases, > > the > > >>>> comparison is between /:~x and g{x (or x{~g) with g pre-computed. > The > > >>>> answer does not depend knowledge specific to J. > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> On Wed, Mar 5, 2014 at 11:38 AM, Joe Bogner <joebog...@gmail.com> > > >>>> wrote: > > >>>> > > >>>> Sorting and grading separately seems faster > > >>>>> > > >>>>> timer=: 6!:2 > > >>>>> x=:(1e7 $ 26?26) { 'abcdefghijklmnopqrstuvwxyz' > > >>>>> NB. incumbent > > >>>>> timer 's=: x{~g=: /:x' > > >>>>> 0.0914002 > > >>>>> > > >>>>> NB. alternate > > >>>>> timer 'S=: /:~x[G=: /:x' > > >>>>> 0.0668677 > > >>>>> > > >>>>> s-:S > > >>>>> 1 > > >>>>> G-:g > > >>>>> 1 > > >>>>> > > >>>>> > > >>>>> I am speculating that sorting does it in place? which is faster > than > > >>>>> the selection from the grade > > >>>>> > > >>>>> > > >>>>> > > >>>>> On Wed, Mar 5, 2014 at 2:02 PM, Raul Miller <rauldmil...@gmail.com > > > > >>>>> wrote: > > >>>>> > > >>>>>> Hmm... > > >>>>>> > > >>>>>> G=:a.i.S=:/:~x > > >>>>>> is faster. > > >>>>>> > > >>>>>> But while s-:S, g and G are different. > > >>>>>> > > >>>>>> So I'm drawing a blank here, on how to make the grade. > > >>>>>> > > >>>>>> Thanks, > > >>>>>> > > >>>>>> -- > > >>>>>> Raul > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> On Wed, Mar 5, 2014 at 1:52 PM, Roger Hui < > > rogerhui.can...@gmail.com> > > >>>>>> > > >>>>> wrote: > > >>>>> > > >>>>>> Suppose x is a long vector of characters and you need both its > sort > > >>>>>>> > > >>>>>> and its > > >>>>> > > >>>>>> grade. Can you do it faster than s=: x{~g=: /:x ? > > >>>>>>> > > >>>>>>> Posed this way, the answer is of course yes. But how, and why is > > it > > >>>>>>> faster? > > >>>>>>> ------------------------------------------------------------ > > >>>>>>> ---------- > > >>>>>>> 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 > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm