树木的时间成本分析

时间:2014-05-18 18:58:47

标签: algorithm tree binary-tree time-complexity

我无法在任意大小为N的树上计算以下算法的时间分析。

问题是:

考虑以下算法, 这做出以下假设。 x和y是两个二进制的根 树木,Tx和Ty。 Left(z)是指向任一节点z的左子节点的指针 树,右(z)指向正确的孩子。如果节点没有 左或右子,指针返回\ NIL"。每个节点z也有一个字段 Size(z)返回以z为根的子树中的节点数。 大小(NIL)定义为0.算法SameTree(x; y)返回a 布尔答案,表示树根是否为x和y 如果忽略左右指针之间的差异,也一样。

  1. 程序:SameTree(x,y:Nodes):Boolean;
  2. IF尺寸(x)6 =尺寸(y)然后返回False;停止。
  3. IF x = NIL THEN返回T rue;停止。
  4. IF(SameTree(左(x);左(y))和SameTree(右(x);右(y))) OR(SameTree(右(x);左(y))和SameTree(左(x);右(y))) 然后返回T rue;停止。
  5. 返回错误;停止
  6. 给出时间分析以在任意大小为N的树上运行上述算法。对于密集图,我得到O(nlog2 ^ 3),对于密度较小的图,我得到O(n)。我对吗?有人可以帮我确定时间成本吗?

1 个答案:

答案 0 :(得分:0)

好吧,让我们使用Master原则。我们shell考虑最坏的情况,其中第4行检查OR之前的条件,然后在每次递归调用之后检查它之后的条件。 我们还将通过假设二进制树更少或更平衡(在树中每个节点的每个子节点中具有几乎相同数量的节点)来简化它。 你有:

T(n)= 4 * T(n / 2)+2。

看看http://en.wikipedia.org/wiki/Master_theorem,了解接下来要做什么: 我们有来自Master定理的案例1.

log in base 2 of 4是2.所以正确的答案是O(n ^ 2)。这是对一般案例的分析。如果您希望进行更精确的分析,您需要告诉我们更多关于树平衡,不平衡的可能性以及构建它的机会是什么,第4行将在每个递归调用中激活两个条件。 平均病例要复杂得多。