Реализации алгоритмов/Расстояние Левенштейна: различия между версиями
Содержимое удалено Содержимое добавлено
Строка 5:
<source lang="vb">
Dim i As Long, j As Long, bs1() As Byte, bs2() As Byte
▲Public Function LevenshteinDistance(s1 As String, s2 As String) As Long
Dim min1 As Long, min2 As Long, min3 As Long
string1_length = Len(string1)
string2_length = Len(string2)
ReDim distance(string1_length, string2_length)
bs1 = string1
bs2 = string2
For i
▲ Dim i As Long
For j =
'slow way: If Mid$(string1, i, 1) = Mid$(string2, j, 1) Then
▲ Next
If bs1((i - 1) * 2) = bs2((j - 1) * 2) Then ' *2 because Unicode every 2nd byte is 0
'distance(i, j) = Application.WorksheetFunction.Min _
(distance(i - 1, j) + 1, _
distance(i, j - 1) + 1, _
distance(i - 1, j - 1) + 1)
' spell it out, 50 times faster than worksheetfunction.min
min1 = distance(i - 1, j) + 1
min2 = distance(i, j - 1) + 1
min3 = distance(i - 1, j - 1) + 1
If min1 <= min2 And min1 <= min3 Then
distance(i, j) = min1
ElseIf min2 <= min1 And min2 <= min3 Then
distance(i, j) = min2
Else
distance(i, j) = min3
End If
▲ m(i, j) = Min(m(i - 1, j) + 1, m(i, j - 1) + 1, m(i - 1, j - 1) + diff)
▲ Next
▲ Next
levenshtein = distance(string1_length, string2_length)
End Function
' Пример использования
MsgBox
</source>
|