[英]Regular Expression to DFA
不,有多種原因:
bab
ab
關於第一點:從q1
開始,我們看到b
,到q2
,看到a
,到q3
,看到b
,再到q4
,這是接受。 我們看到了bab
並接受了它。
關於第二點:從q1
開始,我們看到a
但沒有定義的轉換。 自動機“崩潰”並且無法接受。 因此不接受以a
開頭的字符串,包括ab
。
關於第三點:DFA 通常需要顯示所有狀態和轉換,包括死狀態和永遠不會返回任何接受狀態的轉換。 您不會顯示所有轉換,也不會顯示自動機中的所有狀態。
您可以使用 Myhill-Nerode 定理來確定您的語言的最小 DFA 有多少個狀態。 我們注意到空狀態可以附加空字符串b
或ab
以獲得語言中的字符串; a
可以附加b
; 並且b
可以附加空字符串。 不能將任何內容附加到aa
、 bb
或ba
以獲取語言中的字符串(因此這些是無法區分的); 但ab
可以附加空字符串(因此與b
無法區分)。
如此確定的等價類對應於最小 DFA 中的狀態。 我們的等價類是:
b
這樣的字符串a
字符串aa
這樣的字符串我們注意到b
在語言中,因此第二類將對應於接受狀態。 我們注意到不能將任何內容附加到aa
以獲取語言中的字符串,因此此類對應於 DFA 中的死狀態。 我們通過查看附加新符號將我們置於哪個新等價類來編寫這些狀態之間的轉換:
附加a
將我們置於 (3) 中,因為將a
附加到空字符串給出a
(3) 中的 a。 附加b
將我們置於 (2) 中,因為將b
附加到空字符串會得到位於 (2) 中的b
附加a
將我們置於 (4) 中,因為將a
附加到b
給出了ba
,這與aa
類似,因為它不是語言中任何字符串的前綴。 附加b
,我們通過類似的論點到達(4)。
附加a
我們得到aa
並且在 (4) 中。 附加b
我們得到ab
就像b
所以我們在(2)中。
所有從死狀態的轉換都返回到死狀態; a
和b
都返回到 (4)。
你最終會得到類似的東西:
q1 --a--> q3
| /|
b --b--< a
| / |
vv v
q2 -a,b-> q4 \
^ a,b
\_/
或以表格形式:
q s q'
== = ==
q1 a q3
q1 b q2
q2 a q4
q2 b q4
q3 a q4
q3 b q2
q4 a q4
q4 b q4
您附加的 DFA 錯誤.. 您的 DFA 僅適用於 €,b,bab 但不能接受 ab。 為了讓您的 dfa 接受 ab,還向 q0 添加一個新狀態,它接受 a 並且每當 newstate 作為 b 獲得輸入時,將其發送到最終狀態。 由於它是一個 dfa,因此您不需要將其發送到新狀態(死亡狀態)您的問題的 dfa 在這里:單擊此處查看 dfa
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.