Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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
C 删除文件上重复的数字_C_File_Duplicate Data - Fatal编程技术网

C 删除文件上重复的数字

C 删除文件上重复的数字,c,file,duplicate-data,C,File,Duplicate Data,我有一个二进制文件,上面有数百万个64位无符号整数。我需要的是删除文件上重复的数字。我的想法是在每个元素上创建一个哈希表,每个元素都有一个数字及其在文件中的位置,这样我可以搜索重复的数字,然后根据其位置删除它们 有什么更好的方法来实现这一点 [编辑] 删除重复的数字并不意味着用0来回复它们,因为它的大小仍然是64位。因此,我认为有两种选择:或者重写整个文件,或者创建一个具有唯一编号的新文件,这意味着没有重复的编号。为什么不读取文件并计算读取的编号。如果是第一次写入新文件,则跳过此数字。为此目的:

我有一个二进制文件,上面有数百万个64位无符号整数。我需要的是删除文件上重复的数字。我的想法是在每个元素上创建一个哈希表,每个元素都有一个数字及其在文件中的位置,这样我可以搜索重复的数字,然后根据其位置删除它们

有什么更好的方法来实现这一点

[编辑]
删除重复的数字并不意味着用0来回复它们,因为它的大小仍然是64位。因此,我认为有两种选择:或者重写整个文件,或者创建一个具有唯一编号的新文件,这意味着没有重复的编号。

为什么不读取文件并计算读取的编号。如果是第一次写入新文件,则跳过此数字。为此目的:

do
    read a number
    look for it in a table
    if found then
        skip
    else
        add to table
        write to new file
    endif
while !eof
您不需要比每个数字更多的信息。您不需要它的位置或散列信息。
您可以使用初始化为0(表示未找到)的malloc realloc int64“数组”,并使用读取的编号访问每个位置。

首先对文件进行排序,然后在写入最终输出时消除重复项

编辑: 最好的办法是。它假设您已经有了一个较小大小的排序算法(使用快速排序或合并排序)和一个合并算法


如果你的文件可以放在ram内存中,你就不需要它了

你的问题不清楚。尝试添加更多详细信息“从文件中删除数字”是什么意思?是否要将它们替换为0?如果你真的想删除它们,那么你需要重新编写整个文件。如果你要移除它们,为什么要保留它们的位置?仅仅第一个数字的位置就够了吗?你必须删除所有重复数字的实例,还是必须保留第一个?@tioPepe,我需要保留第一个。这些数字有64位长,他必须有记忆。。。我想他没有。但是这个想法很好,我的意思是这是一个开始。你建议创建一个18446744073709551615大小的数组?这将占用2048 PB。这是因为我引用了“数组”。有一些解决方案像一个数组池,由数字mod X和数字%X索引。来吧,更多想法!!!在这种情况下,有一个简单的哈希表。即使没有哈希函数,它也具有相同的特性(固定大小、冲突策略等)。排序文件的最佳解决方案是什么?是的,我的文件适合ram内存,因此不需要外部排序。然后使用快速排序。。。无论采用何种算法,都要修改a和b的比较,以便在每次a=b时忽略一个值。