Skip to content
Snippets Groups Projects
Commit 69bb15f6 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

single nonlinear variable param of random generator of nonlinear ranked patterns

parent c8990d05
No related branches found
No related tags found
No related merge requests found
...@@ -160,15 +160,18 @@ struct Node { ...@@ -160,15 +160,18 @@ struct Node {
} }
} }
   
RankedNode createRankedNonlinearPatternNode ( ) { RankedNode createRankedNonlinearPatternNode ( bool singleNonlinearVariable ) {
if ( rank == 0 ) { if ( rank == 0 ) {
return RankedNode ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::NonlinearVariableSymbol ( symbol ) ), 0 ), { } ); if ( singleNonlinearVariable )
return RankedNode ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::NonlinearVariableSymbol ( alphabet::symbolFrom ( "A" ) ) ), 0 ), { } );
else
return RankedNode ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::NonlinearVariableSymbol ( symbol ) ), 0 ), { } );
} else { } else {
std::vector < std::smart_ptr < RankedNode > > children; std::vector < std::smart_ptr < RankedNode > > children;
Node * nextChild = child; Node * nextChild = child;
   
for ( int i = 0; i < rank; i++ ) { for ( int i = 0; i < rank; i++ ) {
children.emplace_back ( std::make_smart < RankedNode > ( nextChild->createRankedNonlinearPatternNode ( ) ) ); children.emplace_back ( std::make_smart < RankedNode > ( nextChild->createRankedNonlinearPatternNode ( singleNonlinearVariable ) ) );
nextChild = nextChild->right; nextChild = nextChild->right;
} }
   
...@@ -352,7 +355,7 @@ RankedPattern RandomTreeFactory::generateRankedPattern ( int depth, int nodesCou ...@@ -352,7 +355,7 @@ RankedPattern RandomTreeFactory::generateRankedPattern ( int depth, int nodesCou
return tree; return tree;
} }
   
RankedNonlinearPattern RandomTreeFactory::generateRankedNonlinearPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank ) { RankedNonlinearPattern RandomTreeFactory::generateRankedNonlinearPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, bool singleNonlinearVariable, int maxRank ) {
Node * root = generateTreeStructure ( depth, nodesCount, maxRank ); Node * root = generateTreeStructure ( depth, nodesCount, maxRank );
std::map < int, std::vector < char > > rankedAlphabet; std::map < int, std::vector < char > > rankedAlphabet;
   
...@@ -367,13 +370,16 @@ RankedNonlinearPattern RandomTreeFactory::generateRankedNonlinearPattern ( int d ...@@ -367,13 +370,16 @@ RankedNonlinearPattern RandomTreeFactory::generateRankedNonlinearPattern ( int d
for ( char i : it.second ) for ( char i : it.second )
treeRankedAlphabet.insert ( alphabet::RankedSymbol ( i, it.first ) ); treeRankedAlphabet.insert ( alphabet::RankedSymbol ( i, it.first ) );
   
for ( char i : rankedAlphabet [ 0 ] ) if ( singleNonlinearVariable )
nonlinearVariables.insert ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::NonlinearVariableSymbol ( i ) ), 0 ) ); nonlinearVariables.insert ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::NonlinearVariableSymbol ( alphabet::symbolFrom ( "A" ) ) ), 0 ) );
else
for ( char i : rankedAlphabet [ 0 ] )
nonlinearVariables.insert ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::NonlinearVariableSymbol ( i ) ), 0 ) );
   
