📜  DFA 中的冲销流程

📅  最后修改于: 2021-09-28 09:20:45             🧑  作者: Mango

先决条件——设计有限自动机
反转:反转语言意味着反转语言中的每个字符串。

逆转的步骤:

  1. 按原样绘制状态。
  2. 将最终状态作为初始状态,将初始状态作为最终状态
  3. 反转边缘
  4. 循环将保持不变
  5. 删除不适当的过渡状态。

笔记 :
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 = { \epsilon ,aa,aab,aba,aab,aababa,……}

在 L1 中,每个字符串具有偶数个元素 a。

语言 L1 的状态转换图:

这个 DFA 接受所有包含偶数个元素 a 的字符串。这里,状态 A 是初始状态,状态 A 是最终状态。现在,反转 L1 语言,得到语言 L2 的最终结果。

L2的状态转换图(L1的反转):

因此,正如我们看到的,L2 是通过逆向过程获得的,这个最终的 DFA 接受所有包含偶数个元素 a 的字符串,这与原始语言相同。

L2 = { \epsilon ,aa,aab,aba,aab,aababa,……}

解释:

  • 绘制与原始状态图中相同的状态 (A, B)。
  • 由于 A 是初始状态,因此将其作为最终状态。
  • 由于 A 是最终状态,因此将其作为初始状态。
  • 反转边缘,因为以前的边缘指向 A 到 B 等等。改变方向,现在边缘指向 B 到 A 等等。
  • 分配与原始值相同的值。
  • 由于在状态 A 和 B 中存在 ‘a’ 和 ‘b’ 的转换。因此产生的 FA 是 DFA。
  • 由于反转前后的状态图相同,因此L1 = L2