add dynammic programming solution to edit distance
parent
d3c2184af8
commit
b84dd0a187
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
def edit_distance(w1, w2):
|
||||||
|
"""
|
||||||
|
Find edit distance (minimum number of changes) required to convert string w1 to string w2.
|
||||||
|
"""
|
||||||
|
|
||||||
|
m = [[0 if x != 0 else y if y != 0 else x for x in range(len(w2) + 1)] for y in range(len(w1) + 1)]
|
||||||
|
|
||||||
|
for i in range(1,len(w1) + 1):
|
||||||
|
m[i][0] = i
|
||||||
|
for j in range(1, len(w2) + 1):
|
||||||
|
m[0][j] = j
|
||||||
|
|
||||||
|
for i in range(1, len(w1) + 1):
|
||||||
|
for j in range(1, len(w2) + 1):
|
||||||
|
m[i][j] = min(
|
||||||
|
m[i-1][j-1] + int(w1[i-1] != w2[j-1]),
|
||||||
|
m[i-1][j] + 1,
|
||||||
|
m[i][j-1] + 1
|
||||||
|
)
|
||||||
|
|
||||||
|
return m
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(edit_distance("sitting", "kitten"))
|
||||||
|
|
Loading…
Reference in New Issue