[英]How can I construct finite automata
我必須創建一個確定性有限自動機,接受偶數為 1 並以 0 結尾的字符串集。我應該將 0 作為該集合中的字符串包含在內嗎? 我該怎么做?
我應該包含
0
作為這個集合中的字符串嗎?
是的
我該怎么做?
要構造有限自動機,您需要識別狀態和轉移。 如果您能夠識別“不可區分”字符串的等價類,Myhill-Nerode 定理允許您找到有限自動機的必要(和充分)狀態。
兩個字符串x
和y
是無法區分的,從這個意義上說,如果對於任何其他字符串z
, xz
和yz
都在該語言中,或者兩者都不是。
在您的情況下,讓我們嘗試識別等價類。 空字符串與 class 等價。 字符串0
在不同的等效 class 中,因為您可以將空字符串添加到0
並獲取該語言的字符串(而您不能將空字符串添加到空字符串以獲取該語言的字符串)。 到目前為止,我們已經找到了兩個不同的等價類 - 一個用於空字符串,一個用於0
。 在我們的 FA 中,這兩者都需要不同的狀態。
那么字符串1
呢? 它可以與0
和空字符串區分開來,因為您可以將10
添加到1
以獲得110
,該語言中的字符串,但您不能將其添加到0
或空字符串以獲取該語言中的字符串。 所以我們還有另一個 state。
那么字符串00
呢? 該字符串不在該語言中,並且不能將其他字符串添加到該字符串中以獲得該語言的字符串。 這是另一個等價的 class。 事實證明,接下來的字符串01
和10
也在這個 class 中。
字符串11
最終與空字符串位於相同的 class 中:您可以將語言中的任何字符串添加到11
並獲取該語言中的另一個字符串。 如果您嘗試所有長度為 3 的字符串,您會發現所有這些都已屬於上述類別之一,您可以在此時停止檢查。
所以我們有四種狀態——我們稱它們為[-]
、 [0]
、 [1]
和[00]
。 現在我們找出過渡。
如果在[-]
中得到0
,則需要將 go 更改為[0]
...如果得到1
,則需要將 go 更改為[1]
。 For the rest, just figure out what string you'd get by adding to the canonical one, and which class the resulting string would be in... and go to that state.
給定的問題是構造一個偶數個 1 並以 0 結尾的有限自動機。所以語言的字母表是 {0,1} 這些是語言接受的字符串。 該語言在其最終 state 之前始終由“0”組成,因為它是字符串的結尾,當我們到達字符串中的最后一個“0”時,我們會到達最終的 state。 在將其轉換為有限自動機的正常過程中,我們得到NFA
然后我們需要將 NFA 轉換為 DFA,方法是將 2 個狀態合並為單個狀態並簡化它們。 新的過渡圖
在這里,我們根據特定 state 在給定輸入處達到的狀態繪制了新的轉換圖。 然后通過連接 2 個狀態形成的新狀態 [這里 {q0,q2} state 形成] 這個新的 state {q0,q1} on 0 作為輸入進入自身(因為 0 上的 q0 去 q0 和 0 上的 q2 去 q2 )。
因此,讓我們將這個新的 state {q0,q2} 視為新的 state q2'
所以通過使用Transition state圖我們可以輕松制作所需的DFA
確定性有限自動機上圖是構造的有限自動機,它接受偶數個 1 並以 0 結尾的字符串集合。
q0 - 是初始 state
q2'- 是最終的 state
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.