-
- Downloads
algo: Fix AutomataConcatenation when first automaton has a word of len 1
The algorithm, taken from BI-AAG course @ FIT CTU did not work correctly when first automaton accepts a word of length 1. There are two bugs. First, the set of final states was wrong. This was the easy part to spot. Second, we sometimes miss some transitions. Consider these two automata: DFA a b ><A B - <B - - DFA a b ><C - - The algorithm would result in this: DFA a b ><S B C A B|C - B - - <C - C Which is of course wrong because the first automaton accepts "a + #E" and the second one accepts a language of "b*". However, the result doesn't accept words from neither "a" nor "ab*" which is in language "(a+#E)b*". The problem is that for every transition in the first automaton that leads to a final state we create a new transition to an initial state of the second automaton. This effectively says that "ok, we are done with first automaton, we would accept. Let's continue from the initial state of the second automaton". Also, when we create a new initial state, we *only* copy transitions from both initial states there. But if the word is of length 1 and is to be accepted by the first automaton, we are missing this "transition to second automaton". In our example above, we need to add a transition (S, a) -> C and it's fine.
Showing
- alib2algo/src/automaton/transform/AutomataConcatenation.h 7 additions, 2 deletionsalib2algo/src/automaton/transform/AutomataConcatenation.h
- alib2algo/test-src/automaton/transform/AutomataConcatenationTest.cpp 37 additions, 0 deletions...est-src/automaton/transform/AutomataConcatenationTest.cpp
- tests/aql/AutomataConcatenation.aql 22 additions, 0 deletionstests/aql/AutomataConcatenation.aql
tests/aql/AutomataConcatenation.aql
0 → 100644
Please register or sign in to comment