📜  最小化 DFA

📅  最后修改于: 2022-05-13 02:24:08.027000             🧑  作者: Mango

最小化 DFA

DFA 最小化表示将给定的 DFA 转换为具有最少状态数的等效 DFA。

最小化 DFA
假设有一个识别语言 L 的 DFA D < Q, Σ, q0, δ, F >。那么可以为语言 L 构造最小化的 DFA D < Q', Σ, q0, δ', F' > 为:
第 1 步:我们将 Q(状态集)分为两组。一组将包含所有最终状态,另一组将包含非最终状态。该分区称为 P 0
第 2 步:初始化 k = 1
第 3 步:通过划分 P k-1的不同集合来找到 P k 。在每组 P k-1中,我们将采用所有可能的状态对。如果一个集合的两个状态是可区分的,我们会将这些集合拆分为 P k中的不同集合。
第 4 步:当 P k = P k-1时停止(分区没有变化)
步骤 5:将一组的所有状态合并为一个。最小化 DFA 中的状态数将等于 no。 P k中的集合。

如何判断分区 P k中的两个状态是否可区分?
如果对于任何输入符号 a、δ (qi, a ) 和 δ (qj, a ) 在分区 P k-1中的不同集合中,则两个状态 (qi, qj ) 在分区 P k中是可区分的。
例子
考虑如下图所示的 DFA。

图。1

步骤 1. P0 将有两组状态。一组将包含 q1、q2、q4,它们是 DFA 的最终状态,另一组将包含剩余状态。所以 P0 = { { q1, q2, q4 }, { q0, q3, q5 } }。
步骤 2.要计算 P1,我们将检查分区 P0 的集合是否可以分区:

i) 对于集合 { q1, q2, q4 } :
δ ( q1, 0 ) = δ ( q2, 0 ) = q2 和 δ ( q1, 1 ) = δ ( q2, 1 ) = q5,所以 q1 和 q2 是不可区分的。
类似地,δ ( q1, 0 ) = δ ( q4, 0 ) = q2 和 δ ( q1, 1 ) = δ ( q4, 1 ) = q5,所以 q1 和 q4 不可区分。
因为,q1 和 q2 不可区分,q1 和 q4 也不可区分,所以 q2 和 q4 不可区分。因此,{ q1, q2, q4 } 集合不会在 P1 中进行分区。

ii) 对于集合 { q0, q3, q5 } :
δ ( q0, 0 ) = q3 和 δ ( q3, 0 ) = q0
δ ( q0, 1) = q1 和 δ( q3, 1 ) = q4
q0 和 q3 在输入符号 0 上的移动分别是 q3 和 q0,它们在分区 P0 中的同一集合中。类似地,输入符号 1 上 q0 和 q3 的移动是 q1 和 q4,它们在分区 P0 中的同一集合中。因此,q0 和 q3 是不可区分的。

δ ( q0, 0 ) = q3 和 δ ( q5, 0 ) = q5 和 δ ( q0, 1 ) = q1 和 δ ( q5, 1 ) = q5
q0 和 q5 在输入符号 1 上的移动分别是 q1 和 q5,它们在分区 P0 中的不同集合中。因此,q0 和 q5 是可区分的。因此,集合 { q0, q3, q5 } 将被划分为 { q0, q3 } 和 { q5 }。所以,
P1 = { { q1, q2, q4 }, { q0, q3}, { q5 } }

要计算 P2,我们将检查分区 P1 的集合是否可以分区:
iii) 对于集合 { q1, q2, q4 } :
δ ( q1, 0 ) = δ ( q2, 0 ) = q2 和 δ ( q1, 1 ) = δ ( q2, 1 ) = q5,所以 q1 和 q2 是不可区分的。
类似地,δ ( q1, 0 ) = δ ( q4, 0 ) = q2 和 δ ( q1, 1 ) = δ ( q4, 1 ) = q5,所以 q1 和 q4 不可区分。
因为,q1 和 q2 不可区分,q1 和 q4 也不可区分,所以 q2 和 q4 不可区分。因此,{ q1, q2, q4 } 集合不会在 P2 中进行分区。

iv) 对于集合 { q0, q3 } :
δ ( q0, 0 ) = q3 和 δ ( q3, 0 ) = q0
δ ( q0, 1 ) = q1 和 δ ( q3, 1 ) = q4
q0 和 q3 在输入符号 0 上的移动分别是 q3 和 q0,它们在分区 P1 中的同一集合中。类似地,输入符号 1 上的 q0 和 q3 的移动是 q1 和 q4,它们在分区 P1 中的同一集合中。因此,q0 和 q3 是不可区分的。

v) 对于集合 { q5 }:
由于我们在这个集合中只有一个状态,所以不能进一步划分。所以,
P2 = { { q1, q2, q4 }, { q0, q3 }, { q5 } }
因为,P1=P2。所以,这是最后的分区。分区 P2 意味着 q1、q2 和 q4 状态合并为一个。类似地,q0 和 q3 合二为一。图 1 的 DFA 对应的最小化 DFA 如图 2 所示:

图2

问题:考虑给定的 DFA。以下哪项是错误的?
1. L(A) 的补码是上下文无关的。
2. L(A) = L ( ( 11 * 0 + 0 ) ( 0 + 1 )* 0* 1* )
3. 对于 A 接受的语言,A 是最小的 DFA。
4. A 接受长度至少为 2 的 { 0, 1 } 上的所有字符串。

例子

A. 仅 1 和 3
B. 仅 2 和 4
C. 仅 2 和 3
D. 仅 3 和 4

解决方案:语句 4 说,它将接受长度至少为 2 的所有字符串。但它接受长度为 1 的 0。因此,4 为假。
陈述 3 说 DFA 是最小的。我们将使用上面讨论的算法进行检查。
P0 = { { q2 }, { q0, q1 } }
P1 = { q2 },{ q0,q1 } }。因为,P0 = P1,所以 P1 是最终的 DFA。 q0 和 q1 可以合并。所以最小 DFA 将有两种状态。因此,陈述 3 也是错误的。
所以正确的选项是(D)。

本文由 Sonal Tuteja 提供。