在100个元素的二进制堆中,找到第99个元素需要花费时间?
还是在“ n”个元素上的二进制堆中,找到第(n-1)个元素所花费的时间?
================================================ ========================
我的想法是O(1),因为您可以简单地转到数组的第99个单元格。
答案 0 :(得分:2)
在n个元素的二进制最小堆中,第(n-1)个 th 元素(即最大的倒数第二个)将位于树的最后一级,或者位于树的最后一级。堆的最后一级。在完整堆中,最后一层有(n + 1)/ 2个项目,倒数第二层是(n + 1)/ 4个项目。
这是O(n)运算,因为您可能必须搜索(3 *(n + 1))/ 4个元素。
它不是O(1),因为不一定对堆进行排序。您不能保证100个项目的堆中第99个最小的项目在数组中的第99个位置。考虑以下两个最小堆:
1 1
2 3 5 2
4 5 6 7 6 7 3 4
这两个都是有效的最小堆,但是在第二个中,第二个最小的项位于数组的位置3。
更新
实际上,在完整的二进制堆中,倒数第二项必须位于叶级别。在未满的堆中,它可以在叶级别,或级别或上方的任何位置。考虑例如:
1
2 6
3 5 7
关于(3 *(n + 1)/ 2)问题:
倒数第二个可以在最后一个级别(4个节点)或倒数第二个级别(2个节点)上的任何位置。总共6个可能的节点。得出最后一个级别为(7 + 1)/ 2个节点,倒数第二个级别为(7 + 1)/ 4个节点。简化为(3 *(7 + 1))/ 4。