微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何推导出Heapify算法的最坏情况时间复杂度?

如何解决如何推导出Heapify算法的最坏情况时间复杂度?

我想知道如何推导出堆数据结构的 Heapify 算法的时间复杂度。

我是根据 Ellis Horowits 所著的《计算机算法基础》一书提出这个问题的。我正在添加一些算法的截图以及书中给出的推导。

算法:

enter image description here

enter image description here

最坏情况复杂度的推导:

enter image description here

我理解了这个计算的第一部分和最后一部分,但我无法弄清楚 2^(i-1) x (k-i) 是如何变成 i2^(k-i-1) 的。

我在互联网上可以找到的所有推导都采用了不同的方法,即以不同的方式考虑树的高度。我知道这种方法也会导致相同的答案,但我想了解这种方法

您可能需要以下信息:

2^k-1 = n 或近似 2^k = n,其中 k 是级别数,从根节点开始,根的级别为 1(不是 0),n 是节点数。>

还有 Adjust() 函数的最坏情况时间复杂度与它调用的子树的高度成正比,即 O(log n,其中 n 是子树中元素的总数树。

解决方法

这是一个变量替换。

首先,意识到在等式的最左边,和的最后一项为零(因为当 i = k,k-i = 0 时)。所以,第一次求和的范围可以写成1 <= i <= k-1。现在,将 i 替换为 k-ii 迭代集合 {1,2,...,k-1}k-i 迭代集合 {k-1,... 2,1},它们是同一个集合,因此,我们可以做这个替换。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。