Another update from ingydotnet^djgoku
This commit is contained in:
parent
91df62d461
commit
948b86eafa
7604 changed files with 108452 additions and 22726 deletions
|
|
@ -1,4 +1,4 @@
|
|||
def levenshteinDistance(s1,s2):
|
||||
def minimumEditDistance(s1,s2):
|
||||
if len(s1) > len(s2):
|
||||
s1,s2 = s2,s1
|
||||
distances = range(len(s1) + 1)
|
||||
|
|
@ -14,5 +14,5 @@ def levenshteinDistance(s1,s2):
|
|||
distances = newDistances
|
||||
return distances[-1]
|
||||
|
||||
print(levenshteinDistance("kitten","sitting"))
|
||||
print(levenshteinDistance("rosettacode","raisethysword"))
|
||||
print(minimumEditDistance("kitten","sitting"))
|
||||
print(minimumEditDistance("rosettacode","raisethysword"))
|
||||
|
|
|
|||
|
|
@ -1,13 +1,23 @@
|
|||
>>> from functools import lru_cache
|
||||
>>> @lru_cache(maxsize=4095)
|
||||
def ld(s, t):
|
||||
if not s: return len(t)
|
||||
if not t: return len(s)
|
||||
if s[0] == t[0]: return ld(s[1:], t[1:])
|
||||
l1 = ld(s, t[1:])
|
||||
l2 = ld(s[1:], t)
|
||||
l3 = ld(s[1:], t[1:])
|
||||
return 1 + min(l1, l2, l3)
|
||||
def levenshteinDistance(str1, str2):
|
||||
m = len(str1)
|
||||
n = len(str2)
|
||||
lensum = float(m + n)
|
||||
d = []
|
||||
for i in range(m+1):
|
||||
d.append([i])
|
||||
del d[0][0]
|
||||
for j in range(n+1):
|
||||
d[0].append(j)
|
||||
for j in range(1,n+1):
|
||||
for i in range(1,m+1):
|
||||
if str1[i-1] == str2[j-1]:
|
||||
d[i].insert(j,d[i-1][j-1])
|
||||
else:
|
||||
minimum = min(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+2)
|
||||
d[i].insert(j, minimum)
|
||||
ldist = d[-1][-1]
|
||||
ratio = (lensum - ldist)/lensum
|
||||
return {'distance':ldist, 'ratio':ratio}
|
||||
|
||||
>>> print( ld("kitten","sitting"),ld("rosettacode","raisethysword") )
|
||||
3 8
|
||||
print(levenshteinDistance("kitten","sitting"))
|
||||
print(levenshteinDistance("rosettacode","raisethysword"))
|
||||
|
|
|
|||
13
Task/Levenshtein-distance/Python/levenshtein-distance-3.py
Normal file
13
Task/Levenshtein-distance/Python/levenshtein-distance-3.py
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
>>> from functools import lru_cache
|
||||
>>> @lru_cache(maxsize=4095)
|
||||
def ld(s, t):
|
||||
if not s: return len(t)
|
||||
if not t: return len(s)
|
||||
if s[0] == t[0]: return ld(s[1:], t[1:])
|
||||
l1 = ld(s, t[1:])
|
||||
l2 = ld(s[1:], t)
|
||||
l3 = ld(s[1:], t[1:])
|
||||
return 1 + min(l1, l2, l3)
|
||||
|
||||
>>> print( ld("kitten","sitting"),ld("rosettacode","raisethysword") )
|
||||
3 8
|
||||
Loading…
Add table
Add a link
Reference in a new issue