作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我今天去面试,被问到这个问题:
Suppose you have one billion integers which are unsorted in a disk file. How would you determine the largest hundred numbers?
我什至不确定我该从哪里开始回答这个问题。给出正确结果的最有效过程是什么?我是否需要遍历磁盘文件一百次以获取列表中尚未出现的最高数字,还是有更好的方法?
最佳答案
显然,面试官希望您指出两个关键事实:
Get-Size
: 获取容器中值的个数。Find-Min
: 取最小值。Delete-Min
: 删除最小值以用更大的新值替换它。Insert
: 向容器中插入另一个元素。通过评估数据结构的要求,计算机科学教授希望您推荐使用 Heap (最小堆),因为它旨在支持我们在这里需要的操作。
例如,对于 Fibonacci heaps , 操作 Get-Size
, Find-Min
和 Insert
都是O(1)
和 Delete-Min
是O(log n)
(在本例中为 n <= 100
)。
在实践中,您可以使用您最喜欢的语言的标准库中的优先级队列(例如,C++ 中的 priority_queue
中的 #include <queue>
)通常使用堆来实现。
关于algorithm - 在十亿的文件中找到一百个最大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3931156/
我是一名优秀的程序员,十分优秀!