8#include <string/LinearString.h>
23 template <
class SymbolType >
27template <
class SymbolType >
38 for (
const SymbolType & symbol : inputString ) {
39 cover.push_back ( symbol );
42 for (
unsigned nfaState : previousState ) {
44 for (
const auto & it : transition_range ) {
45 newState.insert ( it.second );
49 previousState = newState;
51 if ( newState.size ( ) < 2 )
55 if ( * newState.rbegin ( ) == inputString.size ( ) ) {
57 auto it = std::next ( newState.rbegin ( ) );
58 auto prev = newState.rbegin ( );
60 for ( ; it != newState.rend ( ); ++ it, ++ prev ) {
61 if ( *prev - *it > cover.size ( ) ) {
Nondeterministic finite automaton. Accepts regular languages.
Definition: NFA.h:66
const StateType & getInitialState() const &
Definition: NFA.h:107
const ext::multimap< ext::pair< StateType, SymbolType >, StateType > & getTransitions() const &
Definition: NFA.h:484
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Linear string.
Definition: LinearString.h:57
const ext::vector< SymbolType > & getContent() const &
Definition: LinearString.h:238
Definition: ExactCoversComputation.h:14
static ext::set< string::LinearString< SymbolType > > compute(const string::LinearString< SymbolType > &pattern)
Definition: ExactCoversComputation.h:28
static automaton::NFA< SymbolType, unsigned > construct(const string::LinearString< SymbolType > &pattern)
Definition: NondeterministicExactSuffixAutomaton.h:31
typename T::SymbolType SymbolType
Definition: ReachableStates.h:176
for(const StateType &state :fsm.getStates()) renamingData.insert(std Rename::RenamedAutomaton< T > result(renamingData.at(fsm.getInitialState()))
Definition: Rename.h:253
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
Definition: ApproximateCoversComputation.cpp:9