Может ли кто-нибудь намного ярче, чем я кратко описать SO-сообществу алгоритм преобразования NFA в DFA? (Желательно в 500 слов или меньше.) Я видел диаграммы и лекции, которые только путали то, что, как я думал, я когда-то знал. Я в основном уверен в создании начальной таблицы перехода NFA из диаграммы состояния, но после этого я теряю DFA в эпсилон и подмножества.
1) В таблице перехода (дельта), в каком столбце представлены новые состояния DFA? Это первый столбец сгенерированных состояний?
2) В строке {2,3}, col 0 моего примера ниже, что означает {2,3} в отношении NFA по диаграмме состояния? (Извините, я должен думать на фотографиях.) И я предполагаю, что это будет "обратная связь на входе 0" в DFA?
3) Любые простые "эмпирические правила" при получении из таблицы в DFA или распознавание состояний принятия результирующего DFA?
Конечно-автономный
delta | 0 | 1 |
=======+=======+========+
{1} |{1} |{2} |
{2} |{3} |{2,3} |
{3} |{2} |{2,4} |
{2,3} |{2,3} |{2,3,4} |
{2,4} |{3,4} |{2,3,4} |
{2,3,4}|{2,3,4}|{2,3,4} |
{3,4} |{2,4} |{2,4} |
Изменить: Вот приведенная выше таблица в формат точки, приветствует Regexident.
digraph dfa {
rankdir = LR;
size = "8,5"
/* node [shape = doublecircle]; "1";*/
node [shape = circle];
"1" -> "1" [ label = "0" ];
"1" -> "2" [ label = "1" ];
"2" -> "3" [ label = "0" ];
"2" -> "2_3" [ label = "1" ];
"3" -> "2" [ label = "0" ];
"3" -> "2_4" [ label = "1" ];
"2_3" -> "2_3" [ label = "0" ];
"2_3" -> "2_3_4" [ label = "1" ];
"2_4" -> "2_3" [ label = "0" ];
"2_4" -> "2_3_4" [ label = "1" ];
"2_3_4" -> "2_3_4" [ label = "0" ];
"2_3_4" -> "2_3_4" [ label = "1" ];
"3_4" -> "2_4" [ label = "0" ];
"3_4" -> "2_4" [ label = "1" ];
}
И здесь в визуализированной форме:
Примечание: В таблице отсутствует какая-либо информация о принятии государства, поэтому так же отображается график.