Суффиксный автомат: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м →‎Применения: стилевые правки
Нет описания правки
Строка 1: Строка 1:
[[Файл:Suffix structures diamond (rus).svg|мини|250x250px|Схема преобразования одних суффиксных структур в другие<ref name=":0" />]]

'''Суффиксный автомат''' ([[Английский язык|англ.]] ''suffix automaton'', ''directed acyclic word graph'', ''DAWG'') — детерминированный [[конечный автомат]], принимающий все суффиксы данной строки <math>S</math> и только их, и обладающий наименьшим возможным числом состояний среди всех таких автоматов. Автомат был впервые описан Блумером и др. в 1983 г.<ref>{{Статья|автор=A. Blumer, J. Blumer, A. Ehrenfeucht, D. Haussler, R. McConnell|год=1984|isbn=9783540133452, 9783540388869|страницы=109–118|заглавие=Building the minimal DFA for the set of all subwords of a word on-line in linear time|ссылка=http://dx.doi.org/10.1007/3-540-13345-3_9|место=Berlin, Heidelberg|издательство=Springer Berlin Heidelberg|издание=Automata, Languages and Programming}}</ref>, в той же работе впервые было показано, что размер суффиксного автомата линеен по длине строки, а также был предложен {{Не переведено 5|Онлайн-алгоритм|онлайн-алгоритм||Online algorithm}} для построения автомата с линейным [[Вычислительная сложность|временем работы]].
'''Суффиксный автомат''' ([[Английский язык|англ.]] ''suffix automaton'', ''directed acyclic word graph'', ''DAWG'') — детерминированный [[конечный автомат]], принимающий все суффиксы данной строки <math>S</math> и только их, и обладающий наименьшим возможным числом состояний среди всех таких автоматов. Автомат был впервые описан Блумером и др. в 1983 г.<ref>{{Статья|автор=A. Blumer, J. Blumer, A. Ehrenfeucht, D. Haussler, R. McConnell|год=1984|isbn=9783540133452, 9783540388869|страницы=109–118|заглавие=Building the minimal DFA for the set of all subwords of a word on-line in linear time|ссылка=http://dx.doi.org/10.1007/3-540-13345-3_9|место=Berlin, Heidelberg|издательство=Springer Berlin Heidelberg|издание=Automata, Languages and Programming}}</ref>, в той же работе впервые было показано, что размер суффиксного автомата линеен по длине строки, а также был предложен {{Не переведено 5|Онлайн-алгоритм|онлайн-алгоритм||Online algorithm}} для построения автомата с линейным [[Вычислительная сложность|временем работы]].


В 1985 г. Чен и Сейферас показали, что алгоритм Вайнера<ref>{{Статья|автор=P. Weiner|год=1973-10|doi=10.1109/SWAT.1973.13|страницы=1–11|заглавие=Linear pattern matching algorithms|ссылка=https://ieeexplore.ieee.org/abstract/document/4569722|издание=14th Annual Symposium on Switching and Automata Theory (swat 1973)}}</ref>, предложенный в 1973 г. для построения [[Суффиксное дерево|суффиксного дерева]] строки <math>S</math>, также строит суффиксный автомат для развёрнутой строки <math>S</math> в качестве вспомогательной структуры<ref>{{Статья|автор=M. T. Chen, Joel Seiferas|ответственный=Alberto Apostolico, Zvi Galil|год=1985|doi=10.1007/978-3-642-82456-2_7|isbn=9783642824562|язык=en|страницы=97–107|заглавие=Efficient and Elegant Subword-Tree Construction|ссылка=https://link.springer.com/chapter/10.1007/978-3-642-82456-2_7|издательство=Springer Berlin Heidelberg|издание=Combinatorial Algorithms on Words}}</ref>. В 1987 г. Блумер и др. по аналогии с суффиксным деревом описали сжатый суффикный автомат (англ. ''compact directed acyclic word graph'', ''CDAWG'')<ref>{{Статья|автор=A. Blumer, J. Blumer, D. Haussler, R. McConnell, A. Ehrenfeucht|год=1987-07-01|doi=10.1145/28869.28873|issn=0004-5411|выпуск=3|страницы=578–595|издание=Journal of the ACM|заглавие=Complete inverted files for efficient text retrieval and analysis|ссылка=http://dx.doi.org/10.1145/28869.28873|том=34}}</ref>, получаемый из суффиксного автомата удалением состояний с [[Полустепень исхода|полустепенью исхода]], равной единице, а в 1997 г. Крошемор и Верин разработали линейный алгоритм для его непосредственного построения<ref>{{Статья|автор=Maxime Crochemore, Renaud Vérin|ответственный=Jan Mycielski, Grzegorz Rozenberg, Arto Salomaa|год=1997|doi=10.1007/3-540-63246-8_12|isbn=9783540692423|язык=en|страницы=192–211|заглавие=On compact directed acyclic word graphs|ссылка=https://doi.org/10.1007/3-540-63246-8_12|место=Berlin, Heidelberg|издательство=Springer Berlin Heidelberg|издание=Structures in Logic and Computer Science: A Selection of Essays in Honor of A. Ehrenfeucht}}</ref>. В 2001 г. Иненага и др. разработали линейный онлайн-алгоритм для построения сжатого суффиксного автомата<ref>{{Статья|автор=Shunsuke Inenaga, Hiromasa Hoshino, Ayumi Shinohara, Masayuki Takeda, Setsuo Arikawa|год=2005-03-01|doi=10.1016/j.dam.2004.04.012|issn=0166-218X|выпуск=2|страницы=156–179|издание=Discrete Applied Mathematics|заглавие=On-line construction of compact directed acyclic word graphs|ссылка=http://www.sciencedirect.com/science/article/pii/S0166218X04003464|том=146}}</ref>, а также линейный алгоритм для построения сжатого суффиксного автомата для набора строк, заданного [[Префиксное дерево|бором]]<ref>{{Статья|автор=S. Inenaga, H. Hoshino, A. Shinohara, M. Takeda, S. Arikawa|заглавие=Construction of the CDAWG for a trie|ссылка=https://pdfs.semanticscholar.org/f481/2c5732c800ca6fbbb6ad294b5af3c5c29a04.pdf|язык=|издание=Proceedings of the Prague Stringology Conference ’01 (PSC’01), Czech Technical University|тип=|год=2001|месяц=|число=|том=|номер=|страницы=37-48|issn=}}</ref>.
В 1985 г. Чен и Сейферас показали, что алгоритм Вайнера<ref>{{Статья|автор=P. Weiner|год=1973-10|doi=10.1109/SWAT.1973.13|страницы=1–11|заглавие=Linear pattern matching algorithms|ссылка=https://ieeexplore.ieee.org/abstract/document/4569722|издание=14th Annual Symposium on Switching and Automata Theory (swat 1973)}}</ref>, предложенный в 1973 г. для построения [[Суффиксное дерево|суффиксного дерева]] строки <math>S</math>, также строит суффиксный автомат для развёрнутой строки <math>S</math> в качестве вспомогательной структуры<ref>{{Статья|автор=M. T. Chen, Joel Seiferas|ответственный=Alberto Apostolico, Zvi Galil|год=1985|doi=10.1007/978-3-642-82456-2_7|isbn=9783642824562|язык=en|страницы=97–107|заглавие=Efficient and Elegant Subword-Tree Construction|ссылка=https://link.springer.com/chapter/10.1007/978-3-642-82456-2_7|издательство=Springer Berlin Heidelberg|издание=Combinatorial Algorithms on Words}}</ref>. В 1987 г. Блумер и др. по аналогии с суффиксным деревом описали сжатый суффикный автомат (англ. ''compact directed acyclic word graph'', ''CDAWG'')<ref>{{Статья|автор=A. Blumer, J. Blumer, D. Haussler, R. McConnell, A. Ehrenfeucht|год=1987-07-01|doi=10.1145/28869.28873|issn=0004-5411|выпуск=3|страницы=578–595|издание=Journal of the ACM|заглавие=Complete inverted files for efficient text retrieval and analysis|ссылка=http://dx.doi.org/10.1145/28869.28873|том=34}}</ref>, получаемый из суффиксного автомата удалением состояний с [[Полустепень исхода|полустепенью исхода]], равной единице, а в 1997 г. Крошемор и Верин разработали линейный алгоритм для его непосредственного построения<ref>{{Статья|автор=Maxime Crochemore, Renaud Vérin|ответственный=Jan Mycielski, Grzegorz Rozenberg, Arto Salomaa|год=1997|doi=10.1007/3-540-63246-8_12|isbn=9783540692423|язык=en|страницы=192–211|заглавие=On compact directed acyclic word graphs|ссылка=https://doi.org/10.1007/3-540-63246-8_12|место=Berlin, Heidelberg|издательство=Springer Berlin Heidelberg|издание=Structures in Logic and Computer Science: A Selection of Essays in Honor of A. Ehrenfeucht}}</ref>. В 2001 г. Иненага и др. разработали линейный онлайн-алгоритм для построения сжатого суффиксного автомата<ref name=":0">{{Статья|автор=S. Inenaga, H. Hoshino, A. Shinohara, M. Takeda, S. Arikawa|год=2005-03-01|doi=10.1016/j.dam.2004.04.012|issn=0166-218X|выпуск=2|страницы=156–179|издание=Discrete Applied Mathematics|заглавие=On-line construction of compact directed acyclic word graphs|ссылка=http://www.sciencedirect.com/science/article/pii/S0166218X04003464|том=146|язык=|тип=|месяц=|число=|номер=}}</ref>, а также линейный алгоритм для построения сжатого суффиксного автомата для набора строк, заданного [[Префиксное дерево|бором]]<ref>{{Статья|автор=S. Inenaga, H. Hoshino, A. Shinohara, M. Takeda, S. Arikawa|заглавие=Construction of the CDAWG for a trie|ссылка=https://pdfs.semanticscholar.org/f481/2c5732c800ca6fbbb6ad294b5af3c5c29a04.pdf|язык=|издание=Proceedings of the Prague Stringology Conference ’01 (PSC’01), Czech Technical University|тип=|год=2001|месяц=|число=|том=|номер=|страницы=37-48|issn=}}</ref>.


== Структура автомата ==
== Структура автомата ==
Строка 11: Строка 13:
* При этом переходу <math>(q_1, \sigma, q_2) \in \delta</math> соответствует дуга из <math>q_1</math> в <math>q_2</math>, помеченная символом алфавита <math>\sigma \in \Sigma</math>.
* При этом переходу <math>(q_1, \sigma, q_2) \in \delta</math> соответствует дуга из <math>q_1</math> в <math>q_2</math>, помеченная символом алфавита <math>\sigma \in \Sigma</math>.


В таком графе вершины и дуги отождествляются с состояниями и переходами автомата соответственно. В таком естественном представлении автомат принимает строку <math>S=s_1 s_2 \dots s_n</math> в том и только том случае если существует путь из начального состояния <math>q_0</math> в некоторое финальное состояние <math>q \in F</math> такой что если последовательно выписать символы, которые встретились на этом пути, то получится последовательность <math>s_1, s_2, \dots, s_n</math><ref>{{Книга|автор=Серебряков В.А., Галочкин М.П., Гончар Д.Р., Фуругян М.Г.|заглавие=Теория и реализация языков программирования|ответственный=|издание=|место=Москва|издательство=МЗ Пресс|год=2006|страницы=|страниц=352|isbn=5-94073-094-9|isbn2=|ссылка=http://www.ccas.ru/depart/MMSP/furugyan/doc/_TRYAPBOOK_pdf.pdf}}</ref>.
В таком графе вершины и дуги отождествляются с состояниями и переходами автомата соответственно. В таком естественном представлении автомат принимает строку <math>S=s_1 s_2 \dots s_n</math> в том и только том случае если существует путь из начального состояния <math>q_0</math> в некоторое финальное состояние <math>q \in F</math> такой что если последовательно выписать символы, которые встретились на этом пути, то получится последовательность <math>s_1, s_2, \dots, s_n</math><ref>{{Статья|автор=Maxime Crochemore, Christophe Hancart|ответственный=Grzegorz Rozenberg, Arto Salomaa|год=1997|doi=10.1007/978-3-662-07675-0_9|isbn=9783662076750|язык=en|страницы=399–462|заглавие=Automata for Matching Patterns|ссылка=https://doi.org/10.1007/978-3-662-07675-0_9|место=Berlin, Heidelberg|издательство=Springer Berlin Heidelberg|издание=Handbook of Formal Languages: Volume 2. Linear Modeling: Background and Application}}</ref>.


=== Контексты строк и состояний ===
=== Контексты строк и состояний ===

Версия от 00:11, 26 июля 2019

Схема преобразования одних суффиксных структур в другие[1]

Суффиксный автомат (англ. suffix automaton, directed acyclic word graph, DAWG) — детерминированный конечный автомат, принимающий все суффиксы данной строки и только их, и обладающий наименьшим возможным числом состояний среди всех таких автоматов. Автомат был впервые описан Блумером и др. в 1983 г.[2], в той же работе впервые было показано, что размер суффиксного автомата линеен по длине строки, а также был предложен онлайн-алгоритм[англ.] для построения автомата с линейным временем работы.

В 1985 г. Чен и Сейферас показали, что алгоритм Вайнера[3], предложенный в 1973 г. для построения суффиксного дерева строки , также строит суффиксный автомат для развёрнутой строки в качестве вспомогательной структуры[4]. В 1987 г. Блумер и др. по аналогии с суффиксным деревом описали сжатый суффикный автомат (англ. compact directed acyclic word graph, CDAWG)[5], получаемый из суффиксного автомата удалением состояний с полустепенью исхода, равной единице, а в 1997 г. Крошемор и Верин разработали линейный алгоритм для его непосредственного построения[6]. В 2001 г. Иненага и др. разработали линейный онлайн-алгоритм для построения сжатого суффиксного автомата[1], а также линейный алгоритм для построения сжатого суффиксного автомата для набора строк, заданного бором[7].

Структура автомата

Как и любой конечный автомат, суффиксный автомат, заданный формальной пятёркой может быть представлен в виде ориентированного графа такого что:

  • Множество вершин графа соответствует множеству состояний автомата ,
  • В графе выеделена некоторая вершина, соответствующая начальному состоянию ,
  • В графе выделен набор вершин, соответствующих множеству финальных состояний ,
  • Множество дуг в графе соответствует множеству переходов ,
  • При этом переходу соответствует дуга из в , помеченная символом алфавита .

В таком графе вершины и дуги отождествляются с состояниями и переходами автомата соответственно. В таком естественном представлении автомат принимает строку в том и только том случае если существует путь из начального состояния в некоторое финальное состояние такой что если последовательно выписать символы, которые встретились на этом пути, то получится последовательность [8].

Контексты строк и состояний

Правым контекстом слова относительно языка называют множество . То есть, это множество строк , при приписывании которых к слову справа получается слово из языка . Аналогичным образом определяется левый контекст . Также для каждого состояния автомата можно определить его правый контекст как множество слов , которые переводят в некоторое финальное состояние. Другими словами, это такие строки , что существует путь из в некоторое финальное состояние такой что символы, встретившиеся на этом пути образуют строку .

Если автомат детерминированный, то каждому слову соответствует единственное состояние автомата такое что из в есть путь, символы на котором образуют слово . При этом правые контексты и по определению совпадают, откуда следует, что если , то . То есть, правые контексты слов, принимаемых одним и тем же состоянием совпадают.

В случае суффиксных автоматов из этого также следует, что строки, принимаемые одним и тем же состоянием, являются суффиксами друг друга.

Суффиксные ссылки

Пусть строка является самой длинной из строк, принимаемых состоянием суффиксного автомата . Тогда суффиксная ссылка от состояния указывает на состояние , которое принимает самый длинный суффикс , который не принимается состоянием . Суффиксные ссылки образуют дерево с корнем в начальном состоянии и несут важную роль при построении суффиксного автомата. Более того, дерево суффиксных ссылок суффиксного автомата для строки изоморфно суффиксному дереву для развёрнутой строки , что наглядно демонстрирует следующая иллюстрация:

Применения

Суффиксный автомат строки строится за время и может использоваться для решения таких задач как:

  • Подсчёт количества различных подстрок за время в режиме онлайн,
  • Поиск самой длинной подстроки , которая входит в неё хотя бы два раза за время ,
  • Поиск наибольшей общей подстроки строк и за время ,
  • Подсчёт числа вхождений строки в в качестве подстроки за время ,
  • Поиск всех вхождений в за время , где — количество вхождений.

Здесь стоит считать, что некоторая строка подаётся на вход когда автомат уже построен и готов к использованию.

Примечания

  1. 1 2 S. Inenaga, H. Hoshino, A. Shinohara, M. Takeda, S. Arikawa. On-line construction of compact directed acyclic word graphs // Discrete Applied Mathematics. — 2005-03-01. — Т. 146, вып. 2. — С. 156–179. — ISSN 0166-218X. — doi:10.1016/j.dam.2004.04.012.
  2. A. Blumer, J. Blumer, A. Ehrenfeucht, D. Haussler, R. McConnell. Building the minimal DFA for the set of all subwords of a word on-line in linear time // Automata, Languages and Programming. — Berlin, Heidelberg: Springer Berlin Heidelberg, 1984. — С. 109–118. — ISBN 9783540133452, 9783540388869.
  3. P. Weiner. Linear pattern matching algorithms // 14th Annual Symposium on Switching and Automata Theory (swat 1973). — 1973-10. — С. 1–11. — doi:10.1109/SWAT.1973.13.
  4. M. T. Chen, Joel Seiferas. Efficient and Elegant Subword-Tree Construction (англ.) // Combinatorial Algorithms on Words / Alberto Apostolico, Zvi Galil. — Springer Berlin Heidelberg, 1985. — P. 97–107. — ISBN 9783642824562. — doi:10.1007/978-3-642-82456-2_7.
  5. A. Blumer, J. Blumer, D. Haussler, R. McConnell, A. Ehrenfeucht. Complete inverted files for efficient text retrieval and analysis // Journal of the ACM. — 1987-07-01. — Т. 34, вып. 3. — С. 578–595. — ISSN 0004-5411. — doi:10.1145/28869.28873.
  6. Maxime Crochemore, Renaud Vérin. On compact directed acyclic word graphs (англ.) // Structures in Logic and Computer Science: A Selection of Essays in Honor of A. Ehrenfeucht / Jan Mycielski, Grzegorz Rozenberg, Arto Salomaa. — Berlin, Heidelberg: Springer Berlin Heidelberg, 1997. — P. 192–211. — ISBN 9783540692423. — doi:10.1007/3-540-63246-8_12.
  7. S. Inenaga, H. Hoshino, A. Shinohara, M. Takeda, S. Arikawa. Construction of the CDAWG for a trie // Proceedings of the Prague Stringology Conference ’01 (PSC’01), Czech Technical University. — 2001. — С. 37-48.
  8. Maxime Crochemore, Christophe Hancart. Automata for Matching Patterns (англ.) // Handbook of Formal Languages: Volume 2. Linear Modeling: Background and Application / Grzegorz Rozenberg, Arto Salomaa. — Berlin, Heidelberg: Springer Berlin Heidelberg, 1997. — P. 399–462. — ISBN 9783662076750. — doi:10.1007/978-3-662-07675-0_9.