计算理论基础:1、自动机与语言

计算理论基础

NP问题:可以被快速验证的问题

P问题:可以被高效计算的问题(在 n O ( 1 ) n^{O(1)} nO(1)的时间内)

1.正则语言

正则语言:一些不需要内存就可以解决的问题(可以被有限自动机解决的问题)

1.1 有限自动机(finite automaton)

L L L的上界:证明 L L L是可以在时间 T ( n ) T(n) T(n)内解决的。

L L L的下界:证明 L L L是不可能在时间 T ( n ) T(n) T(n)内解决。

例1.1:自动门(门内和门外两个区域),有两个状态(开、关),

输入情况:

frontrearbothneither
front××
rear××
neither
neither
front,rear,both
front,rear,both
closed
open

例1.2: L = { ω ∈ { 0 , 1 } ∗ , ω = ω 1 ω 2 ⋯ ω n , ω n = 0 } L=\{\omega \in\{0,1\}^* ,\omega=\omega_1\omega_2\cdots\omega_n,\omega_n=0\} L={ω{0,1},ω=ω1ω2ωn,ωn=0},可以用有限自动机解决。

Q = { q 0 , q 1 } , ∑ = { 0 , 1 } , δ : Q × ∑ → Q Q=\{q_0,q_1\},\sum=\{0,1\},\delta:Q\times\sum\rightarrow Q Q={q0,q1},={0,1}δ:Q×Q如下表所示

01
q 0 q_0 q0 q 0 q_0 q0 q 1 q_1 q1
q 1 q_1 q1 q 0 q_0 q0 q 1 q_1 q1
0
1
1
0
q 0
q 1

例1.3: L = { ω ∈ { 0 , 1 } ∗ , ω = ω 1 ω 2 ⋯ ω n , ω n = 2 ⋅ ω n − 1 + 2 2 ⋅ ω n − 2 + ⋯ ☰  0   m o d 3 } L=\{\omega\in\{0,1\}^*,\omega=\omega_1\omega_2 \cdots \omega_n,\omega_n=2\cdot\omega_{n-1}+2^2\cdot\omega_{n-2}+\cdots ☰\ 0\ mod3\} L={ω{0,1},ω=ω1ω2ωn,ωn=2ωn1+22ωn2+ 0 mod3}(读一个二进制数,从高往低读,判断是否模3)

0
1
1
0
0
1
q 0
q 1
q 2

D e f   2.1 Def\ 2.1 Def 2.1 有限自动机:一个有限自动机是一个五元组 ( Q , ∑ , δ , q 0 , F ) (Q,\sum,\delta,q_0,F) (Q,,δ,q0,F)

  1. Q Q Q是一个有限集(状态集合)
  2. ∑ \sum 是一个字母表
  3. δ : Q × ∑ → Q \delta:Q\times\sum\rightarrow Q δ:Q×Q是转移函数
  4. q 0 q_0 q0:初始状态
  5. F F F:接收状态, F ⊆ Q F\subseteq Q FQ,可以是空集

D e f   2.2 Def\ 2.2 Def 2.2 接收(accept) M = ( Q , ∑ , δ , q 0 , F ) M=(Q,\sum,\delta,q_0,F) M=(Q,,δ,q0,F),令 M M M是一个有限自动机,令 w = w 1 ⋯ w n w=w_1\cdots w_n w=w1wn是一个字符串,有 w i ∈ ∑ w_i\in\sum wi,若 ∃ \exists 一系列状态 r 0 , r 1 , ⋯   , r n ∈ Q r_0,r_1,\cdots,r_n\in Q r0,r1,,rnQ,有:

  1. r 0 = q 0 r_0 =q_0 r0=q0
  2. δ ( r i , w i + 1 ) = r i + 1 , i = 0 , 1 , 2 , ⋯   , n − 1 \delta(r_i,w_{i+1})=r_{i+1}, i =0,1,2,\cdots,n-1 δ(ri,wi+1)=ri+1,i=0,1,2,,n1
  3. r n ∈ F r_n \in F rnF

则称 M M M接收 w w w

D e f   2.3 Def\ 2.3 Def 2.3 可识别 L L L M M M可接受的一系列字符串(strings),我们就称 L L L M M M的语言,记为 L ( M ) = L L(M)=L L(M)=L,称 M M M可识别(判定、接收) L L L,如果 M M M不接受任何字符串,则称它接收的语言为空语言(the empty language)。

例1.4: L = { ω ∈ { 0 , 1 } ∗ , ω = ω 1 ω 2 ⋯ ω n , ω 1 ≠ ω n } L=\{\omega\in\{0,1\}^*,\omega=\omega_1\omega_2\cdots\omega_n,\omega_1\neq\omega_n\} L={ω{0,1},ω=ω1ω2ωn,ω1=ωn}

0
1
0
1
1
0
q 0
q 1
q 3
q 2
q 4

q 1 , q 3 q_1,q_3 q1,q3是可接收的,分支可归约到例二的情况。

例1.5:回文数问题, L = { ω ∈ { 0 , 1 } ∗ , ω R = ω } L=\{\omega \in \{0,1\}^*,\omega^R=\omega\} L={ω{0,1},ωR=ω}

无法用有限自动机解决

D e f   2.4 Def\ 2.4 Def 2.4 正则语言: L ⊆ ∑ ∗ L\subseteq \sum^* L是正则语言,若存在有限自动机接收 L L L

L e t   A , B ⊆ ∑ ∗ , D e f i n e Let\ A,B\subseteq \sum^*,Define Let A,B,Define

  • (union) A ∪ B = { x ∈ ∑ ∗ , x ∈ A   o r   x ∈ B } A\cup B=\{x\in\sum^*,x\in A \ or\ x\in B \} AB={x,xA or xB}
  • (concatenation) A ∘ B   o r   A B = { x y : x ∈ A , y ∈ B } A\circ B\ or\ AB=\{xy:x\in A,y\in B\} AB or AB={xy:xA,yB}
  • (start) A ∗ = x 1 x 2 ⋯ x k , k ≥ 0 , x 1 , x 2 , ⋯   , x k ∈ A A^*={x_1x_2\cdots x_k,k\ge0,x_1,x_2,\cdots,x_k\in A} A=x1x2xk,k0,x1,x2,,xkA

