Data update
This commit is contained in:
parent
0df55f9f24
commit
aec8ed51b6
1045 changed files with 18889 additions and 2777 deletions
|
|
@ -0,0 +1,49 @@
|
|||
global dparr[] dpcols .
|
||||
proc dpnew a b . .
|
||||
len dparr[] a * b
|
||||
dpcols = b
|
||||
.
|
||||
func dp r c .
|
||||
return dparr[r * dpcols + c + 1]
|
||||
.
|
||||
proc dps r c v . .
|
||||
dparr[r * dpcols + c + 1] = v
|
||||
.
|
||||
proc align a$ b$ . ar$ br$ .
|
||||
dpnew (len a$ + 1) (len b$ + 1)
|
||||
for i = 1 to len a$
|
||||
dps i 0 i
|
||||
.
|
||||
for j = 0 to len b$
|
||||
dps 0 j j
|
||||
.
|
||||
for i = 1 to len a$
|
||||
for j = 1 to len b$
|
||||
if substr a$ i 1 = substr b$ j 1
|
||||
dps i j dp (i - 1) (j - 1)
|
||||
else
|
||||
dps i j lower (lower dp (i - 1) j dp i (j - 1)) dp (i - 1) (j - 1) + 1
|
||||
.
|
||||
.
|
||||
.
|
||||
ar$ = "" ; br$ = ""
|
||||
i = len a$ ; j = len b$
|
||||
while i <> 0 and j <> 0
|
||||
if substr a$ i 1 = substr b$ j 1 or dp i j = dp (i - 1) (j - 1) + 1
|
||||
ar$ = substr a$ i 1 & ar$
|
||||
i -= 1
|
||||
br$ = substr b$ j 1 & br$
|
||||
j -= 1
|
||||
elif dp i j = dp (i - 1) j + 1
|
||||
ar$ = substr a$ i 1 & ar$
|
||||
i -= 1
|
||||
br$ = "-" & br$
|
||||
else
|
||||
ar$ = "-" & ar$
|
||||
br$ = substr b$ j 1 & br$
|
||||
j -= 1
|
||||
.
|
||||
.
|
||||
.
|
||||
align "rosettacode" "raisethysword" ar$ br$
|
||||
print ar$ ; print br$
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
#define min(a, b) iif((a) < (b), (a), (b))
|
||||
|
||||
Sub LevenshteinAlignment(s1 As String, s2 As String)
|
||||
Dim As String align1 = "", align2 = ""
|
||||
Dim As Integer i, j, len1, len2
|
||||
len1 = Len(s1):
|
||||
|
||||
len2 = Len(s2)
|
||||
Dim As Integer dp(len1+1, len2+1)
|
||||
|
||||
For i = 0 To len1
|
||||
dp(i, 0) = i
|
||||
Next i
|
||||
For j = 0 To len2
|
||||
dp(0, j) = j
|
||||
Next j
|
||||
|
||||
For i = 1 To len1
|
||||
For j = 1 To len2
|
||||
If Mid(s1, i, 1) = Mid(s2, j, 1) Then
|
||||
dp(i, j) = dp(i-1, j-1)
|
||||
Else
|
||||
dp(i, j) = min(min(dp(i-1, j), dp(i, j-1)), dp(i-1, j-1)) + 1
|
||||
End If
|
||||
Next j
|
||||
Next i
|
||||
|
||||
i = len1: j = len2
|
||||
While i > 0 And j > 0
|
||||
If Mid(s1, i, 1) = Mid(s2, j, 1) Then
|
||||
align1 = Mid(s1, i, 1) + align1
|
||||
align2 = Mid(s2, j, 1) + align2
|
||||
i -= 1: j -= 1
|
||||
Elseif dp(i, j) = dp(i-1, j-1) + 1 Then
|
||||
align1 = Mid(s1, i, 1) + align1
|
||||
align2 = Mid(s2, j, 1) + align2
|
||||
i -= 1: j -= 1
|
||||
Elseif dp(i, j) = dp(i-1, j) + 1 Then
|
||||
align1 = Mid(s1, i, 1) + align1
|
||||
align2 = "-" + align2
|
||||
i -= 1
|
||||
Else
|
||||
align1 = "-" + align1
|
||||
align2 = Mid(s2, j, 1) + align2
|
||||
j -= 1
|
||||
End If
|
||||
Wend
|
||||
|
||||
While i > 0
|
||||
align1 = Mid(s1, i, 1) + align1
|
||||
align2 = "-" + align2
|
||||
i -= 1
|
||||
Wend
|
||||
While j > 0
|
||||
align1 = "-" + align1
|
||||
align2 = Mid(s2, j, 1) + align2
|
||||
j -= 1
|
||||
Wend
|
||||
|
||||
Print "Levenshtein Distance: "; dp(len1, len2)
|
||||
Print align1
|
||||
Print align2
|
||||
Print
|
||||
End Sub
|
||||
|
||||
LevenshteinAlignment("rosettacode", "raisethysword")
|
||||
LevenshteinAlignment("place", "palace")
|
||||
|
||||
Sleep
|
||||
Loading…
Add table
Add a link
Reference in a new issue