Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash 散列正/负整数序列_Hash_Hashmap_Hashcode - Fatal编程技术网

Hash 散列正/负整数序列

Hash 散列正/负整数序列,hash,hashmap,hashcode,Hash,Hashmap,Hashcode,我有一个有数百万行的文件(实际上它是一个在线数据流,这意味着我们正在逐行接收它),每行由一个整数数组组成,这些整数没有排序(正数和负数),每个数字没有限制,长度不同,一行中可能有重复的值 我想删除重复行(如果2行具有相同的值,不管它们是如何排序的,我们认为它们是重复的),有什么好的散列函数吗? 我们希望在O(n)中这样做,而n是行数(我们可以假设每行中元素的最大可能数是常数,例如,每行中最多有100个元素) 我已经阅读了stackoverflow上发布的一些问题,我也在谷歌上搜索了一下,大多数问

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

我想删除<代码>重复行<代码>(如果2行具有相同的值,不管它们是如何排序的,我们认为它们是重复的),有什么好的散列函数吗? 我们希望在

O(n)
中这样做,而
n
是行数(我们可以假设每行中元素的最大可能数是常数,例如,每行中最多有100个元素)

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

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


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

对如此大的数据集使用哈希算法的问题是,很可能会有两行不同的行对相同的值进行哈希运算。你们想留在O(n),但我不确定这是可能的,因为数据的大小和所需的准确性。如果使用节省空间的heapsort,然后向下遍历新排序的数据,删除相同的连续行,则可以在O(nlogn)

中完成此操作,您的意思是对每行进行堆排序吗?实际上,数据不是离线的,它是一个
在线数据流
,这意味着您无法对整个文件进行排序