8#include <ext/algorithm>
24 template <
class SymbolType >
26 static automaton::MultiInitialStateNFA < std::string, unsigned > generate (
size_t statesMinimal,
size_t statesDuplicates,
size_t statesUnreachable,
size_t statesUseless,
size_t initialStates,
size_t finalStates,
size_t alphabetSize,
bool randomizedAlphabet,
double density,
bool deterministic );
30 template <
class SymbolType >
32 template <
class SymbolType>
34 template <
class SymbolType >
36 template <
class SymbolType >
38 template <
class SymbolType >
42template <
class SymbolType >
44 if ( deterministic && initialStates > 1 )
47 if ( initialStates == 0 )
53 alphabet2.push_back ( s );
55 return RandomAutomatonFactory3::run ( makeVector ( 0 , statesMinimal ),
57 makeVector ( statesMinimal , statesMinimal + statesUnreachable ),
58 makeVector ( statesMinimal + statesUnreachable , statesMinimal + statesUnreachable + statesUseless ),
59 initialStates, finalStates,
alphabet, density, deterministic );
62template <
class SymbolType >
64 if ( ! deterministic )
72 for(
size_t i = 0, cnt = 0;
i <
alphabet.size ( );
i++ ) {
83template <
class SymbolType >
86 for (
unsigned duplicateSource : duplicates [ source ] ) {
88 res |=
automaton.addTransition ( duplicateSource, symbol, duplicateTarget );
93template <
class SymbolType>
106template <
class SymbolType >
110 for (
unsigned targetState : targetSet )
111 for (
unsigned duplicateTarget : duplicates [ targetState ] )
112 targetSetIncludingDuplicates.push_back ( duplicateTarget );
114 std::sort ( targetSetIncludingDuplicates.
begin ( ), targetSetIncludingDuplicates.
end ( ) );
116 if ( targetSet.empty ( ) )
119 size_t entriesToCreate = sourceSet.size ( ) *
alphabet.size ( );
120 if ( ! deterministic )
121 entriesToCreate *= targetSet.size ( );
124 for (
size_t state : sourceSet )
127 for (
unsigned state : sourceSet )
129 if ( std::binary_search ( targetSetIncludingDuplicates.
begin ( ), targetSetIncludingDuplicates.
end ( ), transition.second ) )
132 entriesToCreate *= density;
134 while ( entriesToCreate )
135 if ( makeRelationElement (
automaton,
alphabet, sourceSet, targetSet, duplicates, deterministic ) )
139template <
class Callback >
145 if ( index < set1.size ( ) )
146 state = set1 [ index ];
148 index -= set1.size ( );
149 state = set2 [ index ];
153 for (
unsigned duplicateState : duplicates [ state ] ) {
162template <
class SymbolType >
171 for (
unsigned state : statesMinimal ) {
176 for (
unsigned state : statesUnreachable ) {
181 for (
unsigned state : statesUseless ) {
186 size_t statesNow =
automaton.getStates ( ).size ( );
187 for (
unsigned duplicate = 0; duplicate < statesDuplicates; ++ duplicate ) {
188 automaton.addState ( statesNow + duplicate );
191 duplicates [ a ].push_back ( statesNow + duplicate );
195 return automaton.addFinalState ( state );
196 }, statesFinal, statesMinimal, statesUnreachable, duplicates );
199 automaton.addInitialState ( initialState );
201 return automaton.addInitialState ( state );
202 }, statesInitial - 1, statesMinimal, statesUseless, duplicates );
206 unused.
erase ( std::find ( unused.
begin ( ), unused.
end ( ), initialState ) );
208 while (
visited.size ( ) != statesMinimal.size ( ) ) {
218 visited.push_back ( unused [ b ] );
222 makeRelation (
automaton,
alphabet, statesMinimal, statesMinimal, duplicates, density, deterministic );
223 makeRelation (
automaton,
alphabet, statesUnreachable, statesUnreachable, duplicates, density, deterministic );
224 makeRelation (
automaton,
alphabet, statesUseless, statesUseless, duplicates, density, deterministic );
226 if ( ! statesUnreachable.empty ( ) && ! statesUseless.empty ( ) )
227 makeRelationElement (
automaton,
alphabet, statesUnreachable, statesUseless, duplicates, deterministic );
229 makeRelation (
automaton,
alphabet, statesMinimal, statesUseless, duplicates, density, deterministic );
230 makeRelation (
automaton,
alphabet, statesUnreachable, statesMinimal, duplicates, density, deterministic );
231 makeRelation (
automaton,
alphabet, statesUnreachable, statesUseless, duplicates, density, deterministic );
Nondeterministic finite automaton with multiple initial states. Accepts regular languages.
Definition: MultiInitialStateNFA.h:69
Definition: RandomAutomatonFactory3.h:22
static automaton::MultiInitialStateNFA< SymbolType, unsigned > generate(size_t statesMinimal, size_t statesDuplicates, size_t statesUnreachable, size_t statesUseless, size_t initialStates, size_t finalStates, ext::set< SymbolType > alphabet, double density, bool deterministic)
Definition: RandomAutomatonFactory3.h:43
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
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
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
auto begin() &
Inherited behavior of begin for non-const instance.
Definition: vector.hpp:125
iterator erase(iterator pos)
Removes element from the container at position given by parameter pos.
Definition: vector.hpp:323
auto end() &
Inherited behavior of end for non-const instance.
Definition: vector.hpp:155
Definition: BarSymbol.cpp:12
void callbackOnRandom(Callback callback, size_t states, const ext::vector< unsigned > &set1, const ext::vector< unsigned > &set2, const ext::deque< ext::vector< unsigned > > &duplicates)
Definition: RandomAutomatonFactory3.h:140
int i
Definition: AllEpsilonClosure.h:118
typename T::SymbolType SymbolType
Definition: ReachableStates.h:176
return res
Definition: MinimizeByPartitioning.h:145
Definition: ToGrammar.h:31
int callback(struct dl_phdr_info *info, size_t, void *data)
Definition: simpleStacktrace.cpp:25
SliceComp< Ts ... > slice_comp(const Ts &... inst)
Definition: functional.hpp:95
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
auto begin(Container &&cont) -> decltype(std::forward(cont).begin())
Definition: iterator.hpp:900
void end()
Definition: measurements.cpp:19