【发布时间】:2021-08-04 07:01:07
【问题描述】:
为了计算 Levenshtein 距离,我们总是选择使用动态规划。为此,我们将创建一个编辑距离矩阵,如下所示:
代码如下:
while True:
try:
a = input()
b = input()
board = [[0 for j in range(len(b)+1)] for i in range(len(a)+1)]
for i in range(len(a)+1):
board[i][0] = i
for j in range(len(b)+1):
board[0][j] = j
for i in range(1, len(a)+1):
for j in range(1, len(b)+1):
if a[i-1] == b[j-1]:
d = 0
else:
d = 1
board[i][j] = min(board[i-1][j]+1,
board[i][j-1]+1,
board[i-1][j-1]+d)
print(board[-1][-1])
except:
break
所以我的问题是,当我们构造矩阵时,为什么我们需要在 len(a) 和 len(b) 上加 1。因为如前图所示,只有红色部分是矩阵中的有效部分。所以我修改了我的代码:
while True:
try:
a = input()
b = input()
board = [[0 for j in range(len(b))] for i in range(len(a))]
for i in range(len(a)):
board[i][0] = i
for j in range(len(b)):
board[0][j] = j
for i in range(1, len(a)):
for j in range(1, len(b)):
if a[i] == b[j]:
d = 0
else:
d = 1
board[i][j] = min(board[i-1][j]+1,
board[i][j-1]+1,
board[i-1][j-1]+d)
print(board[-1][-1])
except:
break
我测试了这个修改后的代码,它在大多数测试中仍然给出了正确的答案。但是当两个字符串都很长时,结果会少1。我对此感到非常困惑。也许这个问题很愚蠢,但我还是希望得到回答,谢谢。 ????
【问题讨论】:
标签: python algorithm dynamic levenshtein-distance