我知道以前有人问过这个问题。我阅读了以下问题: 如何确定堆的第 k 个最大元素是否大于 x ,但我还有其他问题。我不想在那么旧的线程中发帖。所以:
给定一个 numberx
和一个 number k
,检查是否x
大于 中的k
第 -th 最小元素O(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)
?