【发布时间】:2010-06-16 14:48:39
【问题描述】:
我正在为即将到来的面试而学习,并且已经多次遇到这个问题(逐字逐句)
在 N 个数字的排序列表中查找或确定一个数字不存在,其中数字范围超过 M、M >> N 和 N 大到足以跨越多个磁盘。击败 O(log n) 的算法;恒定时间算法的加分。
首先,我不确定这是否是一个真正有解决方案的问题。我和我的同事已经对这个问题进行了数周的思考,但它似乎不正确(当然,仅仅因为我们想不出解决方案并不意味着没有解决方案)。我会问面试官的几个问题是:
- 排序列表中是否有重复项?
- 磁盘数和N有什么关系?
我考虑的一种方法是对每个磁盘的最小值/最大值进行二进制搜索,以确定应该保存该数字的磁盘,如果存在,然后在磁盘本身上进行二进制搜索。当然,如果磁盘数量很大并且您还有一个排序的磁盘列表,这只是一个数量级的加速。我认为这会产生某种 O(log log n) 时间。
至于 M >> N 提示,也许如果您知道磁盘上有多少个数字以及范围是多少,您有时可以使用鸽巢原理排除某些情况,但我不能找出一个数量级的改进。
另外,“恒定时间算法的奖励积分”让我有点怀疑。
对此问题有任何想法、解决方案或相关历史吗?
【问题讨论】:
-
我仍然对此感到好奇,我想看看另外几个答案。
-
为什么不使用散列(即分布式散列表)?
-
哎呀,这可以工作,给定一个快速的散列,以及减少空间浪费的机制之一,但分布式散列表并不是微不足道的。当然,我不想在 40 分钟内写在白板上。不过,从根本上来说,这并不是一个坏主意。老实说,我可能只会大喊 Judy Arrays 就跑。
-
但是,如果它是一个哈希表,它就不是一个排序列表。另外,请注意,“分布式哈希表”实际上是指与您需要的完全不同的数据结构 - 您需要的只是基于磁盘的哈希表。
标签: algorithm