微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何有效地在十亿个字母的长字符串中找到字符串完全匹配的位置

如何解决如何有效地在十亿个字母的长字符串中找到字符串完全匹配的位置

我有数百万个字符串,我想检查另一个数十亿个字符串集合中每个字符串的精确匹配位置。在 Python 中执行此操作的最有效方法是什么?

解决方法

这个问题有多种答案。

  1. 您可以使用散列函数并遍历整个人类基因组,尝试将序列长度的子序列的散列与序列的散列匹配(如果它们匹配您的序列在您的索引中)。 Rabin-Karp algorithm 是 O(n),其中 n 是人类基因组的大小。请特别注意您的序列长度不足以溢出整数。
  2. 您可以使用由 James H. Morris、Vaughan Pratt 和 Donald Knuth 同时发明的强力方法的变体来进行字符串匹配。 Knuth-Morris-Pratt algorithm 开始在每个索引处检查匹配项,每当它失败时,它就会检查表,在该表中开始匹配的下一个索引开始。它也是 O(n),并且具有比 RK 更好的最坏情况复杂度(阅读 this article on wikipedia)。
  3. 您可以使用与之前的算法非常相似的 Boyer-Moore algorithm。它首先计算一些移位,然后尝试在某些索引处匹配,方便地跳过其他索引。它也是 O(n) 并且比 RK 具有更好的最坏情况复杂度(阅读 the same article on wikipedia)。

我建议使用 Rabin-Karp 算法,因为对我来说它似乎更容易掌握(但我可能有偏见:NIH Bias

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。