与树相关的问题的时间复杂度

时间:2018-11-16 04:05:46

标签: algorithm data-structures tree time-complexity

我正在努力弄清以下问题的时间复杂性(这不是家庭作业,只是我想到并无法理解的事情)。

假设您有一棵任意树。该算法使得对于树中的每个节点,您必须运行一些O(1)操作,该操作的次数是该节点的叶子后代数量的多少。因此,在下面的示例树中,我们将为节点A运行2个操作,为根节点R运行6个操作。

example tree

比方说,您有n个节点,树的深度为d,并且可以使用任何其他必要的表示法。什么复杂?

我对此不太了解。当然,它小于O(n ^ 2),但是我该如何处理呢?谢谢!

编辑:节点的叶后代是没有任何子代的后代。后代是一个节点,可以通过从父级到子级的重复操作来访问(无论是内部节点还是叶节点都无关紧要)

2 个答案:

答案 0 :(得分:3)

它是Ө(n ^ 2)。显然,正如您所指出的,它位于 O(n ^ 2)中,因为每个节点的后代叶子必须少于 n 个后代。

在一棵这样的树上

     A
    /  \
   B    C
       / \
      D   E
         / \
        F   G
             ...

最顶部的 n / 4 个内部节点至少有 n / 4 个后代叶子,因此操作总数至少为 n ^ 2 / 16 ,位于Ω(n ^ 2)中。

如果深度限制为 d ,则每个节点最多可以具有 d 个祖先,因此您得到 O(n * min(d,n )),但由于类似的构造,它也很紧。

答案 1 :(得分:-1)

我认为它将是O(2(N - Leaf) + Leaf),其中Leaf是树的后代数量。需要O(2(N - Leaf))遍历树以找到叶子后代,并且需要对每个叶子后代执行O(1)操作。