使用 C++ 删除大型文本文件中的重复行的最有效内存方法是什么?
让我澄清一下,我不是要求代码,只是最好的方法。不保证重复的行是相邻的。我意识到针对最小内存使用进行优化的方法会导致速度变慢,但这是我的限制,因为文件太大。
我会对每一行进行散列,然后返回具有非唯一散列的行并单独比较它们(或以缓冲方式)。这对于重复发生率相对较低的文件来说效果很好。
当您使用哈希时,您可以将使用的内存设置为恒定量(即,您可以有一个只有 256 个槽或更大槽位的小型哈希表。在任何情况下,内存量都可以限制为任何恒定量。 )表中的值是具有该散列的行的偏移量。所以你只需要 line_count*sizeof(int) 加上一个常量来维护哈希表。
更简单(但慢得多)的是扫描整个文件的每一行。但我更喜欢第一个选择。这是最有效的内存选择。您只需要存储 2 个偏移量和 2 个字节即可进行比较。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)