Re: Recursive Arrays 101 - Mailing list pgsql-general

From Gavin Flower
Subject Re: Recursive Arrays 101
Date
Msg-id 563B9B32.8080502@archidevsys.co.nz
Whole thread Raw
In response to Re: Recursive Arrays 101  (Rob Sargent <robjsargent@gmail.com>)
Responses Re: Recursive Arrays 101
List pgsql-general
On 06/11/15 04:33, Rob Sargent wrote:
> On 11/05/2015 04:56 AM, Achilleas Mantzios wrote:
>> On 04/11/2015 17:53, Rob Sargent wrote:
>>> On 11/04/2015 03:03 AM, Achilleas Mantzios wrote:
>>>> Sorry for being kind of late to the party (I was in 2015.PgConf.EU
>>>> !!), and not having read
>>>> most of the replies, what we have been successfully doing for this
>>>> problem for our app
>>>> is do it this way :
>>>> parents int[] -- where parents stores the path from the node to the
>>>> root of the tree
>>>> and then have those indexes :
>>>> btree (first(parents))
>>>> btree (level(parents)) -- length
>>>> btree (last(parents))
>>>> gin (parents gin__int_ops) -- the most important
>>>>
>>>> This has been described as "genealogical tree" approach, and works
>>>> very good, IMHO much better
>>>> than nested sets.
>>>>
>>> Is there a more complete description of this approach available?  By
>>> the title one might assume could be applied to populations as
>>> opposed to phylogeny (the OP's use case).  Does it deal with
>>> consanguinity?  Does it perform well going "up" the tree (which is
>>> of course branched at every level)?
>>
>> From here https://en.wikipedia.org/wiki/Phylogenetic_tree I assume
>> that phylogenetic trees are normal
>> trees, and I see no reason why not be modeled with the genealogical
>> approach described. The earliest paper
>> I based my work on was :
>>
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjABahUKEwiR6auUlvnIAhXGvhQKHVyDA-s&url=https%3A%2F%2Fdownload.samba.org%2Fpub%2Funpacked%2Fldb%2Fldb_sqlite3%2Ftrees.ps&usg=AFQjCNEktJsibP435MBki5cdGmO_CzKmwg&sig2=I9yC_tpyeWrEueDJTXbyAA&bvm=bv.106674449,d.d24&cad=rja
>>
>> Finding the root is O(1). Going "up" the tree or finding common
>> ancestry is reduced to the problem
>> of finding overlap/intersections/contains/contained between
>> postgresql arrays.
>>
>> The indexes, functions and operators provided by contrib/intarray
>> were a basic element for the success of this
>> approach.
>>
> Going "up" a genealogy to me means getting two parents, four
> grandparents, 8 great grandparents etc.  On a good day, at least when
> there are no loops.  This isn't, to my understanding, how phylogeny
> works (but my genetics degree was thirty year ago) so perhaps I'm
> still confused by the titles used.  And certainly not to say that your
> approach isn't what the OP really needs!
>
>
You're actually going 'DOWN' the tree, in terms of how trees are used in
computer science & graph theory!

See http://www.mathcove.net/petersen/lessons/get-lesson?les=32


Cheers,
Gavin


pgsql-general by date:

Previous
From: Kevin Grittner
Date:
Subject: Re: Deadlock detected after pg_repack receives SIGINT
Next
From: Rob Sargent
Date:
Subject: Re: Recursive Arrays 101