【问题标题】:Parallel algorithm to count the number of leaves in a binary tree计算二叉树中叶子数的并行算法
【发布时间】:2017-04-28 06:14:43
【问题描述】:

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

【问题讨论】:

  • 树是如何表示的?你能在恒定时间内找到一个节点的子节点(和父节点)吗?
  • 树用邻接矩阵表示。
  • 肯定还有关于“二叉树”的更多信息。我们需要(a)内部节点的限制,(b)每个内部节点都有两个孩子的声明或(c)任何类型的平衡条件。根据您的问题陈述,该图可能包含一个指数长度的链,这是不可能用多项式许多处理器计算的。

标签: algorithm tree


【解决方案1】:

在下文中,我假设每个内部节点都有两个子节点。它可以与其他假设一起使用,但这是最容易展示原理的假设。至关重要的是,假设必须暗示总共有多项式节点。

根据我们的假设,我们总共有 $N$ 个节点 (N

然后取 N⁴ 个处理器 P(i,j,k,m), (1

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

因此处理器 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' 和 L'' 的根行中的两个值相加,您就有了数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多