来源:Wikipedia
使用堆或者也可以进行流式传输,单次传递部分排序 其他优先级队列数据结构。首先,插入第一个k 输入结构的元素。然后一次通过 剩下的元素,依次将每个元素添加到结构中,并删除 最大的元素。每次插入操作也需要O(log k)时间, 总体上导致O(n log k)时间。
make one pass over the remaining elements, add each to the structure in turn, and remove the largest element
所说的部分。这与1)中描述的方法相同吗?答案 0 :(得分:5)
建议的方法是流式传输。考虑到O(k)空间复杂度(但它只找到前k项),它不需要在内存中运行所有项来运行heapify算法。
该算法的更明确的描述(参见reference WP给出的)是
通过构造,堆永远不会增长到超过 k + 1个元素。这些项目可以通过磁盘,网络等进行流式传输,这是使用heapify算法无法实现的。