如何减少浪费的编辑距离

时间:2018-07-15 19:19:14

标签: python algorithm edit-distance

我对有效地计算编辑距离感兴趣,因此请阅读wikibooks上的6种不同版本。但是,它们似乎都在某种程度上效率低下。取得版本6。

def levenshtein(s, t):
        ''' From Wikipedia article; Iterative with two matrix rows. '''
        if s == t: return 0
        elif len(s) == 0: return len(t)
        elif len(t) == 0: return len(s)
        v0 = [None] * (len(t) + 1)
        v1 = [None] * (len(t) + 1)
        for i in range(len(v0)):
            v0[i] = i
        for i in range(len(s)):
            v1[0] = i + 1
            for j in range(len(t)):
                cost = 0 if s[i] == t[j] else 1
                v1[j + 1] = min(v1[j] + 1, v0[j + 1] + 1, v0[j] + cost)
            for j in range(len(v0)):
                v0[j] = v1[j]

        return v1[len(t)]

此代码存储动态编程矩阵的两行,我认为您只需要存储一行和一个临时变量。它还会在以下位置重复复制行v1

for j in range(len(v0)):
    v0[j] = v1[j]
  

但是,要使不执行任何操作的版本似乎很困难   复制并仅存储一行。谁能看到该怎么做?

最终,我会将代码转换为C或Cython,但我想首先在Python中正确使用逻辑。

0 个答案:

没有答案