Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Какой алгоритм поиска максимальной общей подстроки выбрать для коротких строк? (http://forum.oszone.net/showthread.php?t=280114)

seriych 31-03-2014 21:40 2331184

Какой алгоритм поиска максимальной общей подстроки выбрать для коротких строк?
 
Я так понял продвинутые алгоритмы дают преимущество на длинных строках, у меня же строки короткие. Я программирую от случая к случаю, поэтому реализация любого алгоритма затянется и могу потратить впустую кучу времени на реализацию неподходящего. Может кто сталкивался и сразу подскажет, какой оптимальнее в моем случае.

Есть массив M из нескольких тысяч строк, каждая длиной в среднем около 10-15 символов (сильно длинных нет, максимум около 30 символов). Берем какую-то другую строку s (длина тоже в среднем 10-15, максимум 30). Нужно найти элемент M[i], в котором достигается максимальная общая подстрока с s. Данную операцию повторить для массива S из ~100000 разных строк s.
Пробовал для каждой M[i] искать максимальную с s подстроку по алгоритму с википедии - оно вроде работает, но слишком долго. Читал про другие алгоритмы- везде вроде пишут, что выгода достигается при длинных строках. У меня же строки короткие, просто задача много раз повторяется, вот и думаю, что напрямую эти алгоритмы нет смысла применять.
Или можно объединить все строки из M в одну, уставив какой-то символ-разделитель между каждой строкой и уже тогда применять другой алгоритм? Имеет ли это смысл, если строки в S всё равно короткие и найти надо для каждой?

Iska 01-04-2014 03:52 2331286

seriych, у Кнута смотрели — что он говорит по этому поводу?

User001 01-04-2014 10:34 2331368

Цитата:

Цитата seriych
Или можно объединить все строки из M в одну, уставив какой-то символ-разделитель между каждой строкой и уже тогда применять другой алгоритм? Имеет ли это смысл, если строки в S всё равно короткие и найти надо для каждой? »

Если string::find, то сложность Unspecified, but generally up to linear in length()-pos times the length of the sequence to match (worst case).

Если у вас много памяти, то можно попробовать разбить все строки из M на подстроки и в map, потом уже по нему искать. Это только идея :)

seriych 01-04-2014 18:38 2331634

Цитата:

Цитата Iska
у Кнута смотрели — что он говорит по этому поводу? »

Нет, не советовался с ним

Iska 01-04-2014 20:27 2331686

Попробуйте. Найдёте полезное — нам расскажете.


Время: 15:43.

Время: 15:43.
© OSzone.net 2001-