In
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includin ...
, a suffix automaton is an efficient
data structure
In computer science, a data structure is a data organization, management, and storage format that is usually chosen for Efficiency, efficient Data access, access to data. More precisely, a data structure is a collection of data values, the rel ...
for representing the
substring index
In computer science, a substring index is a data structure which gives substring search in a text or text collection in sublinear time. If you have a document S of length n, or a set of documents D=\ of total length n, you can locate all occurrenc ...
of a given string which allows the storage, processing, and retrieval of compressed information about all its
substring
In formal language theory and computer science, a substring is a contiguous sequence of characters within a string. For instance, "''the best of''" is a substring of "''It was the best of times''". In contrast, "''Itwastimes''" is a subsequence ...
s. The suffix automaton of a string
is the smallest
directed acyclic graph
In mathematics, particularly graph theory, and computer science, a directed acyclic graph (DAG) is a directed graph with no directed cycles. That is, it consists of vertices and edges (also called ''arcs''), with each edge directed from one v ...
with a dedicated initial vertex and a set of "final" vertices, such that paths from the initial vertex to final vertices represent the suffixes of the string.
In terms of
automata theory
Automata theory is the study of abstract machines and automata, as well as the computational problems that can be solved using them. It is a theory in theoretical computer science. The word ''automata'' comes from the Greek word αὐτόματο� ...
, a suffix automaton is the
minimal partial
deterministic finite automaton
In the theory of computation, a branch of theoretical computer science, a deterministic finite automaton (DFA)—also known as deterministic finite acceptor (DFA), deterministic finite-state machine (DFSM), or deterministic finite-state automa ...
that recognizes the set of
suffixes
In linguistics, a suffix is an affix which is placed after the stem of a word. Common examples are case endings, which indicate the grammatical case of nouns, adjectives, and verb endings, which form the conjugation of verbs. Suffixes can carry gr ...
of a given
string
String or strings may refer to:
*String (structure), a long flexible structure made from threads twisted together, which is used to tie, bind, or hang other objects
Arts, entertainment, and media Films
* ''Strings'' (1991 film), a Canadian anim ...
. The
state graph of a suffix automaton is called a directed acyclic word graph (DAWG), a term that is also sometimes used for any
deterministic acyclic finite state automaton
In computer science, a deterministic acyclic finite state automaton (DAFSA),Jan Daciuk, Stoyan Mihov, Bruce Watson and Richard Watson (2000). Incremental construction of minimal acyclic finite state automata. Computational Linguistics 26(1):3-16.
...
.
Suffix automata were introduced in 1983 by a group of scientists from the
University of Denver
The University of Denver (DU) is a private research university in Denver, Colorado. Founded in 1864, it is the oldest independent private university in the Rocky Mountain Region of the United States. It is classified among "R1: Doctoral Univ ...
and the
University of Colorado Boulder
The University of Colorado Boulder (CU Boulder, CU, or Colorado) is a public research university in Boulder, Colorado. Founded in 1876, five months before Colorado became a state, it is the flagship university of the University of Colorado s ...
. They suggested a
linear time
In computer science, the time complexity is the computational complexity that describes the amount of computer time it takes to run an algorithm. Time complexity is commonly estimated by counting the number of elementary operations performed by t ...
online algorithm
In computer science, an online algorithm is one that can process its input piece-by-piece in a serial fashion, i.e., in the order that the input is fed to the algorithm, without having the entire input available from the start.
In contrast, an o ...
for its construction and showed that the suffix automaton of a string
having length at least two characters has at most
states and at most
transitions. Further works have shown a close connection between suffix automata and
suffix tree
In computer science, a suffix tree (also called PAT tree or, in an earlier form, position tree) is a compressed trie containing all the suffixes of the given text as their keys and positions in the text as their values. Suffix trees allow parti ...
s, and have outlined several generalizations of suffix automata, such as compacted suffix automaton obtained by compression of nodes with a single outgoing arc.
Suffix automata provide efficient solutions to problems such as
substring search and computation of the
largest common substring of two and more strings.
History

