用于计算二叉树中叶子数的并行算法

时间:2016-12-13 08:44:21

标签: algorithm tree

设T为$ n $ leaves的二叉树。设e是T的内边缘。如果我们从T中删除e,那么树T的叶子(L)被分成两组L'和L''分别。我想计算L'中的顶点数。和L''在$ O(logn)$时间内使用多项式多并行处理器。 我尝试使用树遍历方法,但无法找到解决方案。 注意,输入树以邻接矩阵的形式给出。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

在下文中,我假设每个内部节点都有两个子节点。它可以与其他假设一起使用,但这个假设是最简单的。至关重要的是,这个假设必须意味着总共存在多个节点。

根据我们的假设,我们总共有$ N $节点(N <2n)。

然后取N⁴个处理器P(i,j,k,m),(1&lt; = i,j,k <= N)并按如下方式使用它们以使邻接矩阵(包含1s以标记边缘)成为子树大小矩阵,其中A(i,j)是j子树的大小(如果j是i的子级)。

如果存在边(j,k)和(j,m),则处理器P(i,j,k,m)负责更新值(i,j),即如果j具有子k和m

因此处理器P(i,j,k,m)检查A(i,j)!= 0,A(j,k)!= 0和A(j,m)!= 0。如果是这种情况,则调整A(i,j)= 1 + A(j,k)+ A(j,m)。

可能存在竞争条件,但由于没有长度> N的路径,在最多2ld(N)轮后,矩阵稳定。

现在使用你的并行处理器将L&#39;的根中行的两个值相加。和L&#39;&#39;,你有你的号码。