alphabet::RankedSymbol subtreeWildcard ( alphabet::Symbol ( alphabet::SubtreeWildcardSymbol::SUBTREE_WILDCARD ), 0 ); alphabet::RankedSymbol subtreeWildcard ( alphabet::Symbol ( alphabet::SubtreeWildcardSymbol::SUBTREE_WILDCARD ), 0 );
treeRankedAlphabet.insert ( subtreeWildcard ); treeRankedAlphabet.insert ( subtreeWildcard );
treeRankedAlphabet.insert ( nonlinearVariables.begin ( ), nonlinearVariables.end ( ) ); treeRankedAlphabet.insert ( nonlinearVariables.begin ( ), nonlinearVariables.end ( ) );
RankedNonlinearPattern tree ( std::move ( subtreeWildcard ), nonlinearVariables, treeRankedAlphabet, root->createRankedNonlinearPatternNode ( ) ); RankedNonlinearPattern tree ( std::move ( subtreeWildcard ), nonlinearVariables, treeRankedAlphabet, root->createRankedNonlinearPatternNode ( singleNonlinearVariable ) );
delete root; delete root;
return tree; return tree;
} }
......
...@@ -28,7 +28,7 @@ class RandomTreeFactory { ...@@ -28,7 +28,7 @@ class RandomTreeFactory {
public: public:
static tree::RankedTree generateRankedTree ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX ); static tree::RankedTree generateRankedTree ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX );
static tree::RankedPattern generateRankedPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX ); static tree::RankedPattern generateRankedPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX );
static tree::RankedNonlinearPattern generateRankedNonlinearPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX ); static tree::RankedNonlinearPattern generateRankedNonlinearPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, bool singleNonlinearVariable, int maxRank = INT_MAX );
static tree::UnrankedTree generateUnrankedTree ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX ); static tree::UnrankedTree generateUnrankedTree ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX );
static tree::UnrankedPattern generateUnrankedPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX ); static tree::UnrankedPattern generateUnrankedPattern ( int depth, int nodesCount, int maxAlphabetSize, bool randomizedAlphabet, int maxRank = INT_MAX );
   
......
...@@ -66,7 +66,7 @@ int main ( int argc, char * argv[] ) { ...@@ -66,7 +66,7 @@ int main ( int argc, char * argv[] ) {
TCLAP::ValueArg < int > terminalNodes ( "", "leaves", "Number of tree's/regexp's terminal nodes", false, 5, "integer" ); TCLAP::ValueArg < int > terminalNodes ( "", "leaves", "Number of tree's/regexp's terminal nodes", false, 5, "integer" );
cmd.add ( terminalNodes ); cmd.add ( terminalNodes );
   
TCLAP::ValueArg < int > height ( "", "height", "Height of the tree/regexp", false, 5, "integer" ); TCLAP::ValueArg < int > height ( "", "height", "Height of the tree/regexp", false, 3, "integer" );
cmd.add ( height ); cmd.add ( height );
   
TCLAP::ValueArg < int > length ( "", "length", "Length of the string", false, 5, "integer" ); TCLAP::ValueArg < int > length ( "", "length", "Length of the string", false, 5, "integer" );
...@@ -75,6 +75,9 @@ int main ( int argc, char * argv[] ) { ...@@ -75,6 +75,9 @@ int main ( int argc, char * argv[] ) {
TCLAP::ValueArg < int > maxRank ( "", "rank", "Maximal rank of tree nodes", false, 5, "integer" ); TCLAP::ValueArg < int > maxRank ( "", "rank", "Maximal rank of tree nodes", false, 5, "integer" );
cmd.add ( maxRank ); cmd.add ( maxRank );
   
TCLAP::SwitchArg singleNonlinearVariable ( "", "single_nonlinear_variable", "Generate single nonlinear variable", false );
cmd.add ( singleNonlinearVariable );
TCLAP::ValueArg < std::string > input ( "i", "input", "Input to use in generation", false, "-", "file" ); TCLAP::ValueArg < std::string > input ( "i", "input", "Input to use in generation", false, "-", "file" );
cmd.add ( input ); cmd.add ( input );
   
...@@ -190,7 +193,7 @@ int main ( int argc, char * argv[] ) { ...@@ -190,7 +193,7 @@ int main ( int argc, char * argv[] ) {
} else if ( type.getValue ( ) == "RNP" ) { } else if ( type.getValue ( ) == "RNP" ) {
measurements::start ( "Algorithm", measurements::Type::MAIN ); measurements::start ( "Algorithm", measurements::Type::MAIN );
   
tree::RankedNonlinearPattern res = tree::generate::RandomTreeFactory::generateRankedNonlinearPattern ( height.getValue ( ), nodes.getValue ( ), alphabetSize.getValue ( ), randomizedAlphabet.getValue ( ), maxRank.getValue ( ) ); tree::RankedNonlinearPattern res = tree::generate::RandomTreeFactory::generateRankedNonlinearPattern ( height.getValue ( ), nodes.getValue ( ), alphabetSize.getValue ( ), randomizedAlphabet.getValue ( ), singleNonlinearVariable.getValue ( ), maxRank.getValue ( ) );
   
measurements::end ( ); measurements::end ( );
measurements::start ( "Output write", measurements::Type::AUXILIARY ); measurements::start ( "Output write", measurements::Type::AUXILIARY );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment