Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Сравнение двух строк

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Полезные ссылки
Предыдущая тема :: Следующая тема  
Автор Сообщение
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Вт Ноя 29, 2011 4:49 pm    Заголовок сообщения: Сравнение двух строк Ответить с цитатой

Давно мучился необходимостью аналога DIFFERENCE в вбскрипте (например, для поиска двойников-корреспондентов). Вот нашел минутку и таки написал. Программа являет собой тривиальную реализацию алгоритма Левенштейна. Если кому надо - пользуйтесь.
Код:
Dim D()
Dim str1
Dim str2
Dim mas1()
Dim mas2()
Dim i, j
Dim d1
Dim d2
Dim d3

str1 = "Иванов Василий Иванович"
str2 = "ИвановВасилийИванович"

ReDim mas1(Len(str1))
For i=1 To Len(str1)
   mas1(i) = Mid(str1, i, 1)
Next

ReDim mas2(Len(str2))
For i=1 To Len(str2)
   mas2(i) = Mid(str2, i, 1)
Next

ReDim d(Len(str1), Len(str2))
For i=1 To Len(str1)
   For j=1 To Len(str2)
      If i=0 And j=0 Then
         D(i,j) = 0
      ElseIf i=0 And j>0 Then
         D(i,j) = j
      ElseIf j=0 And i>0 Then
         D(i,j) = i
      Else
         d1 = D(i,j-1)+1
         d2 = D(i-1,j)+1
         d3 = D(i-1,j-1) + IIF(mas1(i)=mas2(j), 0, 1)
         If d1<d2 And d1<d3 Then
            D(i,j) = d1
         ElseIf d2<=d1 And d2<=d3 Then
            D(i,j) = d2
         ElseIf d3<=d1 And d3<=d2 Then
            D(i,j) = d3
         Else
            MsgBox "oops"
         End If
      End If
   Next
Next
MsgBox D(Len(str1), Len(str2)), , "Количество переходов"
MsgBox 1-D(Len(str1), Len(str2))/Len(str1), , "Степень подобия"

Сам алгоритм можно найти где угодно, например, в википедии: http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Полезные ссылки Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group