有人能比我简洁地向 SO 社区描述 NFA 到 DFA 的转换算法吗?(最好是 500 字或更少。)我看到的图表和讲座只会混淆我以为我曾经知道的东西。我最有信心从状态图中生成初始 NFA 转换表,但在那之后,我失去了 epsilons 和子集中的 DFA。
1) 在转换(delta)表中,哪一列代表新的 DFA 状态?它是生成状态的第一列吗?
2) 在我下面示例的第 {2,3} 行第 0 列中,就 NFA 的状态图而言,{2,3} 是什么意思?(对不起,我必须在图片中思考。)我认为这将是 DFA 中的“输入 0 环回”?
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" ];
}
在这里呈现形式:
注意:该表缺少有关州接受度的任何信息,因此图表也是如此。