Мы настоятельно рекомендуем прочитать следующий пост на деревьях суффиксов в качестве предварительного условия для этого поста.
Поиск по шаблону | Набор 8 (Введение в Суффикс-дерево)
Суффиксный массив — это отсортированный массив всех суффиксов данной строки . Определение похоже на Suffix Tree, которое является сжатым набором всех суффиксов данного текста . Любой алгоритм, основанный на дереве суффиксов, может быть заменен алгоритмом, который использует массив суффиксов, дополненный дополнительной информацией и решающий ту же проблему в той же сложности времени (Source Wiki ).
Суффиксный массив может быть создан из дерева суффиксов путем выполнения обхода DFS дерева суффиксов. Фактически массив суффиксов и дерево суффиксов могут быть построены друг от друга за линейное время.
Преимущества массивов суффиксов перед деревьями суффиксов включают улучшенные требования к пространству, более простые алгоритмы построения линейного времени (например, по сравнению с алгоритмом Укконена) и улучшенную локальность кэша (Источник: Wiki )
Пример:
Let the given string be "banana". 0 banana 5 a 1 anana Sort the Suffixes 3 ana 2 nana ----------------> 1 anana 3 ana alphabetically 0 banana 4 na 4 na 5 a 2 nana So the suffix array for "banana" is {5, 3, 1, 0, 4, 2}
Наивный метод построения суффиксного массива
Простой метод построения массива суффиксов состоит в том, чтобы создать массив всех суффиксов и затем отсортировать массив. Ниже приведена реализация простого метода.
|
Выход:
Following is suffix array for banana 5 3 1 0 4 2
Временная сложность описанного выше метода для построения суффиксного массива составляет O (n 2 Logn), если мы рассмотрим алгоритм O (nLogn), используемый для сортировки. Сам этап сортировки занимает время O (n 2 Logn), поскольку каждое сравнение представляет собой сравнение двух строк, а сравнение занимает время O (n).
Существует множество эффективных алгоритмов для построения суффиксного массива. Вскоре мы будем освещать их как отдельные посты.
Поиск шаблона с использованием встроенного суффиксного массива
Чтобы найти шаблон в тексте, мы предварительно обрабатываем текст и строим массив суффиксов текста. Поскольку у нас есть отсортированный массив всех суффиксов, для поиска можно использовать бинарный поиск. Ниже приводится функция поиска. Обратите внимание, что функция не сообщает обо всех вхождениях шаблона, она сообщает только об одном из них.
|
Выход:
Pattern found at index 2
Временная сложность вышеуказанной функции поиска составляет O (mLogn). Существуют более эффективные алгоритмы поиска по шаблону после построения массива суффиксов. Фактически для поиска в паттерне существует алгоритм на основе массива суффиксов O (m). Скоро мы обсудим эффективный алгоритм поиска.
Приложения Suffix Array
Суффиксный массив — чрезвычайно полезная структура данных, он может использоваться для решения широкого круга задач. Ниже приведены некоторые известные проблемы, где можно использовать массив Suffix.
1) Поиск по шаблону
2) Нахождение самой длинной повторяющейся подстроки
3) Нахождение самой длинной общей подстроки
4) Нахождение самого длинного палиндрома в строке
Посмотрите это для большего количества проблем, где могут использоваться массивы Суффикса.
Этот пост является простым введением. В суффиксных массивах есть, что покрывать. Мы обсудили алгоритм O (nLogn) для построения суффиксного массива здесь . Мы скоро будем обсуждать более эффективные алгоритмы суффиксного массива.
Ссылки:
http://www.stanford.edu/class/cs97si/suffix-array.pdf
http://en.wikipedia.org/wiki/Suffix_array
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Suffix Tree Application 4 — построение линейного суффиксного массива времени
- Алгоритм Касая для построения массива LCP из суффиксного массива
- Суффикс Массив | Набор 2 (алгоритм nLogn)
- Подсчет k-мер по суффиксному массиву
- Подсчет отдельных подстрок строки с использованием Suffix Array
- Самый длинный префикс, который также является суффиксом
- Обобщенное дерево суффиксов 1
- Поиск по шаблону с использованием дерева суффиксов
- Построение суффикс-дерева Укконена — часть 1
- Запросы на количество различных целых чисел в суффиксе
- Построение Суффикса Укконена — Часть 2
- Построение суффикс-дерева Укконена — часть 4
- Построение Суффикса Укконена — Часть 3
- Построение Суффикса Укконена — Часть 5
- Построение Суффикса Укконена — Часть 6
0.00 (0%) 0 votes