The concept of suffix automaton was introduced in 1983
by a group of scientists from
University of Denver
The University of Denver (DU) is a private research university in Denver, Colorado. Founded in 1864, it is the oldest independent private university in the Rocky Mountain Region of the United States. It is classified among "R1: Doctoral Univ ...
and
University of Colorado Boulder
The University of Colorado Boulder (CU Boulder, CU, or Colorado) is a public research university in Boulder, Colorado. Founded in 1876, five months before Colorado became a state, it is the flagship university of the University of Colorado s ...
consisting of Anselm Blumer, Janet Blumer,
Andrzej Ehrenfeucht,
David Haussler
David Haussler (born 1953) is an American bioinformatician known for his work leading the team that assembled the first human genome sequence in the race to complete the Human Genome Project and subsequently for comparative genome analysis that d ...
and Ross McConnell, although similar concepts had earlier been studied alongside suffix trees in the works of Peter Weiner,
Vaughan Pratt and
Anatol Slissenko. In their initial work, Blumer ''et al''. showed a suffix automaton built for the string
of length greater than
has at most
states and at most
transitions, and suggested a linear
algorithm
In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation. Algorithms are used as specifications for performing ...
for automaton construction.
In 1983, Mu-Tian Chen and Joel Seiferas independently showed that Weiner's 1973 suffix-tree construction algorithm
while building a suffix tree of the string
constructs a suffix automaton of the reversed string
as an auxiliary structure.
In 1987, Blumer ''et al''. applied the compressing technique used in suffix trees to a suffix automaton and invented the compacted suffix automaton, which is also called the compacted directed acyclic word graph (CDAWG).
In 1997,
Maxime Crochemore
Maxime Crochemore (born 1947) is a French computer scientist known for his numerous contributions to algorithms on strings. He is currently a professor at King's College London.
Biography
Crochemore earned his doctorate (PhD) in 1978 and his Doc ...
and Renaud Vérin developed a linear algorithm for direct CDAWG construction.
In 2001, Shunsuke Inenaga ''et al''. developed an algorithm for construction of CDAWG for a set of words given by a
trie
In computer science, a trie, also called digital tree or prefix tree, is a type of ''k''-ary search tree, a tree data structure used for locating specific keys from within a set. These keys are most often strings, with links between nodes d ...
.
Definitions
Usually when speaking about suffix automata and related concepts, some notions from
formal language theory
In logic, mathematics, computer science, and linguistics, a formal language consists of words whose letters are taken from an alphabet and are well-formed according to a specific set of rules.
The alphabet of a formal language consists of sy ...
and
automata theory
Automata theory is the study of abstract machines and automata, as well as the computational problems that can be solved using them. It is a theory in theoretical computer science. The word ''automata'' comes from the Greek word αὐτόματο� ...
are used, in particular:
*
"Alphabet" is a finite
set that is used to construct words. Its elements are called "characters";
*
"Word" is a finite sequence of characters
. "Length" of the word
is denoted as
;
* "
Formal language
In logic, mathematics, computer science, and linguistics, a formal language consists of words whose letters are taken from an alphabet and are well-formed according to a specific set of rules.
The alphabet of a formal language consists of s ...
" is a set of words over given alphabet;
* "Language of all words" is denoted as
(where the "*" character stands for
Kleene star
In mathematical logic and computer science, the Kleene star (or Kleene operator or Kleene closure) is a unary operation, either on sets of strings or on sets of symbols or characters. In mathematics,
it is more commonly known as the free monoid ...
), "empty word" (the word of zero length) is denoted by the character
;
* "
Concatenation
In formal language theory and computer programming, string concatenation is the operation of joining character strings end-to-end. For example, the concatenation of "snow" and "ball" is "snowball". In certain formalisations of concatenat ...
of words"
and
is denoted as
or
and corresponds to the word obtained by writing
to the right of
, that is,
;
* "Concatenation of languages"
and
is denoted as
or
and corresponds to the set of pairwise concatenations
;
* If the word
may be represented as
, where
, then words
,
and
are called "prefix", "suffix" and "
subword" (substring) of the word
correspondingly;
* If
and
(with
) then
is said to "occur" in
as a subword. Here
and
are called left and right positions of occurrence of
in
correspondingly.
Automaton structure
Formally,
deterministic finite automaton
In the theory of computation, a branch of theoretical computer science, a deterministic finite automaton (DFA)—also known as deterministic finite acceptor (DFA), deterministic finite-state machine (DFSM), or deterministic finite-state automa ...
is determined by
5-tuple , where:
*
is an "alphabet" that is used to construct words,
*
is a set of automaton "
states",
*
is an "initial" state of automaton,
*
is a set of "final" states of automaton,
*
is a
partial "transition" function of automaton, such that
for
and
is either undefined or defines a transition from
over character
.
Most commonly, deterministic finite automaton is represented as a
directed graph
In mathematics, and more specifically in graph theory, a directed graph (or digraph) is a graph that is made up of a set of vertices connected by directed edges, often called arcs.
Definition
In formal terms, a directed graph is an ordered pai ...
("diagram") such that:
* Set of graph
vertices corresponds to the state of states
,
* Graph has a specific marked vertex corresponding to initial state
,
* Graph has several marked vertices corresponding to the set of final states
,
* Set of graph
arcs corresponds to the set of transitions
,
* Specifically, every transition
is represented by an arc from
to
marked with the character
. This transition also may be denoted as
.
In terms of its diagram, the automaton recognizes the word
only if there is a path from the initial vertex
to some final vertex
such that concatenation of characters on this path forms
. The set of words recognized by an automaton forms a language that is set to be recognized by the automaton. In these terms, the language recognized by a suffix automaton of
is the language of its (possibly empty) suffixes.
Automaton states
"Right context" of the word
with respect to language
is a set
that is a set of words
such that their concatenation with
forms a word from
. Right contexts induce a natural
equivalence relation
In mathematics, an equivalence relation is a binary relation that is reflexive, symmetric and transitive. The equipollence relation between line segments in geometry is a common example of an equivalence relation.
Each equivalence relatio ...
on the set of all words. If language
is recognized by some deterministic finite automaton, there exists unique up to
isomorphism
In mathematics, an isomorphism is a structure-preserving mapping between two structures of the same type that can be reversed by an inverse mapping. Two mathematical structures are isomorphic if an isomorphism exists between them. The word i ...
automaton that recognizes the same language and has the minimum possible number of states. Such an automaton is called a
minimal automaton
In automata theory (a branch of theoretical computer science), DFA minimization is the task of transforming a given deterministic finite automaton (DFA) into an equivalent DFA that has a minimum number of states. Here, two DFAs are called equi ...
for the given language
.
Myhill–Nerode theorem
In the theory of formal languages, the Myhill–Nerode theorem provides a necessary and sufficient condition for a language to be regular. The theorem is named for John Myhill and Anil Nerode, who proved it at the University of Chicago in 1958 . ...
allows it to define it explicitly in terms of right contexts:
In these terms, a "suffix automaton" is the minimal deterministic finite automaton recognizing the language of suffixes of the word
. The right context of the word
with respect to this language consists of words
, such that
is a suffix of
. It allows to formulate the following lemma defining a
bijection between the right context of the word and the set of right positions of its occurrences in
:
For example, for the word
and its subword
, it holds
and
. Informally,
is formed by words that follow occurrences of
to the end of
and
is formed by right positions of those occurrences. In this example, the element
corresponds with the word
while the word
corresponds with the element
.
It implies several structure properties of suffix automaton states. Let
, then:
* If
and
have at least one common element
, then
and
have a common element as well. It implies
is a suffix of
and therefore
and
. In aforementioned example,
, so
is a suffix of
and thus
and
;
* If
, then
, thus
occurs in
only as a suffix of
. For example, for
and
it holds that
and
;
* If
and
is a suffix of
such that
, then
. In the example above
and it holds for "intermediate" suffix
that
.
Any state
of the suffix automaton recognizes some continuous
chain
A chain is a wikt:series#Noun, serial assembly of connected pieces, called links, typically made of metal, with an overall character similar to that of a rope in that it is flexible and curved in compression (physics), compression but line (g ...
of nested suffixes of the longest word recognized by this state.
"Left extension"
of the string
is the longest string
that has the same right context as
. Length
of the longest string recognized by
is denoted by
. It holds:
"Suffix link"
of the state
is the pointer to the state
that contains the largest suffix of
that is not recognized by
.
In this terms it can be said
recognizes exactly all suffixes of
that is longer than
and not longer than
. It also holds:
Connection with suffix trees

