我无法在任意大小为N的树上计算以下算法的时间分析。
问题是:
考虑以下算法, 这做出以下假设。 x和y是两个二进制的根 树木,Tx和Ty。 Left(z)是指向任一节点z的左子节点的指针 树,右(z)指向正确的孩子。如果节点没有 左或右子,指针返回\ NIL"。每个节点z也有一个字段 Size(z)返回以z为根的子树中的节点数。 大小(NIL)定义为0.算法SameTree(x; y)返回a 布尔答案,表示树根是否为x和y 如果忽略左右指针之间的差异,也一样。
给出时间分析以在任意大小为N的树上运行上述算法。对于密集图,我得到O(nlog2 ^ 3),对于密度较小的图,我得到O(n)。我对吗?有人可以帮我确定时间成本吗?
答案 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行将在每个递归调用中激活两个条件。 平均病例要复杂得多。