Суффиксный массив — различия между версиями
Shersh (обсуждение | вклад) м (→Применения) |
Mogikan (обсуждение | вклад) (→Добавлено новое применение) |
||
Строка 15: | Строка 15: | ||
* Позволяет найти количество различных подстрок в строке за время <tex>O(|s| \log(|s|))</tex> и <tex>O(|s|)</tex> дополнительной памяти. | * Позволяет найти количество различных подстрок в строке за время <tex>O(|s| \log(|s|))</tex> и <tex>O(|s|)</tex> дополнительной памяти. | ||
* Позволяет найти наименьший циклический сдвиг строки за время <tex>O(|s| \log(|s|))</tex>. | * Позволяет найти наименьший циклический сдвиг строки за время <tex>O(|s| \log(|s|))</tex>. | ||
+ | * Позволяет найти максимальную по длине строку, ветвящуюся влево и вправо за время <tex>SA + O(n)</tex>, где <tex>SA</tex> {{---}} время построения суффиксного массива. | ||
+ | |||
+ | ===Поиск строки максимальной длины, ветвящейся влево и вправо=== | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | '''Строка <tex>s</tex> называется ветвящейся вправо в <tex>t</tex>''' (англ. ''right branching string''), если существуют символы <tex>c</tex> и <tex>d</tex>, такие что <tex>c</tex> <tex>\ne</tex> <tex>d</tex> : <tex>sc</tex> и <tex>sd</tex> {{---}} подстроки <tex>t</tex>. Аналогично, '''ветвящаяся влево''' (англ. ''left branching''), если <tex>cs</tex> и <tex>ds</tex> {{---}} подстроки <tex>t</tex>. | ||
+ | }} | ||
==См. также== | ==См. также== |
Версия 20:28, 26 мая 2015
Определение: |
Cуффиксным массивом (англ. suffix array) строки | называется массив целых чисел от до , такой, что суффикс — -й в лексикографическом порядке среди всех непустых суффиксов строки .
Содержание
Пример
Значит, суффиксный массив для строки
равен .Применения
- Позволяет найти все вхождения образца в строку за время .
- Позволяет вычислить наибольший общий префикс (англ. longest common prefix, LCP) для всех соседних в лексикографическом порядке суффиксов строки за , то есть построить массив , где — длина наибольшего общего префикса суффиксов и .
- Позволяет найти количество различных подстрок в строке за время и дополнительной памяти.
- Позволяет найти наименьший циклический сдвиг строки за время .
- Позволяет найти максимальную по длине строку, ветвящуюся влево и вправо за время , где — время построения суффиксного массива.
Поиск строки максимальной длины, ветвящейся влево и вправо
Определение: |
Строка | называется ветвящейся вправо в (англ. right branching string), если существуют символы и , такие что : и — подстроки . Аналогично, ветвящаяся влево (англ. left branching), если и — подстроки .
См. также
- Построение суффиксного массива с помощью стандартных методов сортировки
- Алгоритм поиска подстроки в строке с помощью суффиксного массива
- Алгоритм Касаи и др.
Источники
- Дэн Гасфилд — Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология — СПб.: Невский Диалект; БХВ-Петербург, 2003. — 654 с: ил.
- MAXimal :: algo :: Суффиксный массив
- Википедия — Суффиксный массив
- Wikipedia — Suffix array
- Habrahabr — Суффиксный массив — удобная замена суффиксного дерева