我的一个朋友被问到一个问题
从一亿个数字中检索最大前100个数字
在最近的一次面试中。您有什么主意想出一种有效的解决方法吗?
运行它们全部通过一个最小堆大小100的:对于每个输入数k,替换当前分钟m用max(k, m)。之后,堆将容纳100个最大的输入。
k
m
max(k, m)
诸如Lucene之类的搜索引擎可以通过改进使用此方法来选择最相关的搜索答案。
编辑: 我没有通过面试-我两次都弄错了细节(在此之前,在生产中)。这是检查代码;它几乎与Python的标准相同heapq.nlargest():
heapq.nlargest()
import heapq def funnel(n, numbers): if n == 0: return [] heap = numbers[:n] heapq.heapify(heap) for k in numbers[n:]: if heap[0] < k: heapq.heapreplace(heap, k) return heap >>> funnel(4, [3,1,4,1,5,9,2,6,5,3,5,8]) [5, 8, 6, 9]