Эквивалентность состояний ДКА — различия между версиями
(→Проверка через минимизацию) |
(→Проверка через BFS) |
||
Строка 39: | Строка 39: | ||
=== Проверка через BFS === | === Проверка через BFS === | ||
+ | Алгоритм заключается в синхронном обходе автоматов в ширину, проверяя, что по пути сохраняются терминальные состояния. | ||
+ | |||
+ | Псевдокод: | ||
+ | bfs() | ||
+ | queue.push( <0, 0> ); | ||
+ | used1[0] = used2[0] = true; | ||
+ | while( !q.isEmpty() ) | ||
+ | u = q.front.first; | ||
+ | v = q.front.second; | ||
+ | q.pop(); | ||
+ | if(isTerminal1[u] != isTerminal2[v]) | ||
+ | return false; | ||
+ | for(i = a..z) | ||
+ | if(!used1[automata1[u][i]] || !used2[automata2[v][i]]) | ||
+ | q.push(make_pair(automata1[u][i], automata2[v][i])); | ||
+ | used1[automata1[u][i]] = used2[automata2[v][i]] = true; | ||
+ | return true; |
Версия 12:34, 18 октября 2014
Определение: |
Два автомата | и называются эквивалентными, если они распознают один и тот же язык над алфавитом , то есть .
Определение: |
Слово различает два состояния и , если
|
Определение: |
Два состояния строки, которая их различает, то есть верно, что
| и называются эквивалентными , если не существует
Заметим, что эквивалентность состояний действительно является отношением эквивалентности. Так как (равносильность) является отношением эквивалентности и в детерминированном автомате всегда существует путь по любому слову, описанное нами отношение является отношением эквивалентности.
Лемма: |
, , , различает и . Тогда различает и . |
Доказательство: |
А значит, по условию различимости для и , |
Содержание
Пример
Эти два автомата принимают слова из языка слов длины не меньше одного, состоящих из символов алфавита
. Стартовые и все допускающие состояния автоматов эквивалентны между собой.Проверка ДКА на эквивалентность
Заданы два автомата:
со стартовым состоянием и со стартовым состоянием соответственно. Нужно проверить их на эквивалентность.Проверка через минимизацию
Для этого построим автомат
Осталось лишь проверить на эквивалентность состояния и в полученном автомате. Их эквивалентность совпадает с эквивалентностью автоматов и . Для этого можно применить алгоритм минимизации ДКА, который разбивает все состояния на классы эквивалентности. Если состояния и нового автомата в одном классе эквивалентности - исходные автоматы эквивалентны.
Проверка через BFS
Алгоритм заключается в синхронном обходе автоматов в ширину, проверяя, что по пути сохраняются терминальные состояния.
Псевдокод:
bfs() queue.push( <0, 0> ); used1[0] = used2[0] = true; while( !q.isEmpty() ) u = q.front.first; v = q.front.second; q.pop(); if(isTerminal1[u] != isTerminal2[v]) return false; for(i = a..z) if(!used1[automata1[u][i]] || !used2[automata2[v][i]]) q.push(make_pair(automata1[u][i], automata2[v][i])); used1[automata1[u][i]] = used2[automata2[v][i]] = true; return true;