适用于大范围输入数据的最佳搜索技术

时间:2011-04-22 16:26:21

标签: data-structures language-agnostic

有1亿到1亿的数字,但有一个数字缺失。它们都是随机可用的,你怎么能以最好的方式找到丢失的那个。

  • 随机可用的方法是随机分布在整个阵列中(即5984,1,10937658,20 ......)

2 个答案:

答案 0 :(得分:1)

这些只是理论上的考虑因素,但是如果数字按1,2,3...1B排序,那么您可以将您的数字组拆分为部分1 ... 0.5B0.5B ... 1B,然后检查首先是多少元素group:如果少于0.5B个元素,则意味着缺失值介于10.5B之间,如果有0.5B个元素,则表示缺少值介于{{1}之间}和0.5B。继续这个过程,直到找到缺失的值。

我不知道这是否是一种非常快捷的方法,但肯定比检查每个值更快:D

也许它会把你带到路上

答案 1 :(得分:1)

如果考虑有限的记忆, 从最初开始对每个数字进行异或。然后XOR用1到1B。剩下的数字是缺少的数字。

这样的事情:

Input-1 XOR Input-2 XOR Input-3 XOR Input-last XOR ... XOR 1 XOR 2 XOR...XOR 1B

如果您有足够的内存,请对所有数字进行排序并按顺序搜索。

第一个是O(N),第二个是O(NlogN)

较小的例子:

1 xor 3 xor 1 xor 2 xor 3 => 2