8#include <ext/algorithm>
24 template <
class SymbolType >
31 template <
class SymbolType >
33 template <
class SymbolType >
35 template <
class SymbolType >
39template <
class SymbolType >
44 alphabet2.push_back ( s );
46 return RandomAutomatonFactory2::NonminimalDFA ( statesMinimal, statesDuplicates, statesUnreachable, statesUseless,
alphabet, density );
49template <
class SymbolType >
52 for(
size_t i = 0, cnt = 0;
i <
alphabet.size ( );
i++ ) {
63template <
class SymbolType >
65 for (
unsigned duplicateSource : duplicates [ source ] ) {
67 automaton.addTransition( duplicateSource, symbol, duplicateTarget );
71template <
class SymbolType >
95 for(
unsigned i = 0;
i < statesMinimal + statesUseless + statesUnreachable + statesDuplicates;
i ++ ) {
96 VStates.push_back(
false );
97 DStates.push_back(
false );
98 FStates.push_back(
false );
103 for (
unsigned i = 0;
i < statesDuplicates; ++
i ) {
105 duplicates [ a ].push_back (
i + statesMinimal + statesUseless + statesUnreachable );
109 if( statesMinimal == 0 ) {
111 }
else if( statesMinimal == 1 ) {
116 DStates[ 0 ] =
automaton.getTransitionsFromState ( 0 ).size ( ) ==
alphabet.size ( );
127 DStates[ 0 ] =
automaton.getTransitionsFromState ( 0 ).size ( ) ==
alphabet.size ( );
133 while(
visited != statesMinimal ) {
134 size_t a = randomSourceState ( statesMinimal,
visited, depleted, VStates, DStates );
135 size_t b = randomTargetState ( statesMinimal,
visited, VStates );
142 DStates[ a ] =
automaton.getTransitionsFromState ( a ).size ( ) ==
alphabet.size ( );
148 while(
visited != statesMinimal + statesUseless ) {
149 size_t a = randomSourceState ( statesMinimal + statesUseless,
visited, depleted, VStates, DStates );
150 size_t b = randomTargetState ( statesMinimal + statesUseless,
visited, VStates );
157 DStates[ a ] =
automaton.getTransitionsFromState ( a ).size ( ) ==
alphabet.size ( );
164 for (
unsigned i = 0;
i < statesMinimal; ++
i ) {
165 if (
automaton.getTransitionsFromState (
i ).empty ( ) ) {
173 for (
unsigned i = 0;
i < statesMinimal * 2 / 3; ++
i ) {
177 size_t a = randomSourceState ( statesMinimal,
visited - statesUseless, finals, VStates, FStates );
178 FStates [ a ] =
true;
181 for (
unsigned s : duplicates [ a ] )
186 for (
unsigned i = 0;
i < statesUnreachable * 2 / 3; ++
i ) {
191 FStates [ a ] =
true;
194 for (
unsigned s : duplicates [ a ] )
199 for (
unsigned i = 0;
i < statesUnreachable; ++
i ) {
200 VStates [ statesMinimal + statesUseless +
i ] =
true;
204 double mnn100 = 100.0 /
alphabet.size( ) / ( statesMinimal + statesUseless + statesUnreachable + statesDuplicates );
205 while(
automaton.getTransitions ( ).size( ) * mnn100 < density ) {
206 size_t a = randomSourceState ( statesMinimal + statesUseless + statesUnreachable,
visited, depleted, VStates, DStates );
208 if ( a < statesMinimal )
210 else if ( a < statesMinimal + statesUseless )
218 DStates[ a ] =
automaton.getTransitionsFromState ( a ).size ( ) ==
alphabet.size ( );
Deterministic finite automaton. Accepts regular languages.
Definition: DFA.h:71
Definition: RandomAutomatonFactory2.h:22
static automaton::DFA< SymbolType, unsigned > generateDFA(size_t statesMinimal, size_t statesDuplicates, size_t statesUnreachable, size_t statesUseless, ext::set< SymbolType > alphabet, double density)
Definition: RandomAutomatonFactory2.h:40
Basic exception from which all other exceptions are derived.
Definition: CommonException.h:21
Class extending the deque class from the standard library. Original reason is to allow printing of th...
Definition: deque.hpp:44
static semirandom_device & semirandom
The reference to singleton semirandom device.
Definition: random.hpp:147
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Definition: BarSymbol.cpp:12
int i
Definition: AllEpsilonClosure.h:118
typename T::SymbolType SymbolType
Definition: ReachableStates.h:176
Definition: ToGrammar.h:31
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79