哈希一个正/负整数序列

时间:2013-06-27 17:13:20

标签: hash hashmap hashcode

我有一个包含数百万行的文件(实际上它是一个在线数据流,这意味着我们逐行接收它),每行包含一个未排序的整数数组(正数和负数)没有每个数字的限制和长度是不同的,我们可能在一行中有重复的值,

我想删除duplicate lines(如果2行具有相同的值,无论它们如何排序我们认为它们是重复的),是否有任何良好的散列函数?

我们希望在O(n)中执行此操作,而n是行数(我们可以假设每行中元素的最大可能数量是常量,例如,每行最多包含100个元素线)

我已经阅读了stackoverflow中发布的一些问题,我也搜索了它,其中大多数是针对数组长度相同或整数是正数或偶数或者它们已排序的情况,是吗?在一般情况下解决这个问题的方法是什么?

我的解决方案: 首先,我们使用O(n)排序算法对每一行进行排序,例如Counting sort,然后我们将它们放入一个字符串中,然后我们使用md5哈希将它们放入一个哈希集中。如果它不在集合中,我们将它放入该集合中,如果它已经在列表中,我们检查具有相同散列值的数组。

解决方案的问题:使用Counting Sort进行排序会占用大量空间,因为数字没有限制,并且可能发生冲突。

1 个答案:

答案 0 :(得分:0)

对这么大的数据集使用散列算法的问题是,您有两个不同行散列到相同值的概率很高。你想留在O(n),但我不确定是否可能,数据的大小和所需的准确性。如果你使用heapsort,这是节省空间的,然后遍历新的排序数据,删除相同的连续行,你可以在O(nlogn)中完成这个