有限自动机(FA)是一种能够识别有限输入序列的计算机自动机。也就是说,根据 FA 自己内部的状态进行计算,接受或拒绝输入序列。有限状态自动机主要分为两类:确定性有限自动机(DFA)和非确定性有限自动机(NFA)。DFA 只在当前状态下根据当前输入符号进行转移,而NFA 却可以在当前状态下进行非确定性转移。本文将从理论和实践两个角度出发,分别探讨将NFA确定化并最小化的例题。
一、理论基础
1. NFA 的确定化
NFA 可以转移到多个状态,这就是非确定性的本质。但是使用 NFA 执行状态变化对计算量和复杂度有很大的影响。因此,我们需要将 NFA 转化为 DFA。具体方法如下:
1.1 使用子集构造法进行 NFA 到 DFA 的转换
子集构造法指的是将 NFA 中的每个状态集合都对应到一个 DFA 状态。对于每一个符号,NFA 中的状态集合可以通过转移表达式转移到另一个状态集合。然后,我们将每个状态标记为“接受”或“拒绝”,具体方法是当 NFA 中的某个状态集合中包含一个接受状态时,对应的 DFA 状态也为接受状态,否则对应的 DFA 状态为拒绝状态。
1.2 子集构造算法的时间复杂度
子集构造算法的时间复杂度是指它所需的时间和输入大小的关系。在这里,输入大小指的是 NFA 状态数量和输入符号数量的乘积。因此,该算法的时间复杂度为 O(2n),其中n是 NFA 状态的数量。
2. DFA 的最小化
DFA 的最小化可以使状态的数量最少,从而降低计算复杂度。
2.1 最小化 DFA 的理论基础
最小化 DFA 的方法通常是使用等价类的概念。等价类是指可以划分为互不相交的状态集合,其中该集合中的状态在某一输入符号下都能够到达相同的状态集合。通过将 DFA 的状态集合划分为不同的等价类,可以实现最小化 DFA 的目的。
2.2 DFA 的最小化算法
DFA 的最小化算法主要有三种方法:Hopcroft、Brzozowski、和 Myhill-Nerode。其中,Hopcroft 算法是最流行的最小化 DFA 算法,并且拥有线性时间复杂度。简单来说,该算法的核心思想是将状态按照接受字符串的前缀划分为若干等价类。经过一系列处理,可以将 DFA 最小化为具有最少状态数的 DFA。
二、实践操作
考虑以下 NFA 示例:

我们将使用子集构造法将其转换为 DFA,然后最小化它。具体步骤如下:
步骤 1:将 NFA 转换为 DFA。
根据子集构造法,我们按以下公式构造 DFA:

步骤 2:将 DFA 最小化。
按照 Hopcroft 算法,首先将 DFA 中的每个状态和 NFA 中的状态对应。然后,我们按照状态转移函数的值将状态分组。这个过程中,我们使用了以下“状态等价”的概念:
一个状态对于一个输入符号的结果和另一个状态一样,当且仅当这两个状态在这个输入符号下是等价的。也就是说,它们接受相同的字符串集合。
对于这个例子中的 DFA,我们得到了以下状态分组:

接下来,我们可以将它们缩小为由更少的状态构成的最小 DFA。结果如下:

扫码领取最新备考资料