Алгоритм Ландау-Вишкина (k несовпадений) — различия между версиями
Margarita (обсуждение | вклад) |
|||
Строка 14: | Строка 14: | ||
==Пример== | ==Пример== | ||
Пусть <tex>x = "tram"</tex>, <tex>y = "thetrippedtrap"</tex>, <tex>k = 2</tex>. | Пусть <tex>x = "tram"</tex>, <tex>y = "thetrippedtrap"</tex>, <tex>k = 2</tex>. | ||
− | [[Файл:algorithm-landau-vishkin-tm. | + | [[Файл:algorithm-landau-vishkin-tm.jpg|450px|thumb|center|'''dfdf''', dfdf.]] |
Версия 23:53, 14 июня 2014
Постановка задачи
Дано число
текст и образец , . Требуется найти все подстроки текста длины , с не более чем несовпадающими символами.Основная идея
При анализе текста используется двумерный массив
, содержащий информацию о несовпадениях текста с образцом. По завершении анализа в его -й строке содержатся позиции в первых несовпадений между строками и . Таким образом, если , то , и это -е несовпадение между и , считая слева направо. Если число несовпадений с подстрокой меньше , то, начиная с , элементы -й строки равны значению по умолчанию . То есть
Заметим, если
, то подстрока отличается от образца не более, чем на символов, и, таким образом, является решением задачи.Пример
Пусть
, , .