algorithm - 在常数时间内找到排序列表中数字的存在? (采访问题)

标签 algorithm

我正在为即将到来的面试学习并且遇到过几次这个问题(逐字记录)

Find or determine non existence of a number in a sorted list of N numbers where the numbers range over M, M >> N and N large enough to span multiple disks. Algorithm to beat O(log n); bonus points for constant time algorithm.

首先,我不确定这是否是一个具有真正解决方案的问题。我和我的同事们已经对这个问题思考了几个星期,但它似乎不合时宜(当然,我们想不出解决方案并不意味着没有解决方案)。我会问面试官的几个问题是:

  • 排序后的列表是否有重复?
  • 盘数和N有什么关系?

我考虑过的一种方法是对每个磁盘的最小值/最大值进行二进制搜索,以确定应该保存该数字的磁盘(如果存在),然后对磁盘本身进行二进制搜索。当然,如果磁盘数量很大并且您还有一个排序的磁盘列表,这只是一个数量级的加速。我认为这会产生某种 O(log log n) 时间。

至于M >> N的提示,也许如果你知道一个圆盘上有多少个数字和范围是多少,你可以在某些时候使用鸽巢原理来排除一些情况,但我不能找出一个数量级的改进。

此外,“恒定时间算法的奖励积分”让我有点怀疑。

关于此问题的任何想法、解决方案或相关历史记录?

最佳答案

由于问题没有说明数字以何种格式存储,您可以告诉面试官您将假设数字以物理方式存储。例如,每个数字都可以写在一张卡片上,而每张卡片都属于一个人。 alt text

N large enough to span multiple disks

现在,如果您想查找或确定某个号码不存在,您只需询问这些人您要查找的号码是否在他们持有的卡上。 alt text

如果 N 秒内没有人回答,则该号码不存在。这是假设每个人都能听到您的声音,并且每个人都知道他们的卡上有多少号码。

我不太了解物理(音速、空气摩擦、每个人的大脑看卡片的时间等)

关于algorithm - 在常数时间内找到排序列表中数字的存在? (采访问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054381/

相关文章:

algorithm - 我可以更有效地找到给定大小的所有多重集吗?

java - 创建所有可能的元素组合

javascript - 二分查找函数是正确的,但返回未定义

algorithm - 计算机如何知道 "Recommended for You"?

python - 将值插入排序数组

python - 快速访问字典中的部分数据

javascript - 该算法会累积 chop 误差吗?

algorithm - 如何计算Elo总评分?

c - 使用指针和两个结构数组进行桶排序

c++ - 如何在 C++ 中实现对函数的二分查找?