问题是找出给定 DNA 序列中出现不止一次的所有长度为 k 的序列。我找到了一种使用滚动散列函数的方法,其中对于每个长度为 k 的序列,计算散列并将其存储在映射中。为了检查当前序列是否是重复的,我们计算它的散列并检查散列映射中是否已经存在散列。如果是,那么我们将这个序列包含在我们的结果中,否则将其添加到哈希映射中。
这里的滚动哈希是指,当通过将窗口滑动一个移动到下一个序列时,我们使用前一个序列的哈希,我们移除前一个序列的第一个字符的贡献并添加新添加的字符的贡献即新序列的最后一个字符。
Input: AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT
and k=10
Answer: {AAAAACCCCC, CCCCCAAAAA}
这个算法看起来很完美,但我无法制作一个完美的哈希函数来避免冲突。如果有人可以解释如何在任何情况下以及在这种情况下最重要的是如何制作完美的哈希,那将是一个很大的帮助。