Алгоритм Крочемора — различия между версиями
(Новая страница: «{{Определение |definition = '''Тандемным повтором''' (tandem repeat) в строке называются два вхождения к...») |
(→Упрощенный алгоритм) |
||
Строка 11: | Строка 11: | ||
== Упрощенный алгоритм == | == Упрощенный алгоритм == | ||
+ | |||
+ | Рассмотрим следующую строку Фиббоначи: | ||
+ | |||
+ | {|style="text-align:center" | ||
+ | || || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 | ||
+ | |- | ||
+ | |<tex>f_6 = </tex> || a || b || a || a || b || a || b || a || a || b || a || a || b | ||
+ | |} | ||
+ | |||
+ | Будем вычислять все повторяющиеся подстроки длиной <tex>l</tex>, где <tex>l = 1 ... n - 1</tex>, (здесь и далее <tex>n = |s|</tex>). | ||
= Псевдокод = | = Псевдокод = |
Версия 02:51, 28 мая 2014
Определение: |
Тандемным повтором (tandem repeat) в строке называются два вхождения какой-либо подстроки подряд. Иными словами, тандемный повтор описывается парой индексов | такими, что подстрока — это две одинаковые строки, записанные подряд.
Алгоритм Крочемора (Crochemore algorithm) позволяет найти все тандемные повторы в исходной строке за .
Содержание
Идея
Разобьем описание алгоритма на две части: сначала покажем упрощенный алгоритм, а затем попытаемся его оптимизировать, в итоге придя к нужному нам результату.
Упрощенный алгоритм
Рассмотрим следующую строку Фиббоначи:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | |
a | b | a | a | b | a | b | a | a | b | a | a | b |
Будем вычислять все повторяющиеся подстроки длиной
, где , (здесь и далее ).