【发布时间】:2013-06-25 07:39:30
【问题描述】:
我有一个包含数百万行的文件(实际上它是一个在线数据流,这意味着我们正在逐行接收它),每一行由一个未排序的整数数组组成(正数和负数)没有每个数字的限制和长度不同,我们可能在一行中有重复的值,
我想删除 duplicate lines (如果 2 行具有相同的值,无论它们如何排序,我们认为它们是重复的),有没有好的散列函数?
我们希望在O(n) 中执行此操作,而n 是行数(我们可以假设每行中元素的最大可能数是恒定的,例如,我们每行最多有 100 个元素)
我已经阅读了 stackoverflow 中发布的一些问题,我也搜索了它,其中大多数是针对数组长度相同或整数为正数或偶数或已排序的情况,是否存在一般情况下有什么办法解决这个问题?
我的解决方案:
首先,我们使用O(n) 排序算法对每一行进行排序,例如Counting sort ,然后我们将它们放入一个字符串中,然后我们使用 md5 散列将它们放入一个哈希集中。如果它不在集合中,我们将其放入该集合中,如果它已经在列表中,我们检查具有相同哈希值的数组。
解决方案的问题:使用Counting Sort 进行排序会占用大量空间,因为数字没有限制并且可能发生冲突。
【问题讨论】: