import string
class table:
def __init__(self, m, n):
self.t = [[-1 for y in range(n)] for x in range(m)]
def __getitem__(self, i):
return self.t[i]
def to_s(self):
return string.join(
[string.join(
[`cell` for cell in row], " ") for row in self.t], "\n")
def edit_distance_ij(a, b, i, j, table):
if i == 0:
return (j,"e"*j)
if j == 0:
return (i,"l"*i)
if not table[i-1][j-1] == -1:
return table[i-1][j-1]
if a[i-1] == b[j-1]:
cij = 0
c = ' '
else:
cij = 1
c = 'c'
(d1, a1) = edit_distance_ij(a, b, i-1, j, table)
(d2, a2) = edit_distance_ij(a, b, i, j-1, table)
(d3, a3) = edit_distance_ij(a, b, i-1, j-1, table)
entry = min((d1 + 1, a1 + "d"), (d2 + 1, a2 + "i"), (d3 + cij, a3 + c))
table[i-1][j-1] = entry
return entry
def edit_distance(astring, bstring):
m = len(astring)
n = len(bstring)
return edit_distance_ij(astring, bstring, m, n, table(m, n))
import sys
if len(sys.argv) != 3:
print "Usage: editierdistanz WORT_1 WORT_2"
else:
print edit_distance(sys.argv[1], sys.argv[2])