我想以一种只需要存储结果集的方式有效地过滤重复项的整数列表。
一种可见的方式:
- 我们有一个整数范围其中大(例如)N 2 40
- 我们有一个函数,据说它有很多碰撞(图像均匀地分布在)S
- 然后,我们需要存储,即{ f (x )| X ∈ 小号}
我对有一个非常准确的(概率性)估计。是,因此可以预先分配数据结构(例如)。| f [ S ] | ≈ 2 30
我有一些想法,但是我不确定什么是最好的方法:
- 由于输入集不适合内存,因此无法使用位集。
- 哈希表,但是(1)它需要一些内存开销,例如 150%(2)建表时必须探索该表,由于内存开销,这需要额外的时间。
- “即时”排序,最好具有复杂度(非比较排序)。关于这一点,我不确定bucket sort和flashsort之间的主要区别是什么。
- 一个带有二进制搜索树的简单数组,但这需要时间。
- 也许使用布隆过滤器或类似的数据结构在缓解问题(假阳性)方面可能很有用。
计算器上的一些问题似乎有了这样的东西来解决(/programming/12240997/sorting-array-in-on-run-time,/programming/3951547/java -array-finding-duplicates),但似乎没有一个符合我的要求。