我知道这个问题之前已经有人问过了。我阅读了以下问题:如何确定堆的第k大元素是否大于x,但是我还有进一步的问题。我不想在旧帖子中发帖,所以:
给定一个数字x
和一个数字k
,检查x
是否比O(k)
中第k
小的元素大。
之前的问题做了同样的事情,但是使用了最大堆和小于符号。这不是问题所在。
考虑一个二叉小根堆:
1
2 3
12 17 50 90
23,18 80,88 51,52 91,92
令x
为19,k
为6。
第6个最小元素是18。
如果我按照另一个线程中的算法进行,会进行如下检查:
1+,2+,12+,23,18+,17+,80,88,3+
+
符号表示计数器递增。
算法如何知道18是第k
个最小的数字,而不是第3个?
为什么检查23、80和88不会干扰O(k)
?