例:
∑ = { 0 , 1 } A = { ϵ , 0 , 00 , 000 , ⋯   } B = { ϵ , 1 , 11 , 111 , ⋯   } A B = { 0 i 1 j , i , j > 0 } A ∗ = A B ∗ = B ( A B ) ∗ = ∑ ∗ {\small\sum}=\{0,1\}\\ A=\{\epsilon,0,00,000,\cdots\}\\ B=\{\epsilon,1,11,111,\cdots\}\\ AB=\{0^i1^j,i,j>0\}\\ A^*=A\\ B^*=B\\ (AB)^*=\small {\sum}^* ={0,1}A={ϵ,0,00,000,}B={ϵ,1,11,111,}AB={0i1j,i,j>0}A=AB=B(AB)=
T h m   2.5 Thm\ 2.5 Thm 2.5 如果 A 1 , A 2 A_1,A_2 A1,A2是正则语言,那么 A 1 ∪ A 2 A_1\cup A_2 A1A2是正则语言

P r o o f Proof Proof M 1 = ( Q 1 , ∑ , δ 1 , q 1 , F 1 ) M_1=(Q_1,\sum,\delta_1,q_1,F_1) M1=(Q1,,δ1,q1,F1)接收 A 1 A_1 A1, M 2 = ( Q 2 , ∑ , δ 2 , q 2 , F 2 ) M_2=(Q_2,\sum,\delta_2,q_2,F_2) M2=(Q2,,δ2,q2,F2)接收 A 2 A_2 A2,构造一个有限自动机 M M M来接收 A 1 ∪ A 2 A_1\cup A_2 A1A2,其中 M = ( Q , ∑ , δ , q 0 , F ) M=(Q,\sum,\delta,q_0,F) M=(Q,,δ,q0,F)

  1. Q = Q 1 × Q 2 = { ( r 1 , r 2 ) : r 1 ∈ Q 1 , r 2 ∈ Q 2 } Q=Q_1\times Q_2=\{(r_1,r_2):r_1\in Q_1,r_2\in Q_2\} Q=Q1×Q2={(r1,r2):r1Q1,r2Q2}
  2. δ : Q × ∑ → \delta:Q\times\sum \rightarrow δ:Q×定义为 ∀ ( r 1 , r 2 ) ∈ Q , a ∈ ∑ , \forall(r_1,r_2)\in Q, a\in\sum, (r1,r2)Q,a, δ ( ( r 1 , r 2 ) , a ) = ( δ 1 ( r 1 , a ) , δ 2 ( r 2 , a ) ) \delta((r_1,r_2),a)=(\delta_1(r_1,a),\delta_2(r_2,a)) δ((r1,r2),a)=(δ1(r1,a),δ2(r2,a))
  3. q 0 = ( q 1 , q 2 ) q_0=(q_1,q_2) q0=(q1,q2)
  4. F = { ( r 1 , r 2 ) : r 1 ∈ F 1   o r   r 2 ∈ F 2 } F=\{(r_1,r_2):r_1\in F_1 \ or \ r_2\in F_2\} F={(r1,r2):r1F1 or r2F2}

类似将

or改为and,就识别了 A 1 ∩ A 2 A_1\cap A_2 A1A2

T h m   2.6 Thm\ 2.6 Thm 2.6 A 1 , A 2 A_1,A_2 A1,A2是正则语言,则 A 1 A 2 A_1A_2 A1A2也是正则语言。

D F A ( d e t e r m i n i s t i c   f i n i t e   a u t o m a t o n ) DFA (deterministic\ finite\ automaton) DFA(deterministic finite automaton):确定有限自动机

N F A ( n o n d e t e r m i n i s t i c   f i n i t e   a u t o m a t o n ) NFA(nondeterministic\ finite\ automaton) NFA(nondeterministic finite automaton):不确定有限自动机,转移的情况时不确定的,最终可能接收,可能拒绝,但只要有一条路径接收,就接收了。

1.2 非确定性

D e f   2.7 Def\ 2.7 Def 2.7 非确定有限自动机:一个 N F A NFA NFA是一个五元组 ( Q , ∑ , δ , q 0 , F ) (Q,\sum,\delta,q_0,F) (Q,,δ,q0,F),有如下定义:

  1. Q Q Q是一个有限状态集合
  2. ∑ \sum 是一个字符表
  3. δ : Q × ( ∑ ∪ { ϵ } ) → P ( Q ) \delta:Q\times(\sum\cup\{\epsilon\})\rightarrow P(Q) δ:Q×({ϵ})P(Q)是转移函数(可以空转移,下一个状态并不确定,可抵达多个状态,即为状态的集合)
  4. q 0 ∈ Q q_0\in Q q0Q 是初始状态
  5. F ⊆ Q F\subseteq Q FQ是一可接受状态集合

D e f   2.8 Def\ 2.8 Def 2.8 N = ( Q , ∑ , δ , q 0 , F ) N=(Q,\sum,\delta,q_0,F) N=(Q,,δ,q0,F)是一个NFA, w ∈ ∑ ∗ w\in\sum^* w,若 w = y 1 y 2 ⋯ y m , y i ∈ ∑ ∪ { ϵ } w=y_1y_2\cdots y_m,y_i\in\sum \cup\{\epsilon\} w=y1y2ym,yi{ϵ}, ∃ r 0 , r 1 , ⋯   , r m ∈ Q \exist r_0,r_1,\cdots,r_m\in Q r0,r1,,rmQ,则我们称 N F A NFA NFA接受 w w w。(即只要有一条路径可接收,就接收了)

N F A NFA NFA例1.6:( q 4 q_4 q4有效)

