Суффиксный массив
Версия от 22:00, 26 мая 2015; Mogikan (обсуждение | вклад) (→Поиск строки максимальной длины, ветвящейся влево и вправо 1.0)
| Определение: |
| Cуффиксным массивом (англ. suffix array) строки называется массив целых чисел от до , такой, что суффикс — -й в лексикографическом порядке среди всех непустых суффиксов строки . |
Содержание
Пример
Значит, суффиксный массив для строки равен .
Применения
- Позволяет найти все вхождения образца в строку за время .
- Позволяет вычислить наибольший общий префикс (англ. longest common prefix, LCP) для всех соседних в лексикографическом порядке суффиксов строки за , то есть построить массив , где — длина наибольшего общего префикса суффиксов и .
- Позволяет найти количество различных подстрок в строке за время и дополнительной памяти.
- Позволяет найти наименьший циклический сдвиг строки за время .
- Позволяет найти максимальную по длине строку, ветвящуюся влево и вправо за время , где — время построения суффиксного массива.
Поиск строки максимальной длины, ветвящейся влево и вправо
| Определение: |
| Строка называется ветвящейся вправо в (англ. right branching string), если существуют символы и , такие что : и — подстроки . Аналогично, ветвящаяся влево (англ. left branching), если и — подстроки . |
| Определение: |
| Левый символ для позиции строки — это символ . |
Что бы найти максимальную строку, ветвящуюся влево и вправо, строится суффиксный массив из которого исключается суффикс равный самой строке, к примеру для строки :
| Суффиксный массив |
|---|
Далее вычисляется для суффиксного массива, и находятся левые символы суффиксов:
| Левый символ | Суффиксный массив | LCP |
|---|---|---|
Максимальная строка, ветвящаяся влево и вправо, находится путём проверки значений и левого символа: Ветвление вправо:
- Если от пары суффиксов и больше нуля и не равен длинам этих суффиксов, то строка , равная , ветвится вправо.
Ветвление влево:
- Если левые символы и не равны, то строка , равная , ветвится влево.
Если выполнены оба условия, то строка ветвится вправо и влево. С помощью этой проверки находится максимальная строка, ветвящаяся влево и вправо, за .
См. также
- Построение суффиксного массива с помощью стандартных методов сортировки
- Алгоритм поиска подстроки в строке с помощью суффиксного массива
- Алгоритм Касаи и др.
Источники
- Дэн Гасфилд — Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология — СПб.: Невский Диалект; БХВ-Петербург, 2003. — 654 с: ил.
- MAXimal :: algo :: Суффиксный массив
- Википедия — Суффиксный массив
- Wikipedia — Suffix array
- Habrahabr — Суффиксный массив — удобная замена суффиксного дерева