A "
prefix tree
In computer science, a trie, also called digital tree or prefix tree, is a type of ''k''-ary search tree, a tree data structure used for locating specific keys from within a set. These keys are most often strings, with links between nodes de ...
" (or "trie") is a rooted directed tree in which arcs are marked by characters in such a way no vertex
of such tree has two out-going arcs marked with the same character. Some vertices in trie are marked as final. Trie is said to recognize a set of words defined by paths from its root to final vertices. In this way prefix trees are a special kind of deterministic finite automata if you perceive its root as an initial vertex. The "suffix trie" of the word
is a prefix tree recognizing a set of its suffixes. "A
suffix tree
In computer science, a suffix tree (also called PAT tree or, in an earlier form, position tree) is a compressed trie containing all the suffixes of the given text as their keys and positions in the text as their values. Suffix trees allow parti ...
" is a tree obtained from a suffix trie via the compaction procedure, during which consequent edges are merged if the
degree
Degree may refer to:
As a unit of measurement
* Degree (angle), a unit of angle measurement
** Degree of geographical latitude
** Degree of geographical longitude
* Degree symbol (°), a notation used in science, engineering, and mathemati ...
of the vertex between them is equal to two.
By its definition, a suffix automaton can be obtained via
minimization of the suffix trie. It may be shown that a compacted suffix automaton is obtained by both minimization of the suffix tree (if one assumes each string on the edge of the suffix tree is a solid character from the alphabet) and compaction of the suffix automaton.
Besides this connection between the suffix tree and the suffix automaton of the same string there is as well a connection between the suffix automaton of the string
and the suffix tree of the reversed string
.
Similarly to right contexts one may introduce "left contexts"
, "right extensions"
corresponding to the longest string having same left context as
and the equivalence relation
. If one considers right extensions with respect to the language
of "prefixes" of the string
it may be obtained:
, which implies the suffix link tree of the string
and the suffix tree of the string
are isomorphic:
Similarly to the case of left extensions, the following lemma holds for right extensions:
Size
A suffix automaton of the string
of length
has at most
states and at most
transitions. These bounds are reached on strings
and
correspondingly.
This may be formulated in a stricter way as
where
and
are the numbers of transitions and states in automaton correspondingly.
Construction
Initially the automaton only consists of a single state corresponding to the empty word, then characters of the string are added one by one and the automaton is rebuilt on each step incrementally.
State updates
After a new character is appended to the string, some equivalence classes are altered. Let
be the right context of
with respect to the language of
suffixes. Then the transition from
to
after
is appended to
is defined by lemma:
After adding
to the current word
the right context of
may change significantly only if
is a suffix of
. It implies equivalence relation
is a
refinement of
. In other words, if
, then
. After the addition of a new character at most two equivalence classes of
will be split and each of them may split in at most two new classes. First, equivalence class corresponding to
empty right context is always split into two equivalence classes, one of them corresponding to
itself and having
as a right context. This new equivalence class contains exactly
and all its suffixes that did not occur in
, as the right context of such words was empty before and contains only empty word now.
Given the correspondence between states of the suffix automaton and vertices of the suffix tree, it is possible to find out the second state that may possibly split after a new character is appended. The transition from
to
corresponds to the transition from
to
in the reversed string. In terms of suffix trees it corresponds to the insertion of the new longest suffix
into the suffix tree of
. At most two new vertices may be formed after this insertion: one of them corresponding to
, while the other one corresponds to its direct ancestor if there was a branching. Returning to suffix automata, it means the first new state recognizes
and the second one (if there is a second new state) is its suffix link. It may be stated as a lemma:
It implies that if
(for example, when
didn't occur in
at all and
), then only the equivalence class corresponding to the empty right context is split.
Besides suffix links it is also needed to define final states of the automaton. It follows from structure properties that all suffixes of a word
recognized by
are recognized by some vertex on ''suffix path''
of
. Namely, suffixes with length greater than
lie in
, suffixes with length greater than
but not greater than
lie in
and so on. Thus if the state recognizing
is denoted by
, then all final states (that is, recognizing suffixes of
) form up the sequence
.
Transitions and suffix links updates
After the character
is appended to
possible new states of suffix automaton are
and
. Suffix link from
goes to
and from
it goes to
. Words from
occur in
only as its suffixes therefore there should be no transitions at all from
while transitions to it should go from suffixes of
having length at least
and be marked with the character
. State
is formed by subset of
, thus transitions from
should be same as from
. Meanwhile, transitions leading to
should go from suffixes of
having length less than
and at least
, as such transitions have led to
before and corresponded to seceded part of this state. States corresponding to these suffixes may be determined via traversal of suffix link path for
.
Construction algorithm
Theoretical results above lead to the following algorithm that takes character
and rebuilds the suffix automaton of
into the suffix automaton of
:
# The state corresponding to the word
is kept as
;
# After
is appended, previous value of
is stored in the variable
and
itself is reassigned to the new state corresponding to
;
# States corresponding to suffixes of
are updated with transitions to
. To do this one should go through
, until there is a state that already has a transition by
;
# Once the aforementioned loop is over, there are 3 cases:
## If none of states on the suffix path had a transition by
, then
never occurred in
before and the suffix link from
should lead to
;
## If the transition by
is found and leads from the state
to the state
, such that
, then
does not have to be split and it is a suffix link of
;
## If the transition is found but
, then words from
having length at most
should be segregated into new "clone" state
;
# If the previous step was concluded with the creation of
, transitions from it and its suffix link should copy those of
, at the same time
is assigned to be common suffix link of both
and
;
# Transitions that have led to
before but corresponded to words of the length at most
are redirected to
. To do this, one continues going through the suffix path of
until the state is found such that transition by
from it doesn't lead to
.
The whole procedure is described by the following pseudo-code:
function :
define
assign
assign
while is undefined:
assign
define
if :
assign
else if :
assign
else:
define
assign
assign
assign
while :
assign
Here
is the initial state of the automaton and
is a function creating new state for it. It is assumed
,
,
and
are stored as global variables.
Complexity
Complexity of the algorithm may vary depending on the underlying structure used to store transitions of the automaton. It may be implemented in
with
memory overhead or in
with
memory overhead if one assumes that memory allocation is done in
. To obtain such complexity, one has to use the methods of
amortized analysis
In computer science, amortized analysis is a method for analyzing a given algorithm's complexity, or how much of a resource, especially time or memory, it takes to execute. The motivation for amortized analysis is that looking at the worst-case ...
. The value of
strictly reduces with each iteration of the cycle while it may only increase by as much as one after the first iteration of the cycle on the next ''add_letter'' call. Overall value of
never exceeds
and it is only increased by one between iterations of appending new letters that suggest total complexity is at most linear as well. The linearity of the second cycle is shown in a similar way.
Generalizations
The suffix automaton is closely related to other suffix structures and
substring indices
In formal language theory and computer science, a substring is a contiguous sequence of characters within a string. For instance, "''the best of''" is a substring of "''It was the best of times''". In contrast, "''Itwastimes''" is a subsequence ...
. Given a suffix automaton of a specific string one may construct its suffix tree via compacting and recursive traversal in linear time. Similar transforms are possible in both directions to switch between the suffix automaton of
and the suffix tree of reversed string
.
Other than this several generalizations were developed to construct an automaton for the set of strings given by trie,
compacted suffix automation (CDAWG),
to maintain the structure of the automaton on the sliding window, and to construct it in a bidirectional way, supporting the insertion of a characters to both the beginning and the end of the string.
Compacted suffix automaton
As was already mentioned above, a compacted suffix automaton is obtained via both compaction of a regular suffix automaton (by removing states which are non-final and have exactly one out-going arc) and the minimization of a suffix tree. Similarly to the regular suffix automaton, states of compacted suffix automaton may be defined in explicit manner. ''A two-way extension''
of a word
is the longest word
, such that every occurrence of
in
is preceded by
and succeeded by
. In terms of left and right extensions it means that two-way extension is the left extension of the right extension or, which is equivalent, the right extension of the left extension, that is
. In terms of two-way extensions compacted automaton is defined as follows:
Two-way extensions induce an equivalence relation
which defines the set of words recognized by the same state of compacted automaton. This equivalence relation is a
transitive closure
In mathematics, the transitive closure of a binary relation on a set is the smallest relation on that contains and is transitive. For finite sets, "smallest" can be taken in its usual sense, of having the fewest related pairs; for infinit ...
of the relation defined by
, which highlights the fact that a compacted automaton may be obtained by both gluing suffix tree vertices equivalent via
relation (minimization of the suffix tree) and gluing suffix automaton states equivalent via
relation (compaction of suffix automaton).
If words
and
have same right extensions, and words
and
have same left extensions, then cumulatively all strings
,
and
have same two-way extensions. At the same time it may happen that neither left nor right extensions of
and
coincide. As an example one may take
,
and
, for which left and right extensions are as follows:
, but
and
. That being said, while equivalence relations of one-way extensions were formed by some continuous chain of nested prefixes or suffixes, bidirectional extensions equivalence relations are more complex and the only thing one may conclude for sure is that strings with the same two-way extension are ''substrings'' of the longest string having the same two-way extension, but it may even happen that they don't have any non-empty substring in common. The total number of equivalence classes for this relation does not exceed
which implies that compacted suffix automaton of the string having length
has at most
states. The amount of transitions in such automaton is at most
.
Suffix automaton of several strings
Consider a set of words
. It is possible to construct a generalization of suffix automaton that would recognize the language formed up by suffixes of all words from the set. Constraints for the number of states and transitions in such automaton would stay the same as for a single-word automaton if you put
.
The algorithm is similar to the construction of single-word automaton except instead of
state, function ''add_letter'' would work with the state corresponding to the word
assuming the transition from the set of words
to the set
.
This idea is further generalized to the case when
is not given explicitly but instead is given by a
prefix tree
In computer science, a trie, also called digital tree or prefix tree, is a type of ''k''-ary search tree, a tree data structure used for locating specific keys from within a set. These keys are most often strings, with links between nodes de ...
with
vertices. Mohri ''et al''. showed such an automaton would have at most
and may be constructed in linear time from its size. At the same time, the number of transitions in such automaton may reach
, for example for the set of words
over the alphabet
the total length of words is equal to
, the number of vertices in corresponding suffix trie is equal to
and corresponding suffix automaton is formed of
states and
transitions. Algorithm suggested by Mohri mainly repeats the generic algorithm for building automaton of several strings but instead of growing words one by one, it traverses the trie in a
breadth-first search
Breadth-first search (BFS) is an algorithm for searching a tree data structure for a node that satisfies a given property. It starts at the tree root and explores all nodes at the present depth prior to moving on to the nodes at the next d ...
order and append new characters as it meet them in the traversal, which guarantees amortized linear complexity.
Sliding window
Some
compression algorithms, such as
LZ77
LZ77 and LZ78 are the two lossless data compression algorithms published in papers by Abraham Lempel and Jacob Ziv in 1977 and 1978.
They are also known as LZ1 and LZ2 respectively. These two algorithms form the basis for many variations including ...
and
RLE may benefit from storing suffix automaton or similar structure not for the whole string but for only last
its characters while the string is updated. This is because compressing data is usually expressively large and using
memory is undesirable. In 1985, Janet Blumer developed an algorithm to maintain a suffix automaton on a sliding window of size
in
worst-case and
on average, assuming characters are distributed independently and
uniformly. She also showed
complexity cannot be improved: if one considers words construed as a concatenation of several
words, where
, then the number of states for the window of size
would frequently change with jumps of order
, which renders even theoretical improvement of
for regular suffix automata impossible.
The same should be true for the suffix tree because its vertices correspond to states of the suffix automaton of the reversed string but this problem may be resolved by not explicitly storing every vertex corresponding to the suffix of the whole string, thus only storing vertices with at least two out-going edges. A variation of McCreight's suffix tree construction algorithm for this task was suggested in 1989 by Edward Fiala and Daniel Greene; several years later a similar result was obtained with the variation of
Ukkonen's algorithm by Jesper Larsson. The existence of such an algorithm, for compacted suffix automaton that absorbs some properties of both suffix trees and suffix automata, was an open question for a long time until it was discovered by Martin Senft and Tomasz Dvorak in 2008, that it is impossible if the alphabet's size is at least two.
One way to overcome this obstacle is to allow window width to vary a bit while staying
. It may be achieved by an approximate algorithm suggested by Inenaga et al. in 2004. The window for which suffix automaton is built in this algorithm is not guaranteed to be of length
but it is guaranteed to be at least
and at most
while providing linear overall complexity of the algorithm.
Applications
Suffix automaton of the string
may be used to solve such problems as:
* Counting the number of distinct substrings of
in
on-line,
* Finding the longest substring of
occurring at least twice in
,
* Finding the
longest common substring of
and
in
,
* Counting the number of occurrences of
in
in
,
* Finding all occurrences of
in
in
, where
is the number of occurrences.
It is assumed here that
is given on the input after suffix automaton of
is constructed.
Suffix automata are also used in data compression, music retrieval and matching on genome sequences.
References
Bibliography
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
External links
*
Suffix automatonarticle on E-Maxx Algorithms in English
{{Strings , state=collapsed
String data structures
Finite automata
Algorithms on strings