📜  DFA最小化

📅  最后修改于: 2020-11-26 10:08:57             🧑  作者: Mango


使用Myphill-Nerode定理的DFA最小化

算法

输入-DFA

输出-最小化DFA

步骤1-为未必直接连接的所有成对状态(Q i ,Q j )绘制一张表[最初都未标记]

第2步-考虑到每一种状态对(Q I,Q j)的在DFA,其中Q∈˚F和QĴ∉F或反之亦然,并标记它们。 [这里F是最终状态的集合]

步骤3-重复此步骤,直到我们无法标记状态为止-

如果有一个未标记的对(Q i ,Q j ),请标记对{δ(Q i ,A),δ(Q i ,A)}对以标识某些输入字母。

步骤4-合并所有未标记对(Q i ,Q j ),并使它们在简化的DFA中成为单个状态。

让我们使用算法2最小化如下所示的DFA。

使用Myphill-Nerode定理最小化DFA

步骤1-我们为所有状态对绘制一张表。

a b c d e f
a
b
c
d
e
f

步骤2-我们标记状态对。

a b c d e f
a
b
c
d
e
f

步骤3-我们将尝试通过绿色复选标记标记状态对。如果我们输入1到状态’a’和’f’,它将分别进入状态’c’和’f’。 (c,f)已被标记,因此我们将标记对(a,f)。现在,我们输入1来表示状态’b’和’f’;它将分别进入状态“ d”和“ f”。 (d,f)已被标记,因此我们将标记对(b,f)。

a b c d e f
a
b
c
d
e
f

在第3步之后,我们获得了未标记的状态组合{a,b} {c,d} {c,e} {d,e}。

我们可以将{c,d} {c,e} {d,e}重组为{c,d,e}

因此,我们得到了两个组合状态,分别为− {a,b}和{c,d,e}

因此,最终的最小化DFA将包含三个状态{f},{a,b}和{c,d,e}

DFA还原状态图

使用等价定理的DFA最小化

如果X和Y是DFA中的两个状态,我们可以将这两个状态区分开来{{X,Y}}。如果存在至少一个字符串S,则两个状态是可区分的,从而δ(X,S)和δ(Y,S)中的一个正在接受而另一个在不接受。因此,当且仅当所有状态都是可区分的时,DFA才最小。

算法3

步骤1-将所有状态Q划分为两个分区-最终状态非最终状态,并用P 0表示。在分区中的所有状态均为0等价的。取一个计数器k并将其初始化为0。

步骤2-将k递增1。对于P k中的每个分区,如果可以区分k ,则将P k中的状态分为两个分区。如果存在输入S使得δ(X,S)δ(Y,S)是(k-1)可区分的,则此分区X和Y中的两个状态是k可区分的。

步骤3-如果P k ≠P k-1 ,则重复步骤2,否则转到步骤4。

步骤4-组合k等价集,并使它们成为简化DFA的新状态。

让我们考虑以下DFA-

DFA

q δ(q,0) δ(q,1)
a b c
b a d
c e f
d e f
e e f
f f f

让我们将上述算法应用于上述DFA-

  • P 0 = {(c,d,e),(a,b,f)}
  • P 1 = {(c,d,e),(a,b),(f)}
  • P 2 = {(c,d,e),(a,b),(f)}

因此,P 1 = P 2

简化后的DFA中包含三个状态。减少的DFA如下-

降低DFA

Q δ(q,0) δ(q,1)
(a, b) (a, b) (c,d,e)
(c,d,e) (c,d,e) (f)
(f) (f) (f)