EMZETT.
Войти

Суффиксный массив

Коротко: Суффиксный массив — отсортированный список всех суффиксов текста. С ним любую подстроку можно найти двоичным поиском.

Подробнее: Для текста banana суффиксы — banana, anana, nana, ana, na, a. Хранятся только их начальные позиции в алфавитном порядке: [5, 3, 1, 0, 4, 2].

Подробности

  • Поиск: Шаблон длины m находится двоичным поиском по суффиксам за O(m log n).
  • Построение: Наивно сортировкой за O(n² log n). Хорошие алгоритмы (SA-IS, удвоение префикса) достигают O(n) — O(n log n).
  • В сравнении с суффиксными деревьями: Чуть медленнее, но намного меньше памяти.
  • Дополнение — массив LCP: Хранит длину общего префикса соседних суффиксов и позволяет другие запросы, например самую длинную повторяющуюся подстроку.
  • Применение: Биоинформатика (поиск по геному), преобразование Барроуза — Уилера в bzip2, обнаружение плагиата, полнотекстовые индексы.
  • Сравнение: Для повторных поисков в одном тексте индекс окупается. Разовый поиск выполняют КМП или Бойер — Мур.

См. также: Инвертированный индекс