Суффиксный автомат: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
м →Применения: стилевые правки |
Нет описания правки |
||
Строка 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>{{Статья|автор= |
В 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>{{ |
В таком графе вершины и дуги отождествляются с состояниями и переходами автомата соответственно. В таком естественном представлении автомат принимает строку <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
Суффиксный автомат (англ. 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].
Контексты строк и состояний
Правым контекстом слова относительно языка называют множество . То есть, это множество строк , при приписывании которых к слову справа получается слово из языка . Аналогичным образом определяется левый контекст . Также для каждого состояния автомата можно определить его правый контекст как множество слов , которые переводят в некоторое финальное состояние. Другими словами, это такие строки , что существует путь из в некоторое финальное состояние такой что символы, встретившиеся на этом пути образуют строку .
Если автомат детерминированный, то каждому слову соответствует единственное состояние автомата такое что из в есть путь, символы на котором образуют слово . При этом правые контексты и по определению совпадают, откуда следует, что если , то . То есть, правые контексты слов, принимаемых одним и тем же состоянием совпадают.
В случае суффиксных автоматов из этого также следует, что строки, принимаемые одним и тем же состоянием, являются суффиксами друг друга.
Суффиксные ссылки
Пусть строка является самой длинной из строк, принимаемых состоянием суффиксного автомата . Тогда суффиксная ссылка от состояния указывает на состояние , которое принимает самый длинный суффикс , который не принимается состоянием . Суффиксные ссылки образуют дерево с корнем в начальном состоянии и несут важную роль при построении суффиксного автомата. Более того, дерево суффиксных ссылок суффиксного автомата для строки изоморфно суффиксному дереву для развёрнутой строки , что наглядно демонстрирует следующая иллюстрация:
-
Суффиксный автомат для строки abbcbc
-
Суффиксное дерево для строки cbcbba
(дерево суффиксных ссылок для автомата строки abbcbc)
Применения
Суффиксный автомат строки строится за время и может использоваться для решения таких задач как:
- Подсчёт количества различных подстрок за время в режиме онлайн,
- Поиск самой длинной подстроки , которая входит в неё хотя бы два раза за время ,
- Поиск наибольшей общей подстроки строк и за время ,
- Подсчёт числа вхождений строки в в качестве подстроки за время ,
- Поиск всех вхождений в за время , где — количество вхождений.
Здесь стоит считать, что некоторая строка подаётся на вход когда автомат уже построен и готов к использованию.
Примечания
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
На эту статью не ссылаются другие статьи Википедии. |