簡體   English   中英

將DFA排除為正則表達式

[英]State Elimination DFA to Regular Expression

關於狀態消除和術語,我有幾個問題。

在此處輸入圖片說明

在上面的示例中,DFA處於接受狀態,您必須以符號0開頭並以1結尾。

如果我將其轉換為正則表達式,則上限為 在此處輸入圖片說明

而底部將是 在此處輸入圖片說明

這是我的問題,我不知道如何在單個表達式上添加頂部和底部。 我也不完全確定如何進一步消除q2符號1。

會是0(0 *(0 + 1))1 *嗎?

感謝任何可以幫助您的人!

有一種更廣為人知且可理解的算法可以完成此任務。

要將DFA G轉換為正則表達式,我們首先將G轉換為“ GNFA”。 假設G是以下DFA(q是開始狀態):

在此處輸入圖片說明

將DFA轉換為GNFA的過程如下:

  1. 將帶有epsilon過渡的新啟動狀態添加到原始啟動狀態。
  2. 添加新的接受狀態,添加從每個原始接受狀態到新添加的接受狀態的epsilon轉換,然后使所有原始接受狀態變為正常狀態。

這是生成的GNFA:

在此處輸入圖片說明

然后,我們一次刪除介於新的開始狀態和新的接受狀態之間的每個狀態,並調整圖表以保持正確性。 該過程的工作方式如下:令x,y和z為DFA中的狀態。 另外,轉換如下:輸入a上的x-> y,輸入b上的y-> y和輸入c上的y-> z。 假設我們要刪除y。 對於從某個節點n到y的每個過渡以及從y到m的每個過渡,我們必須添加一個新的過渡n-> m。 從n到m的過渡將是從n到y的過渡的內容,然后是帶有kleene星的過渡y-> y的內容,然后是從y-> m的過渡的內容。 在這種情況下,a上的x-> y,b上的y-> y和c上的y-> z,在刪除狀態y之后, a(b*)ca(b*)c x-> z會發生轉變。


在圖像中考慮我們的DFA。 刪除狀態q后,我們得到: 在此處輸入圖片說明

刪除狀態r后,我們得到: 在此處輸入圖片說明

最后,在刪除狀態s之后,我們得到: 在此處輸入圖片說明

這是我們完整的正則表達式。 使用此過程可以完全避免您面臨的任何問題。 但是,我也會為您提供直接答案。 對於初學者來說,上面的部分不是您建議的。 相反,它將變為: 在此處輸入圖片說明 簡化為: 在此處輸入圖片說明 這是我們最終的正則表達式,因為底部沒有接受狀態,因此無關緊要。

您從(q0)狀態開始,如果u輸入(0),則可以到達最終狀態; 相反,如果u輸入(1),則無法到達final。 因此,僅考慮狀態(q0)(q1)(q2),並對這些狀態應用消除規則

消除后,RE將如下

0(0)*1 . (1+0(0)*1)*

從0開始到1結束

暫無
暫無

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

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