найти нечеткие совпадения строки в массиве строк
От: deng  
Дата: 16.06.11 07:46
Оценка:
Доброго дня!

Возникла задача ускорить поиск совпадений сложной строки в массиве строк.

Простой пример поиска совпадений:

строка для поиска : dates
массив строк: date3 , gates, thimatis

результат поиска :

DATEs
DATE3 : найдено совпадение 4-рех символов

dATES
gATES : найдено совпадение 4-рех символов

dATeS
thimATiS : найдено совпадение 3-х символов

Дополнительная проблема в том что строка для поиска составная, т.е. в одной позиции буквы может быть больше одного символа,
нужно найти максимально длинное общее совпадение, например:

строка для поиска : (d,g)(a)(t)(e,i)(s)
массив строк: date3 , gates, thimatis

результат поиска :

DATEs
DATE3 : найдено совпадение 4-рех символов

GATES
GATES : найдено совпадение 5-ти символов

dATIS
thimATIS : найдено совпадение 4-рех символов

На текущий момент найдено решение, которое позволяет найти совпадения примерно за O(nm) времени , это не устраивает, т.к. в реальном применении база эталонных строк будет в районе 4 млн. записей, каждая запись ~50 символов, количество сложных строк для поиска 4-6 тыс на запрос (длинна 150 символов),
плюс дополнительная обработка каждого результата поиска тестовой строки, итого оценка требуемых операций несколько десятков террафлопс...

Нужно найти линейный алгоритм поика, может кто-нибудь знает, в каком направлении копать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.