python - 后缀树 : locating a substring if a certain number of mistakes are allowed

标签 python algorithm suffix-tree

根据Wikipedia article on suffix trees ,如果允许一定数量的错误,后缀树可用于定位字符串的子串。

给定一个字符串的后缀树,我如何找到它的给定子串的所有实例,允许每个实例最多有一个错误?

(“错误”是指替换了一个字符。)

最佳答案

那将只是一个更复杂的图形搜索(也就是找到穿过地牢的路径,其中一些门坏了,需要踢开,你想腾出脚)。

细节在很大程度上取决于您所说的“错误”是什么意思。所以我认为“错误”是一个字符的替换,这是最简单的情况。

在该算法中,您将从根开始搜索树,比较并推进您的模式,就好像您搜索完全匹配一样。就在边缘上有一个您无法跟随的字符时,您可以保存算法的状态以备后用(状态为 [tree position, pattern position])。即使您可以为一个节点跟踪一个链接,但不能为另一个节点跟踪,这也应该适用 - 您跟踪匹配并保存其他节点。

然后,您返回到保存的位置并模拟替换,这意味着在树中前进一个位置(对于所有不匹配的可能性)和模式中的一个位置。然后,继续正常搜索(您已经排除了出现一个错误的可能性,因此您现在正在搜索完全匹配项)。

每当您到达模式的末尾时,报告匹配成功(即树中当前节点下方的所有叶子)。

关于python - 后缀树 : locating a substring if a certain number of mistakes are allowed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310923/

相关文章:

python - Spark 和 PySpark 之间是否存在功能对等

python - 在 Python 中绘制具有比例 X 轴的图表

c - 算法与设计模式有何不同?

java - 找到数组中的 k 最小整数

string - 查找与查询 : how to use a suffix tree? 匹配的所有名称

python - 生成 float 列表,其中每个数字小于另一个 float 列表的数字

python - 找到具有最大乘积的一组整数的子集

algorithm - 后缀树中的最大和最小节点数

c++ - LCS 的后缀树与后缀数组

python - 日期时间格式混合并分开为两列并更改日期格式