Re: Nary trees
- From: etienne buxin <ebuxin yahoo com>
- To: "Eric M. Monsler" <emonsler beamreachnetworks com>
- Cc: gtk-list gnome org
- Subject: Re: Nary trees
- Date: Tue, 8 Oct 2002 00:24:48 -0700 (PDT)
--- "Eric M. Monsler" <emonsler beamreachnetworks com> wrote:
> etienne buxin wrote:
> > hi,
> >
> > i'd like to use a structure similar to glib's Nary tree, but with the difference that many
> parent
> > nodes can share one or several children nodes.
> > any clue?
>
>
> This is going to be rather difficult.
>
> Unless you enforce a policy that only sibling-nodes can share child
> nodes, you are going to have a lot of trouble. Even then, any trivial
> operation on a child node (e.g., remove from tree) will require
> searching over the full set of parent-siblings and checking the child
> pointers against the full set of siblings for the child-node.
>
> Don't do it.
>
> If a fellow developer at work suggested such a data-storage approach, I
> would require a tone of convincing that this was a reasonable thing to do.
>
> If you do, I strongly suggest that you do not base it off of the current
> glib n-ary tree implimentation. At a minimum, I would enforce a policy
> that a node has a numbered depth N, that all children are depth N+1 and
> parents are N-1. This may seem obvious, but in a multi-parent scenario
> it would be easy to violate if moving a set of nodes within the tree.
>
> A suggested structure:
>
> struct eb_manymany {
> uint node_level;
> uint num_parents;
> uint num_par_max;
> struct eb_manymany **par_ptr_array;
> uint num_children;
> uint num_child_max;
> struct eb_manymany **chd_ptr_array;
> gpointer data;
> }
>
> That lets you reference count the parents and children, so that, for
> example, when removing a node you can go to all the parents and remove
> that child from their list of children.
>
> The _max allows dynamix allocation of the pointer arrays, if you
> previously allocated space for 12 children and need a 13th, you can
> reallocate that array up to size 24 or somthing, with 13 places occupied.
>
> If the above doesn't make sense after a few readings, you're not ready
> to tackle this. I have done a two-level parent-child that was
> many-to-many, where entities were by definitions either parents or
> children, and by the time I had the appropriate API and error checking
> all in place it was very cumersome.
>
> For example, what policy do you generically implement if a the last
> parent of a node is freed? In my application, that meant that the child
> was now a discard and could be freed, but that may or may not be
> appropriate for a generic storage library. Specify a calllback for the
> child node in that situation, defaulting to freeing? Complexity!
>
> If you do get it working as infinite level many-to-many, please post the
> code. :)
>
> Eric
>
hello,
in fact, i'd like to create a structure to represent events. i investigated trees because i need
a parent-child relationship between events, with the parent event being a consequence of his child
events. Because one event may have several consequences, it must be able to have many parents (of
different depht levels, moreover). i could duplicate the child for each of his parents, but this
is not too good, because each event has _a lot_ of info carried with ( *data in glib's Nary tree)
and this will consume a lot of ressources.
has someone an idea?
thanks,
E.
__________________________________________________
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos & More
http://faith.yahoo.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]