给定范围超过M的N个数的排序列表,M>> N找到或确定给定数字的不存在。如果可能的话,它会持

时间:2010-12-17 21:08:25

标签: algorithm search

  

可能重复:
  Find existence of number in a sorted list in constant time? (Interview question)

首先,我不确定这是否是真正的面试问题。我在一个声称这是Google面试问题的网站上发现了这个问题。话虽如此,这似乎很有趣,这就是我觉得把它放在这里的原因。

几乎所有人都在那里。我们给出了N个数量的排序列表,其范围超过M,其中M> N,N足够大以跨越多个磁盘。

我们需要在O(logN)中找到或确定给定数字的不存在。对于较小的数据集(二进制搜索),这是直截了当的。对于多个磁盘上的数据集,这似乎要困难得多。它还说O(1)解决方案有额外的分数。有任何想法吗?

我找到了问题here

2 个答案:

答案 0 :(得分:0)

我相信“比O(logN)更快”的解决方案是并行搜索每个磁盘。由于数据已经排序,您可以通过查看磁盘的2个端点来了解我们感兴趣的数字是否可能在其上。然后我们二进制搜索这个磁盘的数字,给我们一个O(log(N / D))解决方案,其中D是磁盘数。

鉴于问题目前是如何表达的,没有恒定的时间解决方案。我只能想象作者在发布问题时遗漏了一些细节。

答案 1 :(得分:0)

由于我们知道数字(M)的范围,我们可以执行插值二进制搜索。而不是将搜索范围平分1/2,将其平分为N /(HI - LO)。结果仍然是O(log N)但具有较低的常数。如果我们知道数据中没有重复项,这种技术效果会更好,而且问题似乎暗示可能是这种情况,但它并不是确定的。

例如,请参阅此博客:Faster than Binary Search