0

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

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

我们希望在O(n)while nis number of lines 中执行此操作(我们可以假设每行中的最大可能元素数是恒定的,例如,我们每行最多有 100 个元素)

我已经阅读了stackoverflow中发布的一些问题,并且我也用谷歌搜索了它,其中大多数是针对数组长度相同或整数为正数或偶数或已排序的情况,有什么办法可以在一般情况下解决这个问题?

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

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

4

1 回答 1

0

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

于 2013-06-27T17:21:17.300 回答