📅  最后修改于: 2020-11-26 10:08:57             🧑  作者: Mango
输入-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。
步骤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}
如果X和Y是DFA中的两个状态,我们可以将这两个状态区分开来{{X,Y}}。如果存在至少一个字符串S,则两个状态是可区分的,从而δ(X,S)和δ(Y,S)中的一个正在接受而另一个在不接受。因此,当且仅当所有状态都是可区分的时,DFA才最小。
步骤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-
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 1 = P 2 。
简化后的DFA中包含三个状态。减少的DFA如下-
Q | δ(q,0) | δ(q,1) |
---|---|---|
(a, b) | (a, b) | (c,d,e) |
(c,d,e) | (c,d,e) | (f) |
(f) | (f) | (f) |