因此,我可以采用具有单个起始状态的给定 NFA 并将其转换为等效的 DFA 很容易,但是当涉及具有多个起始状态的 NFA 时,我感到很困惑。
由于 DFA 只能有一个起始状态(如果我是正确的),我怎么知道 NFA 中的两个起始状态中的哪一个成为 DFA 中的唯一起始状态。
作为参考,这是我要转换的 NFA:
N| a | b | c |
____________________________
->0| {0,2} | {0,3} | --- |
*->0| {0} | {0} | {3} |
0| {2} | --- | {2,3} |
* 0| {2} | --- | {3} |
Run Code Online (Sandbox Code Playgroud)
其中: -> = 初始状态,* = 接受状态,--- = 空集,
具有多个起始状态的 NFA 等效于具有附加状态(成为新的单个起始状态)和从该状态到“实际”起始状态的?-edges的 NFA :
N| a | b | c | ? |
----+-------+-------+-------+-------+
0| {0,2} | {0,3} | {} | {} |
* 1| {0} | {0} | {3} | {} |
2| {2} | {} | {2,3} | {} |
* 3| {2} | {} | {3} | {} |
->4| {} | {} | {} | {0,1} |
Run Code Online (Sandbox Code Playgroud)