Эквивалентность состояний ДКА — различия между версиями
 (→Проверка через BFS)  | 
				|||
| Строка 45: | Строка 45: | ||
Псевдокод:  | Псевдокод:  | ||
  bfs_equivalence_check(aut1, aut2)  |   bfs_equivalence_check(aut1, aut2)  | ||
| − |       '''insert''' <tex>\{  | + |       '''insert''' <tex>\{s1, s2\}</tex> in  <tex>Q </tex>  | 
      used1[0] <tex> \leftarrow </tex> true;  |       used1[0] <tex> \leftarrow </tex> true;  | ||
      used2[0] <tex> \leftarrow </tex> true;  |       used2[0] <tex> \leftarrow </tex> true;  | ||
Версия 13:43, 18 октября 2014
Содержание
Основные определения
| Определение: | 
| Два автомата и называются эквивалентными, если они распознают один и тот же язык над алфавитом , то есть . | 
| Определение: | 
Слово  различает два состояния  и , если 
  | 
| Определение: | 
Два  состояния  и  называются эквивалентными , если не существует строки, которая их различает, то есть   верно, что
  | 
Заметим, что эквивалентность состояний действительно является отношением эквивалентности. Так как  (равносильность) является отношением эквивалентности и в детерминированном автомате всегда существует путь по любому слову, описанное нами отношение является отношением эквивалентности.
| Лемма: | 
, , ,  различает  и . Тогда  различает  и .  | 
| Доказательство: | 
| 
 А значит, по условию различимости для и ,  | 
Пример
Эти два автомата принимают слова из языка слов длины не меньше одного, состоящих из символов алфавита . Стартовые и все допускающие состояния автоматов эквивалентны между собой.
Проверка ДКА на эквивалентность
Заданы два автомата: со стартовым состоянием и со стартовым состоянием соответственно. Нужно проверить их на эквивалентность.
Проверка через минимизацию
Для этого построим автомат , содержащий все состояния обоих автоматов и изначальные переходы между ними. Стартовым состоянием в новом автомате можно сделать  или  — это не имеет значения. (При этом состояния одного из автоматов станут недостижимыми из новый стартовой вершины в новом автомате, но для алгоритма это и не важно.)
![]()
Осталось лишь проверить на эквивалентность состояния  и  в полученном автомате. Их эквивалентность совпадает с эквивалентностью автоматов  и . Для этого можно применить алгоритм минимизации ДКА, который разбивает все состояния на классы эквивалентности. Если состояния  и  нового автомата в одном классе эквивалентности - исходные автоматы эквивалентны.
Проверка через BFS
Алгоритм заключается в синхронном обходе автоматов в ширину, проверяя, что по пути сохраняются терминальные состояния.
Псевдокод:
bfs_equivalence_check(aut1, aut2)
    insert  in  
    used1[0]  true;
    used2[0]  true;
    while   
        u  Q.front.first;
        v  Q.front.second;
        pop(Q);
        if(isTerminal1[u] != isTerminal2[v])
            return false;
        for 
            if(!used1[aut1[u][i]] || !used2[aut2[v][i]])
                insert aut1[u][i], aut2[v][i] in 
                used1[aut1[u][i]]  true;
                used2[aut2[v][i]]  true;
    return true;
Замечание: в данной реализации оба автомата обязательно должны иметь дьявольские состояния.
Источники информации
equivalence between two automata
См. также
Минимизация_ДКА,_алгоритм_за_O(n^2)_с_построением_пар_различимых_состояний