我知道标题有点混乱,所以让我详细解释一下:
我有两个字符串,T和P. T表示要搜索的文本,P表示要搜索的模式。我想找到T的所有子串,这些子串在P的给定编辑距离内。
示例:
T = "cdddx"
P = "mdddt"
说我想要编辑距离2内的所有子串,答案是:
cdddx //rewrite c and x
dddx // insert m, rewrite x
cddd //insert t, rewrite c
ddd // insert m and t
不知道是不是全部,但你明白了。
我知道可以使用Wagner-Fischer算法来解决这个问题 - 我检查Wagner-Fischer矩阵的最后一行的数字,看看它们是否满足这个条件并找到那样的子串,然后运行再次为T'算法,其中T'是T,其中第一个字母已被删除,依此类推。问题是这个时间复杂度达到惊人的O(T ^ 3 * P)。我正在寻找接近Wagner-Fisher算法的原始时间复杂度的解,即O(T * P)。
有没有办法在这样的时间或者比我现在更好的东西完成这项工作?请注意,我不一定在寻找Wagner-Fischer解决方案,但一切都很好。谢谢!