正規表現からNFAへのDFAへの最も簡単なDFA(C)(完)へ

正規表現からNFAへのDFAへの最も簡単なDFA(c)の

DFA $ \ RIGHTARROW $最も簡単なDFA(ホップクロフトアルゴリズム)

これは、等価クラスに基づくアルゴリズムです。

split(S)
    foreach char c
        if c 能切分 S
            split S into T1, T2, ..., TK
hopcroft()
    split all nodes into N, A(即非接收状态和接收状态)
    while (set is still changing)
        split(N/A)

ここで等価クラス、特定の特徴によれば、口語的に分割された状態です。そのような特定の状態のように、状態を受信して​​、それがクラスに分けることができます。一部の州では、非受信状態、クラスがあります。そして、このような特定の状態として、各クラスには、状態を経て受信機に転送することができる分割し続けることができるかどうかを確認し、いくつかの州では、これら2つの状態が異なっている、分類し続けることができますすることはできません。

例1

受信状態の未受信状態に応じて分割し、Q0別カテゴリ、Q1がQ2 Q3はクラスです。セット(Q1、Q2、Q3)はQ4に収縮するようにBおよびCので、状態Q1 Q2はQ3に区別することができません。

例2

まず、N→{Q0、Q1、Q2、Q4}、{Q3、Q5→}のA.

次いで、Nの文字Eを受信し、各状態のビューの転送点の後、Q2とQ4はAのセットに転送され、Q0とQ1はないので、再分類されている:N1→{Q2、Q4}、{Q0、Q1} N2→ 。

各状態における視点N1と個々の文字を受信した後に転送が、それは不可能で分裂し続けることが見出され、これは設定最も単純な状態の一つです。

N2が電子を発見した文字を受け、それぞれの文字の表示の転送点の後にそれぞれの状態で受信し、q1はN1に移し、Q0ないことができます。N22→N21→{Q1}、{Q0}:だからもう一度N1を分割。

状態の各セットを見て、私たちは、分割され続けることはできません。このとき、最も簡単なDFAに達しました。

おすすめ

転載: www.cnblogs.com/metatronwings/p/11417473.html