先决条件——设计有限自动机
反转:反转语言意味着反转语言中的每个字符串。
逆转的步骤:
- 按原样绘制状态。
- 将最终状态作为初始状态,将初始状态作为最终状态
- 反转边缘
- 循环将保持不变
- 删除不适当的过渡状态。
笔记 :
1. 并非 DFA 的每次逆转都会导致 DFA
2. 反转过程是这样的:
让我们借助以下示例了解确定性有限自动机 (DFA) 中的反转过程。
示例 1:
为 {a, b} 上的字符串集设计 DFA,使得语言开始符号 ‘a’ 的字符串。将形成所需的语言:
L1 = {a, aa, ab, aab, aaabb, aabab, .......}
在 L1 中,每个字符串都有起始元素 a。语言 L1 的状态转换图:
此 DFA 接受所有以 a 开头的字符串。这里,状态 A 和 C 是正常状态,但状态 B 是最终状态。现在,反转 L1 语言,得到语言 L2 的最终结果。
L2的状态转换图(L1的反转):
因此,正如我们看到的,L2 是通过反转过程获得的,并且这个最终的 NFA 接受所有包含以符号“a”结尾的字符串的语言。
l = {a, ba, bba, ababa, ......}
解释:
- 绘制与原始状态图中相同的状态(A、B、C)
- 由于 A 是初始状态,因此将其作为最终状态。
- 由于 B 是最终状态,因此将其作为初始状态。
- 反转边缘,因为以前的边缘指向 A 到 B 和 A 到 C。改变方向,现在边缘指向 B 到 A 和 C 到 A。
- 分配与原始值相同的值。
- 按照原始状态图绘制循环
- 由于状态 C 上没有入射边,所以我们可以减少这个状态 C。
- 由于状态 A 中的 ‘a’ 和 ‘b’ 没有转换。因此结果 FA 是 NFA。
示例 2:
为 {a, b} 上的字符串集设计 DFA,使得语言的字符串包含偶数个 ‘a’。将形成所需的语言:
L1 = { ,aa,aab,aba,aab,aababa,……}
在 L1 中,每个字符串具有偶数个元素 a。
语言 L1 的状态转换图:
这个 DFA 接受所有包含偶数个元素 a 的字符串。这里,状态 A 是初始状态,状态 A 是最终状态。现在,反转 L1 语言,得到语言 L2 的最终结果。
L2的状态转换图(L1的反转):
因此,正如我们看到的,L2 是通过逆向过程获得的,这个最终的 DFA 接受所有包含偶数个元素 a 的字符串,这与原始语言相同。
L2 = { ,aa,aab,aba,aab,aababa,……}
解释:
- 绘制与原始状态图中相同的状态 (A, B)。
- 由于 A 是初始状态,因此将其作为最终状态。
- 由于 A 是最终状态,因此将其作为初始状态。
- 反转边缘,因为以前的边缘指向 A 到 B 等等。改变方向,现在边缘指向 B 到 A 等等。
- 分配与原始值相同的值。
- 由于在状态 A 和 B 中存在 ‘a’ 和 ‘b’ 的转换。因此产生的 FA 是 DFA。
- 由于反转前后的状态图相同,因此L1 = L2