某带 ε 转移的 NFA 初始状态为 q0,且从 q0 可经 ε 转移到 q1,从 q1 又可经 ε 转移到 q2,除此之外没有新的 ε 转移。使用子集构造法转换为 DFA 时,DFA 的初始状态应为()。
子集构造法首先求 NFA 初始状态的 ε-closure。它包含 q0 本身,也包含从 q0 只经过 ε 转移能够到达的 q1,以及继续从 q1 经 ε 到达的 q2。因此 DFA 初始状态是集合 {q0,q1,q2}。
选项分析
错误。忽略了从 q0 出发不消耗输入即可到达的 q1、q2。
错误。ε-closure 除了后续可达状态,也必须包含起始集合自身的 q0。
正确。q0、q1、q2 都属于 ε-closure({q0})。
错误。DFA 的一个状态通常对应 NFA 状态的一个子集,不能只取 ε 链末端。
本题为什么容易错
ε 转移不读取输入,但不代表可以忽略。它恰恰决定了“当前可能同时在哪些 NFA 状态”,漏掉任何一个状态都会让后续 move 计算丢失路径。
简短答案
子集构造法中,DFA 的初始状态怎么确定,正确答案是 C({q0,q1,q2})。子集构造法首先求 NFA 初始状态的 ε-closure。它包含 q0 本身,也包含从 q0 只经过 ε 转移能够到达的 q1,以及继续从 q1 经 ε 到达的 q2。因此 DFA 初始状态是集合 {q0,q1,q2}。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| {q0} | 本题干扰项 | 错误。忽略了从 q0 出发不消耗输入即可到达的 q1、q2。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| {q1,q2} | 本题干扰项 | 错误。ε-closure 除了后续可达状态,也必须包含起始集合自身的 q0。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| {q0,q1,q2} | 本题正确答案 | 正确。q0、q1、q2 都属于 ε-closure({q0})。 | 看到题干核心场景时优先联想到它 |
| q2 | 本题干扰项 | 错误。DFA 的一个状态通常对应 NFA 状态的一个子集,不能只取 ε 链末端。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- {q0}:错误。忽略了从 q0 出发不消耗输入即可到达的 q1、q2。
- {q1,q2}:错误。ε-closure 除了后续可达状态,也必须包含起始集合自身的 q0。
- q2:错误。DFA 的一个状态通常对应 NFA 状态的一个子集,不能只取 ε 链末端。
知识点详解
NFA 的同一输入可能有多个后继状态,还可能通过 ε 转移在不消耗输入的情况下改变状态。子集构造法用一个 DFA 状态表示一组 NFA 可能状态。初始集合为 ε-closure({q0})。对 DFA 状态集合 T 和输入符号 a,先计算 move(T,a),再对结果求 ε-closure,得到新的 DFA 状态。只要某个子集中包含 NFA 的接受状态,该 DFA 子集状态就是接受状态。
备考速记
DFA 初态先做 ε 闭包;后续转移先 move,再闭包。
NFA转DFA 在子集构造法场景中的作用
NFA转DFA在本题中的核心价值,是解决“某带 ε 转移的 NFA 初始状态为 q0,且从 q0 可经 ε 转移到 q1,从 q1 又可经 ε 转移到 q2,除此之外没有新的 ε 转移。使用子集构造法转换为 DFA 时,DFA 的初始状态应为()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 根据 ε 转移图求 DFA 初始状态。
- 给出某个 DFA 状态集合和输入符号,计算下一个状态集合。
- 判断哪些 DFA 子集状态应为接受状态。
NFA转DFA 在软件设计师软考中的考法
软考选择题通常不会只考概念定义,还会把NFA转DFA放到子集构造法场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
子集构造法的第一张清单要写完整。站在 q0,哪怕一个输入字符都不读,也能沿 ε 路走到 q1、q2,所以 DFA 在读取第一个字符前就可能处于这三个 NFA 状态中的任意一个。DFA 用一个集合把这三种可能性打包起来。
考点定位
带 ε 转移的 NFA 转换为 DFA 时,初始状态为 ε-closure({q0});后续每次状态转移也要先 move,再对结果求 ε-closure。
易错提醒
- 把 DFA 初态直接写成 NFA 的单个初态 q0。
- 求 ε-closure 时只走一步,没有继续沿 ε 转移传递闭包。
- 忘记 ε-closure 必须包含原状态集合本身。
备考提示
- 每个 DFA 状态都写成花括号集合,避免与原 NFA 单状态混淆。
- 后续转移固定采用“先 move(T,a),再 ε-closure”的顺序。
你可能还想了解
- ε-closure 为什么要包含状态本身?
- NFA 转 DFA 为什么把状态写成集合?
- 子集构造法中 move 和 ε-closure 的顺序是什么?
- 转换后的 DFA 哪些状态属于接受状态?
本文小结
DFA 初态应取 NFA 初态的 ε-closure。q0 不读输入即可依次到达 q1、q2,所以 ε-closure({q0})={q0,q1,q2},答案为 C。