編譯原理學習筆記(十五)~最小化DFA

概念

        最小化:優化DFA,使其狀態數最少。

        那麼什麼時候狀態數是最少的呢?這裏我們需要介紹兩個新的名詞:可區分不可區分

官方定義
        可區分:對於任何兩個狀態t和s,若從一狀態出發接受輸入字符串ω,而從另一狀態出發不接受ω,或者從t出發和從s出發到達不同的接受狀態,則稱ω對狀態t和s是可區分的。
        不可區分:設想任何輸入序列ω對s和t均是不可區分的,則說明從s出發和從t出發,分析任何輸入序列ω均得到相同結果。因此,s和t可以合併成一個狀態
        通俗一點的來說,可區分狀態可以理解爲兩個(或多個)狀態根本不是一類,根據下一個輸入的符號,不同狀態得到的結果可能會出現不同。而不可區分狀態就是,這兩個(或多個)狀態,無論下一個接收的符號是什麼,得到的結果都是一樣的。【定義理解不懂的,可以參考後面的例子思考,應該會容易一點點】
        綜上所述,DFA的最小化就是找出DFA中所有的不可區分狀態,把它們合併爲一個狀態,這樣可以簡化DFA的狀態數,顯得更加簡潔。

舉例說明

下圖是一個沒有最小化的DFA
在這裏插入圖片描述
現在我們對其進行最小化,那麼怎麼辦呢?這裏一般不好一步到位,需要我們慢慢測試【多試試就可以了】。
在這裏插入圖片描述
首先從上面的方法可以看出,我們先加上ABC爲一類,D是一類。然後測試ABC是可區分還是不可區分的。

  • ABC接收a,到達的狀態都是B
  • ABC接收b,到達的狀態是C、D。其中AC接收b到達C,B接收b到達D。

從上的分析可以看出,ABC不是同一類的,屬於可區分,因爲在接收b的時候,出現了分歧。
然後再加上AC是一類,B單獨一類,D單獨一類。

  • AC接收a,到達的狀態都是B
  • AC接收b,到達的狀態都是C

從上面的分析我們可以發現,AC是一類,不可區分,因爲無論輸入a,還是b,它們最終到達的狀態都是一樣的,所以我們可以說它們是不可區分的。在最小化DFA中,AC是可以合併爲一個狀態的。
所以最後的最小化DFA就是:
在這裏插入圖片描述
注:解題沒有固定的格式,需要憑藉自己的理解去猜測,測試到底哪一組是不可區分。慢慢練習,自然就會熟悉的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章