用于在大小为N的最大堆中找到最大K数的O(K * logK) algorithm是众所周知的。我听说有一个O(K)算法来解决这个问题。我没有找到关于此的文献。任何人都可以对此提出任何指示吗?谢谢!
答案 0 :(得分:5)
我终于找到了描述该算法的论文。 Quora上有类似的问题。
G.N的论文" An Optimal Algorithm for Selection in a Min-Heap" Frederickson描述了算法。以下是摘要:
提出了一种O(k)时间算法,用于选择大小为nk的二进制最小堆中的第k个最小元素。该方法使用递归定义的数据结构,该结构对堆中的某些元素施加分层分组。该结果建立了部分次序的另一个例子,其中第k个最小元素可以在时间上与信息理论下限成比例地确定。确定了两个应用,即资源分配问题和k个最小生成树的枚举。