 
 
 
 
 
 
Re: Plotting a recursion tree
- To: mathgroup at smc.vnet.net
- Subject: [mg108065] Re: [mg108010] Plotting a recursion tree
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Sun, 7 Mar 2010 05:09:17 -0500 (EST)
- References: <201003050932.EAA29345@smc.vnet.net>
Hi Bill,
First of all, what you create is not really a tree, in a sense that there
are no clear parent-children relationships between elements of your tree on
different levels. It is more like a result of collecting the nodes of the
real tree during the breadth-first traversal.
Here is what I woulld do (this is just one of the many possibilities):
Clear[makeMyTree, displayMyTree];
Module[{h},
  makeMyTree[a_Integer?Positive, b_Integer?Positive, x_,
    depth_Integer?Positive] :=
   Nest[# /. h[z_] :> {z, Table[h[z/b], {a}]} &, {h[x]}, depth] /.
    h -> Sequence ];
displayMyTree[tree_] :=
  TreeForm[
   Apply[Sequence,
     tree //. {c_, d_List} :> c @@ d] /.
    x_Times :> ToString@TraditionalForm@x];
You use this as follows:
In[4]:= makeMyTree[4, 2, x, 3]
Out[4]= {{x, {{x/
    2, {{x/4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}, {x/
      4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}}}, {x/
    2, {{x/4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}, {x/
      4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}}}, {x/
    2, {{x/4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}, {x/
      4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}}}, {x/
    2, {{x/4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}, {x/
      4, {x/8, x/8, x/8, x/8}}, {x/4, {x/8, x/8, x/8, x/8}}}}}}}
In[5]:=
displayMyTree@makeMyTree[4, 2, x, 3]
(* Output suppressed. *)
Hope this helps.
Regards,
Leonid
On Fri, Mar 5, 2010 at 1:32 AM, metobillc <metobillc at gmail.com> wrote:
> Hello,
>
>  I'd like to be able to plot recursion trees, e.g. if I have a
> recurrence relation T(n) = 4T(n/2) + c n^2, T(1) = d (for integer n),
> and I want to plot T(8), I'd like to see a tree with 64 c at the head,
> 4 children with 16 c, 16 grandchildren with 4 c, 64 great granchildren
> with d (they are the leaves of the tree).  The best I've come up with
> so far is:
>
> mylist[a_Integer /; a > 0, b_Integer /; b > 0, x_, depth_Integer /;
> depth > 0] := NestList[Table[#/b, {a}] &, x, depth]
>
> mylist[4,2,x,3] yields
> {x,
> {x/2, x/2, x/2, x/ 2},
> {{x/4, x/4, x/4, x/4}, {x/4, x/4, x/4, x/4}, {x/4, x/4, x/4, x/4}, {x/
> 4, x/4, x/4, x/4}}, {{{x/8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}, {x/
> 8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}},
>  {{x/8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}, {x/
> 8, x/8, x/8, x/8}},
>  {{x/8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}, {x/
> 8, x/8, x/8, x/8}},
>  {{x/8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}, {x/8, x/8, x/8, x/8}, {x/
> 8, x/8, x/8, x/8}}}}
>
> How can I get a separate case for the leaves, and then plot a list
> like this in tree form?  TreeForm[mylist[4,2,x,3]] has a bunch of
> nodes called "List" and "Times", and is not symmetric -- I just want
> the elements of the list.
>
> Thanks,
>
> Bill Campbell
> Naval Research Laboratory
> Monterey, CA
>
>
- References:
- Plotting a recursion tree
- From: metobillc <metobillc@gmail.com>
 
 
- Plotting a recursion tree

