簡體   English   中英

找到DFA的補充?

[英]Finding the complement of a DFA?

我被要求顯示DFA圖和RegEx作為RegEx (00 + 1)*的補充。 在之前的問題中,我必須證明DFA的補充是封閉的並且也是正則表達式,所以我知道要將DFA,M轉換為補碼,M`,我只需要交換初始接受狀態和最終接受國家。

但是,似乎RegEx的初始接受狀態是{00, 1, ^} 00,1 {00, 1, ^} ,最終接受狀態也是{00, 1, ^} 因此,交換它們只會產生完全相同的RegEx和DFA,這似乎是相互矛盾的。

我做錯了什么,或者這個RegEx應該沒有真正的補充?

謝謝

正如你所說的那樣:

我知道要將DFA,M轉換為補碼,M`,我只需要交換初始接受狀態和最終接受狀態。

不是補充 ,但你正在做一些像 語言的逆轉常規語言的逆轉

撤銷DFA

什么是逆轉語言?

語言L(表示為L R )的逆轉是由L中所有字符串的反轉組成的語言。

鑒於某些FA A的L是L(A),我們可以為L R構造一個自動機:

  • 反轉轉換圖中的所有邊(弧)

  • L R自動機的接受狀態是A的開始狀態

  • 為新自動機創建一個新的開始狀態,epsilon轉換為A的每個接受狀態

注意 :通過反轉其所有箭頭並交換DFA的初始和接受狀態的角色,您可能會獲得NFA。
這就是我寫FA(不是DFA)的原因

補充DFA

找到DFA的補充?

Defination:語言的補語是根據與Σ*(sigma star)的集合差異來定義的。 那是L '* - L.

並且L的補語(L ' )具有來自Σ*(sigma star)的所有字符串,除了L.Σ*中的字符串是字母表Σ上的所有可能的字符串。
Σ=語言符號集

要構造接受L的補碼的DFA D,只需將A中的每個接受狀態轉換為D中的非接受狀態,並將A中的每個非接受狀態轉換為D中的接受狀態。
警告!對於NFA來說不是這樣

A是L的DFA,D是補體

注意 :要構建補充DFA,舊的DFA必須是一個完整的手段,應該從每個狀態都可能出現邊緣(或者換句話說, δ應該是一個完整的函數 )。

補充:參考例子

正則表達式的補充DFA (00+1)*

以下是名為A的 DFA:

00 + 1

但是這個DFA不是完整的DFA。 過渡函數δ是部分定義的,但不適用於全域Q×Σ從標簽1 q1中錯過了邊緣 )。

其完整的DFA可以如下( A ):

completeDFA

在上面的DFA中,定義了所有可能的事務(*對於每對Q,Σ *),在這種情況下δ是一個完整的函數。

Reff:了解什么是部分功能。

可以通過將所有最終狀態q0改變為非最終狀態來構造新補碼DFA D,反之亦然。

因此在補充q0變為非最終和q1, q2是最終狀態。

補充

現在,您可以使用ARDEN'S THEOREM和我給出的DFA為補充語言編寫正則表達式。

在這里,我直接寫補充正則表達式:

(00 + 1)* 0 (^ + 1(1 + 0)*)

其中^是空符號。

一些有用的鏈接
這里開始 ,通過我的個人資料,您可以在FA上找到更多有用的答案。 另外,關於常規語言屬性的兩個很好的鏈接:

我沒有花時間閱讀Grijesh的所有答案,但這是讓DFA接受語言補充的簡單方法,因為DFA接受語言:使用相同的DFA,但將接受狀態更改為不接受,反之亦然。

之前接受的字符串將被拒絕,之前拒絕的字符串將被接受。 由於必須在任何有效的DFA中定義所有轉換,並且由於所有輸入字符串都只導致一個狀態,因此這始終有效。

要獲得反轉的DFA,您可以首先通過添加一個新的初始狀態來構造NFA,該狀態非確定性地分支到原始DFA的所有接受狀態。 反轉原始DFA的所有轉換,並使唯一的接受狀態為原始DFA的初始狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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