【发布时间】:2015-05-09 12:48:11
【问题描述】:
对于一个正常大小的数组,我们可以通过排序或者使用hashset等方法来判断它是否包含重复。 但是如果我们有一个非常大的数组,比如说长度是 100 亿,我们如何确定它是否包含重复?
跟进:如果我们知道这个大数组中肯定存在一个重复,我们如何确定它是哪一个?
我的想法是使用排序,但如果有更好的方法来处理这些情况,我不会这样做。
【问题讨论】:
-
除非您对数组中保存的数据有更多了解,否则您无法比比较排序中的
O(n log n)做得更好。如果你有办法确定物品是否有序,则只能使用比较排序,否则你需要将每个物品与其他物品进行比较,即O(n^2)。 -
请指定是 10^13(比 2015 主存大)还是 10^10(大)。答案正确所需的置信水平是多少? -> Bloom filter(另一方面,如果我们谈论的是 33 位值……)
-
您比较的是什么类型的数据,例如字符串、数字?每个基准有多大?
标签: arrays algorithm sorting duplicates