证明一般树的树遍历算法的时间复杂度

时间:2014-09-18 16:44:18

标签: algorithm math tree big-o time-complexity

我正在寻找一种方法来证明n-ary树的pre-tree遍历算法的运行时间。

每个节点可以有任意数量的子节点。

我似乎只能找到二叉树的证明。

我直观地理解,运行时间将是O(n),但我对如何提出严格的证据感到困惑。

2 个答案:

答案 0 :(得分:1)

在前序遍历中的节点v处完成的工作是O(1 + c_v),其中c_v是节点v的子节点数。这是因为我们做了一些不变的工作量,然后访问每个孩子一次

在所有节点上对此进行求和得到O(n)加上所有节点上的O(c_v)之和v。该数量为O(n),因为对每个树节点的子节点数求和相等于求和除了root之外的所有节点(你知道为什么吗?)

总的来说,运行时是O(n)。

希望这有帮助!

答案 1 :(得分:0)

我只是想尝试自己证明一下,然后找到这篇文章,所以我将分享我所能证明的东西。

证明是针对二叉树的递归DFS(按顺序或前顺序或后顺序),前提是它是完美平衡的。

我的表达方式可能并不完美,但应能给出要点。

enter image description here

首先使用递归关系表示访问所有节点的时间等于访问根的恒定时间c +访问左子树的所有节点T((n-1)/2)的时间+访问正确的子树T((n-1)/2)的所有节点的时间。而且我们知道访问一个节点的树仅需花费恒定的时间T(1)=c

T(n) = 2T((n-1)/2) + c
T(1) = 1

通过对递归进行几次迭代,我们注意到一个模式,并使用k来显示这种关系。因为我们知道基本情况T(1)=c,所以我们解决了k(绿色)。这从本质上告诉我们需要遍历另一个级别(深度)的次数。 将k代入方程式,一切都会很好地抵消,我们得到T(n)=O(n)