Алгоритм Крочемора — различия между версиями
(Новая страница: «{{Определение |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 |
Будем вычислять все повторяющиеся подстроки длиной , где , (здесь и далее ).