Jha*_*nia -1 algorithm math hash substring string-hashing
问题是找出给定DNA序列中出现不止一次的所有长度为k的序列.我找到了一种使用滚动散列函数的方法,其中对于每个长度为k的序列,计算散列并将其存储在映射中.要检查当前序列是否是重复,我们计算它的散列并检查哈希映射中是否已存在散列.如果是,那么我们在结果中包含此序列,否则将其添加到哈希映射中.
滚动哈希在这里表示,由一个滑动窗口移动到下一个序列的时候,我们使用之前序列的散列,我们删除以前的序列的第一个字符的贡献,并添加新添加的焦炭的贡献方式即新序列的最后一个字符.
Input: AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT
and k=10
Answer: {AAAAACCCCC, CCCCCAAAAA}
Run Code Online (Sandbox Code Playgroud)
这个算法看起来很完美,但我不能去做一个完美的哈希函数,以避免碰撞.如果有人能够在任何情况下解释如何制作完美的哈希值,那将是一个很大的帮助,最重要的是在这种情况下.
这实际上是一个研究问题.
让我们来看一些事实输入= N,输入长度= | N |
k
,这里k=10
是滑动窗口.因此,您必须与之共存O(|N|)
或更多.鉴于这些事实,"滚动的哈希"将很快失败.你不能设计一个甚至可以用于染色体1/10的滚动哈希.
那你有什么替代品?
10
该字符串还包含至少2个子节点,其中一个子节点为叶子.