簡體   English   中英

如何構造有限自動機

[英]How can I construct finite automata

我必須創建一個確定性有限自動機,接受偶數為 1 並以 0 結尾的字符串集。我應該將 0 作為該集合中的字符串包含在內嗎? 我該怎么做?

我應該包含0作為這個集合中的字符串嗎?

是的

我該怎么做?

要構造有限自動機,您需要識別狀態和轉移。 如果您能夠識別“不可區分”字符串的等價類,Myhill-Nerode 定理允許您找到有限自動機的必要(和充分)狀態。

兩個字符串xy是無法區分的,從這個意義上說,如果對於任何其他字符串zxzyz都在該語言中,或者兩者都不是。

在您的情況下,讓我們嘗試識別等價類。 空字符串與 class 等價。 字符串0在不同的等效 class 中,因為您可以將空字符串添加到0並獲取該語言的字符串(而您不能將空字符串添加到空字符串以獲取該語言的字符串)。 到目前為止,我們已經找到了兩個不同的等價類 - 一個用於空字符串,一個用於0 在我們的 FA 中,這兩者都需要不同的狀態。

那么字符串1呢? 它可以與0和空字符串區分開來,因為您可以將10添加到1以獲得110 ,該語言中的字符串,但您不能將其添加到0或空字符串以獲取該語言中的字符串。 所以我們還有另一個 state。

那么字符串00呢? 該字符串不在該語言中,並且不能將其他字符串添加到該字符串中以獲得該語言的字符串。 這是另一個等價的 class。 事實證明,接下來的字符串0110也在這個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM