MAX_HEAPIFY 算法和最坏情况的递归关系

问题描述

我在经历 CLRS 时发现了 max-heapify 算法的递归关系。事实上,我的老师非常简单地证明,最大堆化过程的时间复杂度是 O(logn),因为最坏的情况是根必须“冒泡/向下浮动” '从顶部一直到最后一层。这意味着我们逐层移动,因此步数等于堆的层数/高度,正如我们所知,它以 logn 为界。很公平。

然而,在 Clrs 中通过递归关系以更严格的方式证明了这一点。据说最坏的情况发生在最后一层被填满一半时,这个 has already been explained here. 所以据我从那个答案中了解到,他们在数学上得出了这个结论:我们想要最大化左子树的大小 相对于堆大小n,即最大化L/n的值。为了实现这一点,我们必须将最后一层填充一半,以便最大化 L(左子树)中的节点数,并最大化 L/n。

向最后一层添加更多节点会增加节点数量,但不会改变 L 的值。因此,随着堆变得更加平衡,L/n 会减少。只要是数学的,一切都很好。

在这就是我卡住的地方:假设我在这个半填充的关卡中再添加一个节点。实际上,我没有看到这如何以某种方式减少发生的步骤/比较的数量并且不再是最坏的情况。即使我又添加一个节点,所有的比较都只发生在左子树中,与右子树无关。有人可以说服我/帮助我了解为什么以及如何确定在最坏情况下必须最大化 L/n 吗?我希望有一个示例输入,以及如何添加更多节点不再使其成为最坏的情况?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)