0,1
1
ε,0
0
1
0,1
0,1
q 1
q 2
q 3
q 5
q 4

若输入 010110,则在 q 1 q_1 q1状态输入1时,则可能为 q 1 , q 2 , q 3 q_1,q_2,q_3 q1,q2,q3( ϵ 为空转移 \epsilon为空转移 ϵ为空转移)

例1.7:设计一个 N F A NFA NFA,判断倒数第三位是0。

猜哪位是倒数第三位, N F A NFA NFA每次都猜对, q 3 q_3 q3是有效的, N F A NFA NFA每次都能在倒数第三位是0时空转移到 q 1 q_1 q1

ε
0,1
0,1
q 0
q 1
q 2
q 3

例1.8: L = { 0 k , k 是 2 或 3 的倍数 } L=\{0^k,k是2或3的倍数\} L={0k,k23的倍数}

N F A NFA NFA直接猜是2的倍数还是3的倍数,每次都猜对, q 3 , q 2 q_3,q_2 q3q2是有效的,分别2的倍数和3的倍数

ε
ε
0
0
0
0
0
q 1
q 2
q 3
q 4
q 5
q 6

V a n a n t   1    δ : Q × ∑ ∗ → Q Vanant\ 1\ \ \delta:Q\times \sum^*\rightarrow Q Vanant 1  δ:Q×Q

问题(输入011时,可以从01转移,也可以从011转移)

两个处理方法:

1.我们保证最多只有一条转移路径(与DFA等价)

2.在存在多条转移路径时,任意选择一条(与NFA等价)

01
011
q 0
q 1
q 2

E x a m p l e Example Example 证明变体(Vanant)是与DFA或NFA等价的

例:

1
0,1
0,ε
1
0,1
q 0
q 1
q 2
q 3
Q / ∑ Q/\sum Q/01 ϵ \epsilon ϵ
q 0 q_0 q0 { q 0 } \{q_0\} {q0} { q 0 , q 1 } \{q_0,q_1\} {q0,q1} ∅ \varnothing
q 1 q_1 q1 { q 2 } \{q_2\} {q2} ∅ \varnothing { q 2 } \{q_2\} {q2}
q 2 q_2 q2 ∅ \varnothing { q 3 } \{q_3\} {q3} ∅ \varnothing
q 3 q_3 q3 { q 3 } \{q_3\} {q3} { q 3 } \{q_3\} {q3} ∅ \varnothing

语言为 L = { w ∈ { 0 , 1 } ∗ , w 含有子串 11 或 101 } L=\{w\in\{0,1\}^*,w含有子串11或101\} L={w{0,1},w含有子串11101} q 2 q_2 q2处如果是0则转入空集,需从头( q 0 q_0 q0)再来

T h m   2.9 Thm\ 2.9 Thm 2.9 任意一个NFA都有一个等价的DFA

P r o o f     N = ( Q , ∑ , δ , q 0 , F ) Proof\ \ \ N=(Q,\sum,\delta,q_0,F) Proof   N=(Q,,δ,q0,F)是NFA,识别语言A。

构造一个DFA, M = ( Q ′ , ∑ , δ ′ , q 0 ′ , F ) M=(Q',\sum,\delta',q_0',F) M=(Q,,δ,q0,F)也识别语言A。注意到NFA中有空字符转移,

定义 R ⊆ Q , E ( R ) = { q ∈ Q : q 可以从 R 通过 0 个或更多的 ϵ 到达 } R\subseteq Q,E(R)=\{q\in Q:q可以从R通过0个或更多的\epsilon到达\} RQ,E(R)={qQ:q可以从R通过0个或更多的ϵ到达}(非常简洁美丽的良定义)

定义 M M M如下:

  1. Q ′ = P ( Q ) Q'=P(Q) Q=P(Q)
  2. R ∈ Q ′ R\in Q' RQ a ∈ ∑ a\in \sum a,定义 δ ′ ( R , a ) = { q ∈ Q : q ∈ E ( δ ( r , a ) ) , f o r   s o m e   r ∈ R } = ⋃ r ∈ R E ( δ ( r , a ) ) \delta'(R,a)=\{q\in Q:q\in E(\delta(r,a)),for\ some \ r \in R\}=\bigcup\limits_{r\in R}E(\delta(r,a)) δ(R,a)={qQ:qE(δ(r,a)),for some rR}=rRE(δ(r,a))(路径扩展,NFA中的每条路径都扩展为DFA的一个可到达的节点)
  3. q ′ = E ( q 0 ) q'=E({q_0}) q=E(q0)
  4. F ′ = { R ∈ Q ′ : R ∩ F ≠ ∅ } F'=\{R\in Q':R\cap F\ne\varnothing\} F={RQ:RF=}

E x a m p l e Example Example
如何将一个NFA转换为DFA
NFA

ε
0
1
0
0,1
1
3
2

DFA

0,1
0
1
0
1
1
0
0,1
0
1
1
0
0
1
空集
1
2
3
1,2
2,3
1,3
1,2,3

C o r o l l o y   2.10 Corolloy\ 2.10 Corolloy 2.10 语言A是正则的,当且仅当存在NFA可接收他

T h m   2.5 Thm\ 2.5 Thm 2.5 两个正则语言的并集也是正则的

在这里插入图片描述

图1 N 1∪N 2的形象化证明

N 1 = ( Q 1 , ∑ , δ 1 , q 1 , F 1 ) N_1=(Q_1,\sum,\delta_1,q_1,F_1) N1=(Q1,,δ1,q1,F1)接受 A 1 A_1 A1 N 2 = ( Q 2 , ∑ , δ 2 , q 2 , F 2 ) N_2=(Q_2,\sum,\delta_2,q_2,F_2) N2=(Q2,,δ2,q2,F2)接受 A 2 A_2 A2,构造 N = ( Q , ∑ , δ , q 0 , F ) N=(Q,\sum,\delta,q_0,F) N=(Q,,δ,q0,F),如下:

  1. Q = Q 1 ∪ Q 2 ∪ { q 0 } Q=Q_1\cup Q_2\cup \{q_0\} Q=Q1Q2{q0}
  2. q 0 q_0 q0是初始状态
  3. F = F 1 ∪ F 2 F=F_1\cup F_2 F=F1F2
  4. F o r   q ∈ Q , a ∈ ∑ ∪ { ϵ } For\ q\in Q,a\in \sum\cup\{\epsilon\} For qQ,a{ϵ}

