我正在努力弄清以下问题的时间复杂性(这不是家庭作业,只是我想到并无法理解的事情)。
假设您有一棵任意树。该算法使得对于树中的每个节点,您必须运行一些O(1)操作,该操作的次数是该节点的叶子后代数量的多少。因此,在下面的示例树中,我们将为节点A运行2个操作,为根节点R运行6个操作。
比方说,您有n个节点,树的深度为d,并且可以使用任何其他必要的表示法。什么复杂?
我对此不太了解。当然,它小于O(n ^ 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)
操作。