这是我的问题(我正在用 C 编程):
我有一些包含 DNA 序列的巨大文本文件(每个文件大约有 6500 万行,大小约为 4~5 GB)。在这些文件中有很多重复项(还不知道有多少,但应该有数百万个),我想在输出中返回一个只有不同值的文件。每个字符串都有一个相关的质量值,所以如果我有 5 个具有不同质量值的相等字符串,我将保留最好的一个并丢弃其他 4 个。
尽可能减少内存需求并提高速度效率是至关重要的。我的想法是使用哈希函数创建一个 JudyHS 数组,以便将字符串 DNA 序列(长 76 个字母,有 7 个可能的字符)转换为整数,以减少内存使用量(4 或 8 个字节,而不是 76 个字节数以百万计的条目应该是一个相当大的成就)。这样我就可以使用整数作为索引并只存储该索引的最佳质量值。问题是我找不到一个 UNIVOCALLY 定义这么长的字符串并产生一个可以存储在整数甚至 long long 内的值的哈希函数!
我对哈希函数的第一个想法类似于 Java 中的默认字符串哈希函数:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[ n-1],但我可以获得最大值 8,52*10^59.. 太大了。做同样的事情并将其存储在双重中怎么样?计算会变得慢很多吗?请注意,我想要一种统一定义字符串的方法,避免冲突(或者至少它们应该非常罕见,因为我必须在每次冲突时访问磁盘,这是一个相当昂贵的操作......)