题目
9.对下面情况给出 DFA及正规表达式:(1)(0,1)上的含有子串[1]010的所有串;(2)l0,1上不含子串010的所有串。
9.对下面情况给出 DFA及正规表达式:
(1){0,1}上的含有子串[1]010的所有串;
(2)l0,1上不含子串010的所有串。
题目解答
答案
(1) 包含子串 "010" 的所有串的 DFA 及正规表达式:
DFA:
状态集合:Q = {q0, q1, q2, q3}
字母表:Σ = {0, 1}
状态转移函数:
δ(q0, 0) = q0
δ(q0, 1) = q1
δ(q1, 0) = q2
δ(q1, 1) = q1
δ(q2, 0) = q0
δ(q2, 1) = q3
δ(q3, 0) = q3
δ(q3, 1) = q3
起始状态:q0
终止状态:F = {q3}
正规表达式:(0|1)010(0|1)
(2) 不包含子串 "010" 的所有串的 DFA 及正规表达式:
DFA:
状态集合:Q = {q0, q1, q2, q3}
字母表:Σ = {0, 1}
状态转移函数:
δ(q0, 0) = q0
δ(q0, 1) = q1
δ(q1, 0) = q0
δ(q1, 1) = q2
δ(q2, 0) = q0
δ(q2, 1) = q3
δ(q3, 0) = q3
δ(q3, 1) = q3
起始状态:q0
终止状态:F = {q0, q1, q2}
正规表达式:(0|1)(1|00|01)
这些 DFA 和正规表达式分别表示了两个条件下的字符串集合。第一个 DFA 接受包含子串 "010" 的字符串,而第二个 DFA 接受不包含子串 "010" 的字符串。正规表达式提供了等效的描述。
解析
步骤 1:构造含有子串 "010" 的所有串的 DFA
- 状态集合:Q = {q0, q1, q2, q3}
- 字母表:Σ = {0, 1}
- 状态转移函数:
- δ(q0, 0) = q0
- δ(q0, 1) = q1
- δ(q1, 0) = q2
- δ(q1, 1) = q1
- δ(q2, 0) = q0
- δ(q2, 1) = q3
- δ(q3, 0) = q3
- δ(q3, 1) = q3
- 起始状态:q0
- 终止状态:F = {q3}
- 正规表达式:(0|1)010(0|1)
步骤 2:构造不含子串 "010" 的所有串的 DFA
- 状态集合:Q = {q0, q1, q2, q3}
- 字母表:Σ = {0, 1}
- 状态转移函数:
- δ(q0, 0) = q0
- δ(q0, 1) = q1
- δ(q1, 0) = q0
- δ(q1, 1) = q2
- δ(q2, 0) = q0
- δ(q2, 1) = q3
- δ(q3, 0) = q3
- δ(q3, 1) = q3
- 起始状态:q0
- 终止状态:F = {q0, q1, q2}
- 正规表达式:(0|1)(1|00|01)
- 状态集合:Q = {q0, q1, q2, q3}
- 字母表:Σ = {0, 1}
- 状态转移函数:
- δ(q0, 0) = q0
- δ(q0, 1) = q1
- δ(q1, 0) = q2
- δ(q1, 1) = q1
- δ(q2, 0) = q0
- δ(q2, 1) = q3
- δ(q3, 0) = q3
- δ(q3, 1) = q3
- 起始状态:q0
- 终止状态:F = {q3}
- 正规表达式:(0|1)010(0|1)
步骤 2:构造不含子串 "010" 的所有串的 DFA
- 状态集合:Q = {q0, q1, q2, q3}
- 字母表:Σ = {0, 1}
- 状态转移函数:
- δ(q0, 0) = q0
- δ(q0, 1) = q1
- δ(q1, 0) = q0
- δ(q1, 1) = q2
- δ(q2, 0) = q0
- δ(q2, 1) = q3
- δ(q3, 0) = q3
- δ(q3, 1) = q3
- 起始状态:q0
- 终止状态:F = {q0, q1, q2}
- 正规表达式:(0|1)(1|00|01)