程序将具有n个叶节点的平衡二叉搜索树作为输入,并计算每个节点x的函数g(x)的值。如果计算g(x)的成本是min {no。 x的左子树中的叶节点数,没有。在x的右子树中的叶节点,然后程序的最坏情况时间复杂度
我的解决方案:
对于每个内部节点,最大成本为n / 2。对于每个叶节点,成本为零。
平衡二叉树的内部节点数是:叶节点 - 1
因此总费用将是:
n / 2 *(n-1)
为O(n ^ 2)
我是对的吗?
答案 0 :(得分:1)
我有一个不同的解决方案。对于最坏的情况,树将碰巧是一个完整的树,你可以正确,因此叶节点的数量将是n / 2.
但是根节点就是这种情况。
对于级别1的节点:总成本为2 * n / 4 = n / 2
对于级别2的节点:总成本为4 * n / 8 = n / 2
依此类推,直到最后一级为log(n),成本再次为= n / 2
总成本因此在最坏的情况下是= n / 2 * log(n)= O(n * logn),在完整的树中,可能发生最后一个级别没有完全填充但是在渐近分析中我们忽略了这样复杂的细节
答案 1 :(得分:0)
您可以使用分而治之技术计算每个节点的g(x)。递归地解决左右子树。结合结果以获得解决方案。
时间复杂度的递归关系是
T(n)= 2 * T(n / 2)+ O(1)
给出时间复杂度O(n)