一尘不染

从一亿个数字中检索前100个数字

algorithm

我的一个朋友被问到一个问题

从一亿个数字中检索最大前100个数字

在最近的一次面试中。您有什么主意想出一种有效的解决方法吗?


阅读 227

收藏
2020-07-28

共1个答案

一尘不染

运行它们全部通过一个最小堆大小100的:对于每个输入数k,替换当前分钟mmax(k, m)。之后,堆将容纳100个最大的输入。

诸如Lucene之类的搜索引擎可以通过改进使用此方法来选择最相关的搜索答案。

编辑: 我没有通过面试-我两次都弄错了细节(在此之前,在生产中)。这是检查代码;它几乎与Python的标准相同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]
2020-07-28