δ ( q , a ) = { δ 1 ( q , a )        q ∈ Q 1 δ 2 ( q , a )        q ∈ Q 2 { q 1 , q 2 }        q = q 0   a n d   a = ϵ ∅                  q = q 0   a n d   a ≠ ϵ \delta(q,a)=\begin{cases} \delta_1(q,a)\ \ \ \ \ \ q\in Q_1\\ \delta_2(q,a)\ \ \ \ \ \ q\in Q_2\\ \{q_1,q_2\} \ \ \ \ \ \ q=q_0 \ and\ a=\epsilon\\ \varnothing\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ q=q_0\ and\ a\ne \epsilon \end{cases} δ(q,a)= δ1(q,a)      qQ1δ2(q,a)      qQ2{q1,q2}      q=q0 and a=ϵ                q=q0 and a=ϵ

T h m   2.11 Thm\ 2.11 Thm 2.11 两个正则语言的连接是正则的

在这里插入图片描述

图2 N 1N 2的图形化证明

N 1 = ( Q 1 , ∑ , δ 1 , q 1 , F 1 ) N_1=(Q_1,\sum,\delta_1,q_1,F_1) N1=(Q1,,δ1,q1,F1)接受 A 1 A_1 A1 N 2 = ( Q 2 , ∑ , δ 2 , q 2 , F 2 ) N_2=(Q_2,\sum,\delta_2,q_2,F_2) N2=(Q2,,δ2,q2,F2)接受 A 2 A_2 A2,构造 N = ( Q , ∑ , δ , q 0 , F ) N=(Q,\sum,\delta,q_0,F) N=(Q,,δ,q0,F),如下:

  1. Q = Q 1 ∪ Q 2 ∪ { q 0 } Q=Q_1\cup Q_2\cup \{q_0\} Q=Q1Q2{q0}
  2. q 0 = q 1 q_0=q_1 q0=q1是初始状态
  3. F = F 2 F=F_2 F=F2
  4. F o r   q ∈ Q , a ∈ ∑ ∪ { ϵ } For\ q\in Q,a\in\sum\cup\{\epsilon\} For qQ,a{ϵ}

δ ( q , a ) = { δ 1 ( q , a )         q ∈ Q 1   a n d   q ∉ F 1 δ 2 ( q , a )         q ∈ Q 2 q 2                  q ∈ F 1   a n d   a = ϵ ∅                  q = q 0   a n d   a ≠ ϵ \delta(q,a)=\begin{cases} \delta_1(q,a)\ \ \ \ \ \ \ q\in Q_1\ and \ q\notin F_1\\ \delta_2(q,a)\ \ \ \ \ \ \ q\in Q_2\\ q_2\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ q\in F_1\ and\ a=\epsilon\\ \varnothing\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ q=q_0\ and\ a\ne\epsilon \end{cases} δ(q,a)= δ1(q,a)       qQ1 and q/F1δ2(q,a)       qQ2q2                qF1 and a=ϵ                q=q0 and a=ϵ

T h m Thm Thm 2.12 正则语言的*也是正则的。

在这里插入图片描述

图3 N *的图形化证明

N 1 = ( Q 1 , ∑ , δ 1 , q 1 , F 1 ) N_1=(Q_1,\sum,\delta_1,q_1,F_1) N1=(Q1,,δ1,q1,F1)接受 A 1 A_1 A1,构造 N = ( Q , ∑ , δ , q 0 , F ) N=(Q,\sum,\delta,q_0,F) N=(Q,,δ,q0,F),如下:

  1. Q = Q 1 ∪ { q 0 } Q=Q_1\cup \{q_0\} Q=Q1{q0}
  2. q 0 q_0 q0是初始状态
  3. F = F 1 ∪ { q 0 } F=F_1\cup\{q_0\} F=F1{q0}
  4. F o r   q ∈ Q , a ∈ ∑ ∪ { ϵ } For\ q\in Q,a\in\sum\cup\{\epsilon\} For qQ,a{ϵ}

δ ( q , a ) = { δ 1 ( q , a )        q ∈ Q 1 q 0                 q ∈ F 1   a n d   a = ϵ q 1                 q = q 0   a n d   a = ϵ ∅                 q ∈ F 1   a n d   a ≠ ϵ \delta(q,a)=\begin{cases} \delta_1(q,a)\ \ \ \ \ \ q\in Q_1\\ q_0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ q\in F_1\ and \ a=\epsilon\\ q_1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ q=q_0\ and\ a=\epsilon\\ \varnothing\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ q\in F_1\ and\ a\ne \epsilon \end{cases} δ(q,a)= δ1(q,a)      qQ1q0               qF1 and a=ϵq1               q=q0 and a=ϵ               qF1 and a=ϵ

T h m 2.13 Thm 2.13 Thm2.13 正则语言的补也是正则的

M = ( Q , ∑ , δ , q 0 , F ) M=(Q,\sum,\delta,q_0,F) M=(Q,,δ,q0,F),构造 M ′ = ( Q , ∑ , δ , q 0 , Q − F ) M'=(Q,\sum,\delta,q_0,Q-F) M=(Q,,δ,q0,QF),后者显然接收前者的补

1.3正则表达式

E x a m p l e Example Example

  1. 奇数结尾: ( 0 ∪ 1 ∪ 2 ∪ ⋯ ∪ 9 ) ∗ ( 1 ∪ 3 ∪ 5 ∪ 7 ∪ 9 ) (0\cup1\cup2\cup\cdots\cup9)^*(1\cup3\cup5\cup7\cup9) (0129)(13579)
  2. 偶数结尾: ( 0 ∪ 1 ∪ 2 ∪ ⋯ ∪ 9 ) ∗ ( 2 ∪ 4 ∪ 6 ∪ 8 ∪ 0 ) (0\cup1\cup2\cup\cdots\cup9)^*(2\cup4\cup6\cup8\cup0) (0129)(24680)
  3. ( 0 ∪ 1 ) 0 ∗ (0\cup1)0^* (01)0,以0或1开头,后面接任意多个0
  4. ( 0 ∪ 1 ) ∗ = ∑ ∗ (0\cup1)^*=\sum^* (01)=
  5. ( 0 ∪ ∑ ∗ ) ∪ ( ∑ ∗ 1 ) (0\cup\sum^*)\cup(\sum^*1) (0)(1):所有以0开头或者以1结尾的字符串

D e f   2.14 Def\ 2.14 Def 2.14正则表达式 如果 R R R满足以下条件, R R R是正则表达式:

  1. a   f o r   s o m e   a ∈ ∑ a\ for\ some \ a \in\sum a for some a
  2. ϵ \epsilon ϵ
  3. ∅ \varnothing
  4. ( R 1 ∪ R 2 ) (R_1\cup R_2) (R1R2),如果 R 1 , R 2 R_1,R_2 R1,R2是正则表达式
  5. ( R 1 R 2 ) (R_1R_2) (R1R2),如果 R 1 , R 2 R_1,R_2 R1,R2是正则表达式
  6. ( R 1 ∗ ) (R_1^*) (R1):如果 R 1 R_1 R1是正则表达式

括号可被忽略。

E x a m p l e Example Example

  1. 0 ∗ 1 0 ∗ 0^*10^* 010,只有一个1的字符串
  2. ∑ ∗ 1 ∑ ∗ \sum^*1\sum^* 1,至少有一个1的字符串
  3. ∑ ∗ 001 ∑ ∗ \sum^*001\sum^* 001,含001子串的字符串
  4. 1 ∗ ( 0 1 + ) ∗ 1^*(01^+)^* 1(01+),没有连续0的字符串
  5. ( ∑ ∑ ) ∗ (\sum\sum)^* (∑∑),偶数长度的字符串
  6. ( 01 ∪ 10 ) = { 01 , 10 } (01\cup10)=\{01,10\} (0110)={01,10}
  7. ( 0 ∪ ϵ ) 1 ∗ = ( 0 1 ∗ ∪ 1 ∗ ) (0\cup\epsilon)1^*=(01^*\cup1^*) (0ϵ)1=(011)
  8. ( 0 ∪ ϵ ) ( 1 ∪ ϵ ) = { ϵ , 0 , 1 , 01 } (0\cup\epsilon)(1\cup\epsilon)=\{\epsilon,0,1,01\} (0ϵ)(1ϵ)={ϵ,0,1,01}
  9. 1 ∗ ∅ = ∅ 1^*\varnothing=\varnothing 1=
  10. ∅ ∗ = { ϵ } \varnothing^*=\{\epsilon\} ={ϵ}

∑ ∗ 110 ∑ ∗ \sum^*110\sum^* 110 :含有子串110

( ϵ ∪ 0 ∪ 1 ) ( 10 ∪ 1 ) ∗ (\epsilon\cup0\cup1)(10\cup1)^* (ϵ01)(101):没有字串00(用1把0隔开)

( 0 ∗ 1 0 ∗ 1 0 ∗ 1 0 ∗ ) ∗ (0^*10^*10^*10^*)^* (0101010):含有3的倍数个1

∑ ∗ 1 + ∑ ∗ 1 + ∑ ∗ 0 + ∪ ∑ ∗ 1 + ∑ ∗ 0 + ∑ ∗ 1 + ∪ 0 + ∑ ∗ 1 + ∑ ∗ 1 + \sum^*1^+\sum^*1^+\sum^*0^+\cup\sum^*1^+\sum^*0^+\sum^*1^+\cup0^+\sum^*1^+\sum^*1^+ 1+1+0+1+0+1+0+1+1+:至少有2个1和1个0

T h m   2.15 Thm\ 2.15 Thm 2.15 一个语言是正则的 ⟺ \Longleftrightarrow 某一正则表达式能表示它

( ⇐ \Leftarrow ):如果一个语言可以被正则表达式描述,那么它是正则的:

P r o o f : Proof: Proof:

  1. R = a , a ∈ ∑ ,   L ( R ) = { a } R=a,a\in\sum,\ L(R)=\{a\} R=a,a, L(R)={a}
  2. R = ϵ R=\epsilon R=ϵ
  3. R = ∅ R=\varnothing R=
  4. R = R 1 ∪ R 2 ( b y   T h m   2.5 ) R=R_1\cup R_2 (by\ Thm\ 2.5) R=R1R2(by Thm 2.5)
  5. R = R 1 R 2 ( b y   T h m   2.11 ) R=R_1R_2(by\ Thm\ 2.11) R=R1R2(by Thm 2.11)
  6. R = R 1 ∗ ( b y    T h m   2.12 ) R=R_1^*(by\ \ Thm\ 2.12) R=R1(by  Thm 2.12)

E x a m p l e   ( a b ∪ a ) ∗ Example\ (ab\cup a)^* Example (aba)

a
b
a
ε
1
2
3

( ⇒ \Rightarrow )为了证明充分性,先引入GNFA的定义

D e f   2.18 Def\ 2.18 Def 2.18广义非确定型有穷自动机(GNFA)

是一个五元组 ( Q , ∑ , δ , q s t a r t , q a c c e p t ) (Q,\sum,\delta,q_{start},q_{accept}) (Q,,δ,qstart,qaccept)

  1. Q是有穷的状态集
  2. ∑ \sum 是输入字母表
  3. δ : ( Q − { q a c c e p t } ) × R → ( Q − { q s t a r t } ) \delta:(Q-\{q_{accept}\})\times R\rightarrow (Q-\{q_{start}\}) δ:(Q{qaccept})×R(Q{qstart}),R是所有正则表达式的集合
  4. q s t a r t q_{start} qstart是起始状态
  5. q a c c e p t q_{accept} qaccept是接收状态

起始状态没有入边,接收状态没有出边,除了起始状态,和接收状态之外,任何两个状态之间必须有一条边,不能有多重边。

CONVERT(G):

  1. 设k是G的状态数

  2. 如果k=2,则G一定是由1个起始状态,一个接收状态和连接这两个状态的箭头组成,设箭头上的标记为正则表达式R,返回这个表达式R

  3. 如果k>2,则任取 q r i p ∈ Q − { q s t a r t , q a c c e p t } q_{rip}\in Q-\{q_{start},q_{accept}\} qripQ{qstart,qaccept},并且令G’为 G N F A ( Q ′ , ∑ , δ ′ , q s t a r t , q a c c e p t ) GNFA(Q',\sum,\delta',q_{start},q_{accept}) GNFA(Q,,δ,qstart,qaccept),其中 Q ′ = Q − { q r i p } Q'=Q-\{q_{rip}\} Q=Q{qrip},令
    δ ′ ( q i , q j ) = ( R 1 ) ( R 2 ) ∗ ( R 3 ) ∪ R 4 \delta'(q_i,q_j)=(R_1)(R_2)^*(R_3)\cup R_4 δ(qi,qj)=(R1)(R2)(R3)R4

  4. 计算CONVERT(G’) 且返回这个值

R1
R3
R2
R4
q i
q rip
q j

C l a i m Claim Claim 对任意的 G N F A     G GNFA\ \ \ G GNFA   G, C O N V E R T ( G ) CONVERT(G) CONVERT(G) 等价于 C O N V E R T ( G ′ ) CONVERT(G') CONVERT(G)

$Proof\ $1) L ( G ) ⊆ L ( G ′ ) L(G)\subseteq L(G') L(G)L(G)

F o r   a n y   w ∈ ∑ ∗ , i f   G   a c c e p t s   w , t h e n   G ′   a c c e p t s   w : For\ any\ w\in\sum^{*},if\ G\ accepts\ w,then\ G'\ accepts \ w: For any w,if G accepts w,then G accepts w:
q s t a r t , q 1 , q 2 , q 3 , ⋯   , q a c c e p t q_{start},q_1,q_2,q_3,\cdots,q_{accept} qstart,q1,q2,q3,,qaccept
i f   n o n e   o f   t h e m   i s   q r i p , t h e n   G ′   a l s o   a c c e p t s   w if\ none\ of\ them\ is \ q_{rip},then\ G'\ also\ accepts\ w if none of them is qrip,then G also accepts w

i f   q r i p   a p p e a r s , if\ q_{rip}\ appears, if qrip appears,
q s t a r t , q 1 , ⋯   , q i t 1 , q i t 2 = q r i p , q i t 3 , ⋯   , q a c c e p t q_{start},q_1,\cdots,q_{i_{t_1}},q_{i_{t_2}}=q_{rip},q_{i_{t_3}},\cdots ,q_{accept} qstart,q1,,qit1,qit2=qrip,qit3,,qaccept
T h e n   G ′   a l s o   a c c e p t s   w Then\ G'\ also\ accepts\ w Then G also accepts w

2 ) L ( G ′ ) ⊆ L ( G ) 2)L(G')\subseteq L(G) 2)L(G)L(G)

将DFA转换成等价的正则表达式

a
b
a,b
1
2
a
b
a,b
ε
ε
1
2
s
a
a
b(a|b)*
ε
1
a
s
a*b(a|b)*
s
a

1.4 非正则语言

L o m a   2.17 Loma\ 2.17 Loma 2.17(泵引理)若A是一个正则语言,则存在一个数 p p p(泵长度)使得,如果 s s s A A A中任一长度不小于 p p p的字符串,那么 s s s可被分成三段, s = x y z s=xyz s=xyz,满足下述条件:

  1. 对每一个 i ≥ 0 , x y i z ∈ A i\ge 0,xy^iz\in A i0,xyizA
  2. ∣ y ∣ > 0 |y|>0 y>0
  3. ∣ x y ∣ ≤ p |xy|\le p xyp

P r o o f Proof Proof (p48)

M = ( Q , ∑ , δ , q 1 , F ) M=(Q,\sum,\delta,q_1,F) M=(Q,,δ,q1,F)是一台识别A的DFA, p = ∣ Q ∣ p=|Q| p=Q

s = s 1 s 2 ⋯ s n s=s_1s_2\cdots s_n s=s1s2sn是A中长度为 n n n的字符串,这里 n ≥ p n\ge p np,又设 r 1 , ⋯   , r n + 1 r_1,\cdots,r_{n+1} r1,,rn+1是M在处理 s s s的过程中进入的状态序列,因而 r i + 1 = δ ( r i , s i ) , 1 ≤ i ≤ n r_{i+1}=\delta(r_i,s_i),1\le i\le n ri+1=δ(ri,si),1in,该序列长度为 n + 1 n+1 n+1,不小于 p + 1 p+1 p+1。根据鸽巢原理,在该序列的前 p + 1 p+1 p+1个元素中,一定有两个相同的状态,设第一个是 r j r_j rj,第二个是 r l r_l rl,由于 r l r_l rl出现在序列的前 p + 1 p+1 p+1个位置中,而且序列是从 r 1 r_1 r1开始的,故有 l ≤ p + 1 l\le p+1 lp+1。此时,令 x = s 1 ⋯   , s j − 1 , y = s j ⋯ s l − 1 , z = s l ⋯ s n x=s_1\cdots,s_{j-1},y=s_j\cdots s_{l-1},z=s_l\cdots s_n x=s1,sj1,y=sjsl1,z=slsn

例:

1.证明 D = { 1 n 2 ∣ n ≥ 0 } D=\{1^{n^2}|n\ge0\} D={1n2n0}不是正则的。

假设是正则的,设 p p p是泵长度。 s s s是字符串 1 p 2 1^{p^2} 1p2,显然长度大于 p p p,则可被分为三段, s = x y z s=xyz s=xyz,使得对任意的 i ≥ 0 i\ge 0 i0,字符串 x y i z xy^iz xyiz D D D中。

考虑 x y z xyz xyz x y 2 z xy^2z xy2z,它们之间相差 y y y的一次重复,长度差 y y y的长度。

易知 ∣ x y ∣ ≤ p |xy|\le p xyp,从而 ∣ y ∣ ≤ p |y|\le p yp,又 ∣ x y z ∣ = p 2 |xyz|=p^2 xyz=p2,则 ∣ x y 2 z ∣ = p 2 + p |xy^2z|=p^2+p xy2z=p2+p,但 p 2 + p < p 2 + 2 p + 1 = ( p + 1 ) 2 p^2+p\lt p^2+2p+1=(p+1)^2 p2+p<p2+2p+1=(p+1)2,又 ∣ y ∣ > 0 |y|\gt 0 y>0,则 ∣ x y 2 z ∣ > p 2 |xy^2z|>p^2 xy2z>p2,则 x y 2 z xy^2z xy2z的长度严格在两个相邻的完全平方数之间,肯定不是完全平方数,不是正则的

2.证明 D = { 1 p ∣ p 是素数 } D=\{1^p|p是素数\} D={1pp是素数}不是正则的。

假设正则的,设p是泵长度。s是字符串 1 q , q ≥ p 1^q,q\ge p 1q,qp,则可被分为三段, s = x y z s=xyz s=xyz,使得对任意的 i ≥ 0 i\ge 0 i0,字符串 x y i z xy^iz xyiz D D D中。不妨假设 x = 1 a , y = 1 b , z = 1 c x=1^a,y=1^b,z=1^c x=1a,y=1b,z=1c,则 a + i b + c a+ib+c a+ib+c要为素数,注意到,当 i = a + b + c + 1 , a + i b + c = ( b + 1 ) ( a + b + c ) i=a+b+c+1,a+ib+c=(b+1)(a+b+c) i=a+b+c+1,a+ib+c=(b+1)(a+b+c),不是素数。

注意的过程:希望是 ( b + w ) ( k a + m b + t c ) = ( k a b + m b 2 + t b c + k w a + m w b + t w c ) (b+w)(ka+mb+tc)=(kab+mb^2+tbc+kwa+mwb+twc) (b+w)(ka+mb+tc)=(kab+mb2+tbc+kwa+mwb+twc),则对应不难发现可令w=1,有k=1,t=1,则可化为 ( b + 1 ) ( a + m b + c ) = ( a b + m b 2 + b c + a + m b + c ) (b+1)(a+mb+c)=(ab+mb^2+bc+a+mb+c) (b+1)(a+mb+c)=(ab+mb2+bc+a+mb+c),则 i b = ( a b + m b 2 + b c + m b ) , i = ( a + c + m b + m ) ib=(ab+mb^2+bc+mb),i=(a+c+mb+m) ib=(ab+mb2+bc+mb)i=(a+c+mb+m),令 m = 1 m=1 m=1即可得到

3.有点不一样的例子,对于语言 B = { 0 n 1 n ∣ n ≥ 0 } B=\{0^n1^n|n\ge 0 \} B={0n1nn0},是容易判断它不是正则的,分成三段,y要么是0串,要么是1串,要么含有01字串,都很容易证明这些不在 B B B中。类似的方法做这个就不太行:

证明 C = { w ∣ w 中 0 和 1 的个数相同 } C=\{w|w中0和1的个数相同\} C={ww01的个数相同}不是正则的

显然分3段后 y y y无论重复几次都是可能满足的,因为没有限制0,1的先后顺序。

但考虑定理的条件3: ∣ x y ∣ ≤ p |xy|\le p xyp,可以取字串 s = 0 p 1 p s=0^p1^p s=0p1p,则无论怎么取, y y y只能是0串,那么它的重复显然不属于C

可利用条件3来构造一个良好的字串,证明它是不可抽取的

  • 63
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
虽然不是入门教材,但个人感觉这才是真正的“计算机文化基础”,看看章节目录就会爱不释手。<br><br>目录<br>1、1字符串、字母表和语言<br>第一章 预备知识<br>1、2图和树<br>1、3归纳证明<br>1、4集合<br>1、5关系<br>1、6本书提要<br>2、1有穷状态系统<br>第二章 有穷自动机和正规表达式<br>2、2基本定义<br>2、3非确定有穷自动机<br>2、4具有∈动作的有穷自动机<br>2、5正规表达式<br>2、6双向有穷自动机<br>2、7具有输出的有穷自动机<br>2、8有穷自动机的应用<br>3、1正规集合的泵作用引理<br>第三章 正规集合的性质<br>3、2正规集合的封闭性质<br>3、3正规集合的判定算法<br>3、4Myhill-Nerode定理和有穷自动机的最小化<br>4、1动机和引言<br>第四章 上下文无关文法<br>4、2上下文无关文法<br>4、3派生树<br>4、4上下文无关文法的简化<br>4、5Chomsky范式<br>4、6Greibach范式<br>4、7固有多义上下文无关语言的存在性<br>5、1非形式描述<br>第五章 下推自动机<br>5、2定义<br>5、3下推自动机和上下文无关语言<br>6、1关于CFL的泵作用引理<br>第六章 上下文无关语言的性质<br>6、2CFL的封闭性质<br>6、3有关CFL的判定算法<br>7、1引言<br>第七章 图灵机<br>7、2图灵机模型<br>7、3可计算语言和可计算函数<br>7、4图灵机构造技术<br>7、5图灵机的修改<br>7、6Church假设<br>7、7作为枚举器的图灵机<br>7、8等价于基本模型的受限图灵机<br>8、1问题<br>第八章 不可判定性<br>8、2递归语言和递归可枚举语言的性质<br>8、3通用图灵机和一个不可判定问题<br>8、4Rice定理和某些其它的不可判定问题<br>8、5Post对应问题的不可判定性<br>8、6图灵机的有效计算和无效计算:证明CFL问题不可判定性的一个工具<br>8、7Greibach定理<br>8、8递归函数论初步<br>8、9Oracle计算<br>9、1正规文法<br>第九章 Chomsky谱系<br>9、2无限制文法<br>9、3上下文有关语言<br>9、4语言类之间的关系<br>第十章 确定的上下文无关语言<br>10、1DPDA的标准形式<br>10、2DCFL在补运算下的封闭性<br>10、3预测机<br>10、4DCFL的其它封闭性质<br>10、5DCFL的判定性质<br>10、6LR(0)文法<br>10、7LR(0)文法与DPDA<br>10、8LR(k)文法<br>11、1三元族和完全三元族<br>第十一章 语言族的封闭性质<br>11、2广义时序机映射<br>11、3三元族的其它封闭性质<br>11、4抽象语言族<br>11、5AFL运算的独立性<br>11、6小结<br>12、1定义<br>第十二章 计算复杂性理论<br>12、2线性加速、带压缩和带数目的减少<br>12、3谱系定理<br>12、4复杂性量度间的关系<br>12、5转换引理和非确定谱系<br>12、6一般复杂性量度的性质:间隙定理、加速定理和并定理<br>12、7公理化复杂性理论<br>13、1多项式时间和空间<br>第十三章 难解型问题<br>13、2某些NP完全问题<br>13、3co-NP类<br>13、4PSPACE完全问题<br>13、5对于P和NSPACE(logn)的完全问题<br>13、6某些可证明的难解型问题<br>13、7对于带Oracle的图灵机的P=NP问题:辨别是否P=NP时我们能力的限度<br>14、1辅助下推自动机<br>第十四章 其它重要语言类集锦<br>14、2栈自动机<br>14、3加标语言<br>14、4发展系统<br>14、5小结<br>参考文献<br>汉英名词索引<br>
内容简介编辑 本书采用通俗的语言和形象化的方法来表达概念和定理,逻辑严谨、思维缜密,可作为高等院校计算机及相关专业“形式语言与自动机”课程的教材。 [1] 作者简介编辑 陈有祺,南开大学信息技术科学学院教授,多年来一直从事计算机软件方面的教学和研究工作,从1993年起享受国务院政府特殊津贴。讲授的课程主要有程序设计语言.编译原理,数据结构、形式语言与自动机等,研究领域包括编译理论、人工智能、自然语言理解,形式语言等。1980年至1982年在美国西密歇根大学作访问学者,研修人工智能和形式语言,回国后一直为研究生讲授“形式语言与自动机”课程。相关著作包括:《BCLR(k)文法及其分析算法》、《广义上下文无关文法和它的语法分析》、《从输入输出序列确定自动机的结构》,《形式语言与自动机》等。 编辑推荐编辑 本书以四类形式语言(短语结构语言,上下文有关语言。上下文无关语言。正则语言)和四种自动机(有穷自动机、下推自动机.图灵机,线性有界自动机)为主线,讨论了形式语言与自动机方面的主要理论成果和应用实例。 本书的主要特色: 取材丰富。涵盖了该领域国内外现有教材的主要内容。 在写作方法上,循序渐进,深入浅出。在概念的引入和定理的证明上,尽量采用通俗的语言和形象化的方法来表达。 理论与实际相结合。除具有配合定理和定义的大量例题外,许多章节还有现代计算机技术中应用的实例。 适应面广。既适合作为本科生的教材,也适合作为研究生的教材。 图书目录编辑 出版者的话 序言 前言 教学建议 第1章 预备知识 1.1 定理及其证明方法 1.1.1 演绎法 1.1.2 反证法 1.1.3 归纳法 1.2 集合及其基本运算 1.2.1 集合基础知识 1.2.2 集合的基本运算 1.2.3 关系与映射 1.3 图和树简介 1.3.1图的基本概念 1.3.2图的矩阵表示 1.3.3 树的基本知识 1.4 字母表、字符串和语言 习题 第2章 文法的一般理论 2.1 问题的提出 2.2 形式文法与形式语言 2.3 文法的乔姆斯基分类 习题 第3章 有穷自动机 3.1 非形式化描述 3.2 有穷自动机的基本定义 3.3 非确定的有穷自动机 3.4 具有£转移的有穷自动机 3.5 有穷自动机的应用 3.5.1 在文本中查找字符串 3.5.2 用于文本搜索的非确定的有穷自动机 3.5.3 识别关键字集合的DFA 3.6 具有输出的有穷自动机 习题 第4章 正则表达式 4.1 正则表达式的定义 4.2 正则表达式和有穷自动机的关系 4.3则表达式的等价变换 4.3.1 交换律与结合律 4.3.2 单位元与零元 4.3.3 分配律 4.3.4 与“*”构造有关的定律 4.3.5 发现正则表达式定律的一般方法 4.4 正则表达式的应用 4.4.1UNIX中的正则表达式 4.4.2 词法分析 4.4.3 查找文本中的模式 习题 第5章正则语言的性质 5.1 正则文法和有穷自动机的关系 5.2 正则语言的泵引理 5.3 正则语言的封闭性 5.4 正则语言的判定算法 5.5 有穷自动机的最小化 习题 第6章 上下文无关文法 6.1上下文无关文法的语法分析 6.2 上下文无关文法的化简 6.3 上下文无关文法的范式 6.4 上下文无关文法的应用 6.4.1 用上下文无关文法描述语言 6.4.2 语法分析器生成工具YACC …… 第7章 下推自动机 第8章 上下文无关语言的性质 第9章 图灵机导引 第10章 不可判定性 第11章 线性有界自动机和上下文有关文法 第12章 确定的上下文无关语言和LR(k)文法 参考文献 …… 参考资料

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值