From f7b1a076a2f6acc843b8cea53fa88fbc1394d773 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Thu, 29 Mar 2018 16:39:24 +0200 Subject: [PATCH] optimize tree pattern pdas --- .../src/arbology/exact/ExactNonlinearTreePatternAutomaton.h | 3 ++- alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.h b/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.h index 0126575f87..290c38efde 100644 --- a/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.h +++ b/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.h @@ -250,7 +250,6 @@ automaton::InputDrivenNPDA < common::ranked_symbol < SymbolType, RankType >, cha res.addState ( currentState ); res.addTransition ( previousState, symbol, currentState ); - res.addTransition ( res.getInitialState ( ), symbol, currentState ); if ( tree.getBars ( ).count ( symbol ) ) { ext::pair < unsigned, unsigned > source = ext::make_pair ( subtreeJumps.back ( ), 0u ); @@ -286,6 +285,8 @@ automaton::InputDrivenNPDA < common::ranked_symbol < SymbolType, RankType >, cha } else { subtreeJumps.push_back ( i - 1 ); subtreeRepeatsStack.push_back ( subtreeRepeatsIter->getSymbol ( ) ); + + res.addTransition ( res.getInitialState ( ), symbol, currentState ); } } diff --git a/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h b/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h index 2a1fd32b28..4285ab7357 100644 --- a/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h +++ b/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h @@ -63,7 +63,6 @@ automaton::InputDrivenNPDA < common::ranked_symbol < SymbolType, RankType >, cha for ( const common::ranked_symbol < SymbolType, RankType > & symbol : tree.getContent ( ) ) { res.addState ( i ); res.addTransition ( i - 1, symbol, i ); - res.addTransition ( 0, symbol, i ); if ( tree.getBars ( ).count ( symbol ) ) { unsigned source = subtreeJumps.back ( ); @@ -73,6 +72,8 @@ automaton::InputDrivenNPDA < common::ranked_symbol < SymbolType, RankType >, cha res.addTransition ( source, subtreeWildcard, ~0 - i ); res.addTransition ( ~0 - i, variablesBar, i ); } else { + res.addTransition ( res.getInitialState ( ), symbol, i ); // transition from the initial state only allowed for nonbar symbols + subtreeJumps.push_back ( i - 1 ); } -- GitLab