DevonMcCormick's example
C: |__n0 |   |_n00 |   |_n01 | |__n1  |__n10  |   |__n100  |__n11  |   |__n110  
|   |__n111  |   |__n112  |__n12

is expressed by ordinal fraction like this:

0 |__1 |   |__11 |   |__12 | |__2  |__21  |   |__211  |__22
 |   |__221  |   |__222  |   |__223  |__23

This tree is represented by 

'0 1 11 12 2 21 211 22 221 222 223 23'
or
'000 100 110 120 200 210 211 220 221 222 223 230'

Note 

        1. that ordinal fractions are one-origin-indexed unlike J-arrays that 
are zero-origin-indexed

        2. that ordinal fractions are left-justified unlike integers that are 
right-justified  
        3. that ordinal fractions may be zeropadded to the right (23=230), 
unlike integers that may be zeropadded to the left. (23=023)
        4. that ordinal fractions also represents general arrays using zero as 
a general wild-card character.
        5. the ordering is alphabetic unlike Devon's which is breadth-first 

for your information.

Bo.



Den 22:55 mandag den 8. september 2014 skrev 'Pascal Jasmin' via Programming 
<programm...@jsoftware.com>:
 

>
>
>I think that is awesome, Thomas.  For those who didn't load the code, its much 
>easier to use than it looks as everything is a verb, and the whole thing is 
>like a mini stack language, and each operation produces intuitive and visible 
>results.
>
>
>
>
>----- Original Message -----
>From: Thomas Costigliola <tcost...@gmail.com>
>To: J Programming Forum <programm...@jsoftware.com>
>Cc: 
>Sent: Monday, September 8, 2014 4:04 PM
>Subject: Re: [Jprogramming] Ragged Array Shapes are Trees
>
>Array representations and "pointer" representations of trees both have
>their uses. In the end it depends on what problem you are trying to solve.
>As Devon demonstrated, for his purpose, array representation was not a
>hindrance at all. But, as Dan mentions, trees are also used to implement
>abstract data structures with certain run-time properties where finding the
>children of a node or inserting / moving sub-trees in less than constant
>time is not acceptable. J already can do the "pointer" representation with
>boxed arrays but as stated by others previously, there are insufficient
>primitives for working with them conveniently without additional overhead.
>
>I have played around with code similar to Pascal's for working with trees.
>I felt, however, this type of stuff has limited usefulness in production
>code without help from the interpreter to optimize it. It's the same idea
>as a "zipper" data structure in other languages. Here is a bare bones
>implementation with lots of room for more bells and whistles if desired.
>
>x=. @ [
>
>y=. @ ]
>
>focus=. (3&{::) y
>
>addrs=. (2&{::) y
>
>crumbs=. (1&{::) y
>
>stack=. (0&{::) y
>
>
>zip=. '';'';'';<
>
>unzip=. focus @: (zout ^: (#@crumbs))
>
>
>zin=. (stack) ; (crumbs , <@focus) ; (addrs , <x) ; <@([ {:: focus)
>
>zout=. (stack) ; (}:@crumbs) ; (}:@addrs) ; <@(0 (([:*@L. _1{::crumbs)
><y^:[ focus)`(_1{::addrs)`(_1{::crumbs)} ])
>
>zam=. <x 3} ] NB. amend
>
>zap=. (@ focus)(<@:)(`((3})`]))(`:6) NB. apply
>
>zpush=. (stack , <@focus) ; (crumbs) ; (addrs) ; (<@focus) NB. push focus
>in temp stack
>
>zpop=. (}:@stack) ; (crumbs) ; (addrs) ; <@(_1{::stack) NB. pop from temp
>stack
>
>zswap=. (}:@stack,<@focus) ; (crumbs) ; (addrs) ; <@(_1{::stack) NB. swap
>focus and top of temp stack
>
>
>]T=. (i.3 3);(11;22;<(_1;i.5));(<'AAA';<'BBB';'CCC')
>
>┌─────┬──────────────────────┬───────────────┐
>
>│0 1 2│┌──┬──┬──────────────┐│┌───┬─────────┐│
>
>│3 4 5││11│22│┌──┬─────────┐│││AAA│┌───┬───┐││
>
>│6 7 8││ │ ││_1│0 1 2 3 4││││ ││BBB│CCC│││
>
>│ ││ │ │└──┴─────────┘│││ │└───┴───┘││
>
>│ │└──┴──┴──────────────┘│└───┴─────────┘│
>
>└─────┴──────────────────────┴───────────────┘
>
>NB. zip tree
>
>zip T
>
>┌┬┬┬──────────────────────────────────────────────┐
>
>││││┌─────┬──────────────────────┬───────────────┐│
>
>│││││0 1 2│┌──┬──┬──────────────┐│┌───┬─────────┐││
>
>│││││3 4 5││11│22│┌──┬─────────┐│││AAA│┌───┬───┐│││
>
>│││││6 7 8││ │ ││_1│0 1 2 3 4││││ ││BBB│CCC││││
>
>│││││ ││ │ │└──┴─────────┘│││ │└───┴───┘│││
>
>│││││ │└──┴──┴──────────────┘│└───┴─────────┘││
>
>││││└─────┴──────────────────────┴───────────────┘│
>
>└┴┴┴──────────────────────────────────────────────┘
>
>NB. Change 'CCC' to 'DDD'
>
>unzip 'DDD' zam _1 zin _1 zin _1 zin zip T
>
>┌─────┬──────────────────────┬───────────────┐
>
>│0 1 2│┌──┬──┬──────────────┐│┌───┬─────────┐│
>
>│3 4 5││11│22│┌──┬─────────┐│││AAA│┌───┬───┐││
>
>│6 7 8││ │ ││_1│0 1 2 3 4││││ ││BBB│DDD│││
>
>│ ││ │ │└──┴─────────┘│││ │└───┴───┘││
>
>│ │└──┴──┴──────────────┘│└───┴─────────┘│
>
>└─────┴──────────────────────┴───────────────┘
>
>NB. Copy the third sub-tree down into the second
>
>unzip zpop _1 zin (,&a:) zap 2 zin 1 zin zout zpush 2 zin zip T
>
>┌─────┬──────────────────────────────────────┬───────────────┐
>
>│0 1 2│┌──┬──┬──────────────────────────────┐│┌───┬─────────┐│
>
>│3 4 5││11│22│┌──┬─────────┬───────────────┐│││AAA│┌───┬───┐││
>
>│6 7 8││ │ ││_1│0 1 2 3 4│┌───┬─────────┐││││ ││BBB│CCC│││
>
>│ ││ │ ││ │ ││AAA│┌───┬───┐│││││ │└───┴───┘││
>
>│ ││ │ ││ │ ││ ││BBB│CCC│││││└───┴─────────┘│
>
>│ ││ │ ││ │ ││ │└───┴───┘││││ │
>
>│ ││ │ ││ │ │└───┴─────────┘│││ │
>
>│ ││ │ │└──┴─────────┴───────────────┘││ │
>
>│ │└──┴──┴──────────────────────────────┘│ │
>
>└─────┴──────────────────────────────────────┴───────────────┘
>
>NB. This time swap the sub-trees in the previous example
>
>unzip zpop 2 zin zout zout zswap 2 zin 1 zin zout zpush 2 zin zip T
>
>┌─────┬───────────────────────┬──────────────┐
>
>│0 1 2│┌──┬──┬───────────────┐│┌──┬─────────┐│
>
>│3 4 5││11│22│┌───┬─────────┐│││_1│0 1 2 3 4││
>
>│6 7 8││ │ ││AAA│┌───┬───┐│││└──┴─────────┘│
>
>│ ││ │ ││ ││BBB│CCC││││ │
>
>│ ││ │ ││ │└───┴───┘│││ │
>
>│ ││ │ │└───┴─────────┘││ │
>
>│ │└──┴──┴───────────────┘│ │
>
>└─────┴───────────────────────┴──────────────┘
>
>
>On Mon, Sep 8, 2014 at 3:45 PM, Devon McCormick <devon...@gmail.com> wrote:
>
>> A little research clarified what we see here: apparently it's part of the
>> definition of a binary tree that the left node be smaller than its parent
>> but the right one is greater.  Right away, I see a problem for the
>> predecessor-index representation of a tree that I'm advocating as it does
>> not distinguish between right and left nodes as it is usually implemented.
>>
>>
>> On Mon, Sep 8, 2014 at 3:03 PM, Devon McCormick <devon...@gmail.com>
>> wrote:
>>
>> > Do you have a reference to a good example of this?  Looking at the
>> > "before" and "after"  pictures on the right here -
>> > http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree - the
>> > rebalancing seems arbitrary as it preserves some relations but changes
>> > others.
>> >
>> >
>> > On Mon, Sep 8, 2014 at 2:30 PM, Dan Bron <j...@bron.us> wrote:
>> >
>> >> Raul wrote:
>> >> > Note that J already supports trees.
>> >>
>> >> Devon wrote:
>> >> > I have J code that uses trees which I run daily and
>> >> > have been doing so for years.
>> >>
>> >> Pascal wrote:
>> >> >  I think trees are done at least ok, if not "right" already.
>> >>
>> >> Challenge: express, in J, the logic of rebalancing a heap (say, a
>> >> Fibonacci
>> >> heap, but I'm not particularly picky).
>> >>
>> >> For the sake of this exercise, you may ignore considerations of
>> efficiency
>> >> (though that's a bit of a self-contradiction, because heaps are
>> frequently
>> >> introduced specifically for the sake of efficiency). I am only
>> interested
>> >> in the directness, simplicity, elegance (lyricality) of the notation, in
>> >> its current form, for expressing ideas about trees.  We can make it
>> >> efficient "later" (Pepe's TCO utility is a start).
>> >>
>> >> -Dan
>> >>
>> >>
>> >>
>> >> ----------------------------------------------------------------------
>> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> >>
>> >
>> >
>> >
>> > --
>> > Devon McCormick, CFA
>> >
>> >
>>
>>
>> --
>> Devon McCormick, CFA
>
>
>
>
>> ----------------------------------------------------------------------
>> 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