当前位置: 首页 > article >正文

个人用计算理论导引笔记(待补充)

文章目录

  • 一、正则语言
  • 二、上下文无关文法(CFG)
    • CFG生成
      • 合并
      • 正则语言生成
    • 语法分析树
    • 文法歧义性
    • 乔姆斯基范式(CNF)
      • 生成CNF
    • 下推自动机(PDA,通常指的是非确定性下推自动机)
    • 上下文无关语言CFL
      • CFL的泵引理(一个CFL必定有泵)
  • 三、图灵机
    • 单带图灵机(TM)
    • 图灵机的等价变形
      • 多带图灵机(同时多个纸带)
      • 非确定性图灵机(NTM)
    • 图灵机算法
    • 递归定理
      • 图灵机接受性问题
      • 图灵机极小性问题
      • 不动点(x=f(x))
  • 四、可计算问题/不可计算问题
    • 对于正则语言的可判定问题
    • 关于上下文无关语言(CFL)的可判定问题
    • 不可计算问题
    • 用对角化方法证明不可计算问题
    • 非图灵可识别语言
    • 归约法

一、正则语言

预备知识

字母表:任意非空有穷集合
字符串:用字母表中的字母组成的序列,比如 Σ = { 0 , 1 } , x = 01001 \Sigma=\{0,1\},x=01001 Σ={0,1},x=01001
连接:首尾连接,如 x = 01001 , w = a b c d e , x w = 01001 a b c d e x=01001,w=abcde,xw=01001abcde x=01001,w=abcde,xw=01001abcde
(特别地, x . . . x = x n x...x=x^n x...x=xn,表示n个x首尾连接)
串长度: x = 01001 , ∣ x ∣ = 5 x=01001,|x|=5 x=01001,x=5
空串: ε , ∣ ε ∣ = 0 , x 0 = ε \varepsilon,|\varepsilon|=0,x^0=\varepsilon ε,ε=0,x0=ε
(空串 ≠ \neq =空格!)
子串&子序列:略
串的标准序:并非字典序!而是先比较长度,再逐位比较大小!
语言:由字符串组成的集合,令字母表为 Σ \Sigma Σ(里面的串要根据标准序排列
Σ ∗ \Sigma^* Σ Σ \Sigma Σ有穷长度的串(包括 ε \varepsilon ε
Σ + \Sigma^+ Σ+ Σ \Sigma Σ正有穷长度的串(不包括 ε \varepsilon ε
Σ ’ \Sigma^’ Σ Σ \Sigma Σ无穷长度的串
Φ \varPhi Φ:空语言
(与空串语言 { ε } \{\varepsilon\} {ε}不同!空串语言 { ε } \{\varepsilon\} {ε}也与空串 ε \varepsilon ε不同!)
语言连接:类似于笛卡尔积,两两搭配。 A B = { x y ∣ x ∈ a , y ∈ b } AB=\{xy|x\in a,y\in b\} AB={xyxa,yb}
(特殊地, { ε } A = A { ε } = A \{\varepsilon\}A=A\{\varepsilon\}=A {ε}A=A{ε}=A, Φ A = A Φ = Φ \varPhi A=A\varPhi =\varPhi ΦA=AΦ=Φ

确定性有穷自动机(DFA)

M = ( Q , Σ , δ , q 0 , F ) M=(Q,\Sigma,\delta,q_0,F) M=(Q,Σ,δ,q0,F)
Q Q Q:有穷状态集
Σ \Sigma Σ:输入字母表
δ : Q × Σ → Q \delta:Q \times \Sigma \rightarrow Q δ:Q×ΣQ转移函数,也就是映射关系)
(特殊地, Q × Σ ∗ → Q Q \times \Sigma^* \rightarrow Q Q×ΣQ(多了个空串)为扩展转移函数
q 0 q_0 q0:初始状态
F F F:接受状态/终止状态
语言:能够被自动机接受的串集合 L ( M ) = { w ∈ Σ ∗ ∣ δ ( q 0 , w ) ∈ F } L(M)=\{w\in \Sigma^*|\delta(q_0,w)\in F\} L(M)={wΣδ(q0,w)F}
正则语言:可以被有穷自动机接受的语言/可以用正则表达式描述的语言
在这里插入图片描述

设计DFA

  1. 确定状态集
  2. 确定转移函数
  3. 标注初始状态&终结状态

正则运算

正则语言对正则计算封闭!
正则语言的**交并补、差、对称差、连接、*(星号)**封闭!
A ∪ B = { x ∣ x ∈ A 或 x ∈ B } A\cup B=\{x|x\in A或x\in B\} AB={xxAxB}
A B = { x y ∣ x ∈ A 且 y ∈ B } AB=\{xy|x\in A且y\in B\} AB={xyxAyB}
A ∗ = A 0 ∪ A 1 ∪ A 2 ∪ . . . A^*=A^0\cup A^1\cup A^2\cup... A=A0A1A2...(见前,包括 ε \varepsilon ε

非确定性有穷自动机(NFA,含有 ε \varepsilon ε,下一个状态可以有若干种选择(包括0种))

筹码集:字符集中只有 ε \varepsilon ε一种字符语言
M = ( Q , Σ ε , δ , q 0 , F ) M=(Q,\Sigma_{\varepsilon},\delta,q_0,F) M=(Q,Σε,δ,q0,F)
Q Q Q:有穷状态集
Σ \Sigma Σ:输入字母表( Σ ε = Σ ∪ { ε } \Sigma_{\varepsilon}=\Sigma\cup\{\varepsilon\} Σε=Σ{ε}
δ : Q × Σ ε → P ( Q ) \delta:Q \times \Sigma_{\varepsilon} \rightarrow P(Q) δ:Q×ΣεP(Q)转移函数
q 0 q_0 q0:初始状态
F F F:接受状态/终止状态

任何一个NFA都有等价的DFA!
一个语言是正则语言,当且仅当只有一个NFA可以识别!
(具体转换见其他)

正则表达式

定义

对于 R R R,有

  1. a a a表示语言 { a } \{a\} {a},其中 a ∈ Σ a\in\Sigma aΣ(包括 ε \varepsilon ε
  2. Φ \varPhi Φ表示空语言
  3. R = ( R 1 ∪ R 2 ) R=(R_1\cup R_2) R=(R1R2)是正则表达式
  4. R = ( R 1 ∘ R 2 ) R=(R_1\circ R_2) R=(R1R2)是正则表达式
  5. R = ( R 1 ∗ ) R=(R_1^*) R=(R1)是正则表达式

R R R是正则表达式

eg:数值常量:
{ + , − , ε } ( D D ∗ ∪ D D ∗ . D ∗ ∪ D ∗ . D D ∗ ) , D = { 0 , 1 , 2 , . . . , 9 } \{+,-,\varepsilon\}(DD^*\cup DD^*.D^*\cup D^*.DD^*),D=\{0,1,2,...,9\} {+,,ε}(DDDD.DD.DD),D={0,1,2,...,9}
eg:72、3.14159、+7.、-.01

计算优先级

星号 ∗ > *> >连接 > > > ∪ \cup

定理

Φ ∗ = { ε } \varPhi^*=\{\varepsilon\} Φ={ε}
R ∪ Φ = R R\cup\varPhi=R RΦ=R
R ε = R R\varepsilon=R =R
R ∪ ε = R ∪ { ε } ≠ R R\cup \varepsilon=R\cup \{\varepsilon\}\neq R Rε=R{ε}=R
R Φ = Φ ≠ R R\varPhi=\varPhi\neq R RΦ=Φ=R

正则表达式与一个确定自动机等价!

GNFA(广义非确定自动机,NFA的推广)

与NFA不同的是,转移用的并非是单个字符,而是一个正则表达式!
G = ( Q , Σ , δ , q s t a r t , q a c c e p t ) G=(Q,\Sigma,\delta,q_{start},q_{accept}) G=(Q,Σ,δ,qstart,qaccept)
Q Q Q:有穷状态集
Σ \Sigma Σ:输入字母表( Σ ε = Σ ∪ { ε } \Sigma_{\varepsilon}=\Sigma\cup\{\varepsilon\} Σε=Σ{ε}
δ : ( Q − { q a c c e p t } ) × ( Q − { q s t a r t } ) → R \delta:(Q-\{q_{accept}\}) \times (Q-\{q_{start}\}) \rightarrow R δ:(Q{qaccept})×(Q{qstart})R
与NFA不同的是,转移状态用的并非是单个字符,而是一个正则表达式!
q s t a r t q_{start} qstart:初始状态
q a c c e p t q_{accept} qaccept:接受状态/终止状态

CONVERT(G)(过程函数)

对于任意GNFA G, C O N V E R T ( G ) CONVERT(G) CONVERT(G) G G G等价!
对于 G G G的状态数 k k k k = 2 k=2 k=2时, C O N V E R T ( G ) = δ ( q s t a r t , q a c c e p t ) CONVERT(G)=\delta(q_{start},q_{accept}) CONVERT(G)=δ(qstart,qaccept)
k > 2 k>2 k>2时,令 q r i p ∈ Q − { q s t a r t } − { q a c c e p t } , Q ′ = Q − q r i p q_{rip}\in Q-\{q_{start}\}-\{q_{accept}\},Q'=Q-{q_{rip}} qripQ{qstart}{qaccept},Q=Qqrip
构造 G ′ = ( Q ′ , Σ ε , δ ′ , q s t a r t , q a c c e p t ) G'=(Q',\Sigma_{\varepsilon},\delta',q_{start},q_{accept}) G=(Q,Σε,δ,qstart,qaccept),如此循环直到 k = 2 k=2 k=2
其中,对于每个非起始态 q i q_i qi与每个非终结态 q j q_j qj δ ′ ( 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)
其中 R 1 = δ ( q i , q r i p ) , R 2 = δ ( q r i p , q r i p ) , R 3 = δ ( q r i p , q j ) , R 4 = δ ( q i , q j ) R_1=\delta(q_i,q_{rip}),R_2=\delta(q_{rip},q_{rip}),R_3=\delta(q_{rip},q_{j}),R_4=\delta(q_i,q_j) R1=δ(qi,qrip),R2=δ(qrip,qrip),R3=δ(qrip,qj),R4=δ(qi,qj)
(选择 i → j i\rightarrow j ij i → ( r i p ) ∗ → j i\rightarrow (rip)^*\rightarrow j i(rip)j的并集来转移状态不断递归)

转化方法

  1. 增加新的起始点与终结点,并将其与原来的起始点/终结点用 ε \varepsilon ε连接
    (类似最大流的源点与汇点,使得起始点没有入度,终结点没有出度在这里插入图片描述
  2. 合并平行边
    在这里插入图片描述
  3. 去除中心点(使得点减少更精简
    在这里插入图片描述
    以下图为例。
    1.添加新起始点s新终结点a,用 ε \varepsilon ε连接。
    2.将状态2去消除中心点,变为 b ( a ∪ b ) ∗ b(a\cup b)^* b(ab)后删除状态2
    3.将状态1去消除中心点,变为 a ∗ b ( a ∪ b ) ∗ a^*b(a\cup b)^* ab(ab),结束。
    (合并的时候,如果有不含 ε \varepsilon ε的部分,则消去所有 ε \varepsilon ε,否则不消去!)
    在这里插入图片描述
    以下图为例。
    1.添加新起始点s新终结点a,用 ε \varepsilon ε连接。
    2.将状态1去消除中心点
    (消除路径经过1的、且不是回路的)
    (1)把 2 → a 1 → b 3 2\xrightarrow{a}1\xrightarrow{b}3 2a 1b 3变为 2 → a b 3 2\xrightarrow{ab}3 2ab 3
    (2)把 3 → b 1 → a 2 3\xrightarrow{b}1\xrightarrow{a}2 3b 1a 2 3 → a 2 3\xrightarrow{a}2 3a 2变为 3 → b a ∪ a 2 3\xrightarrow {ba\cup a}2 3baa 2
    (消除新起始点/新终结点相关的)
    (3)把 s → ε 1 → a 2 s\xrightarrow{\varepsilon}1\xrightarrow{a}2 sε 1a 2变为 s → a 2 s\xrightarrow{a}2 sa 2
    (4)把 s → ε 1 → b 3 s\xrightarrow{\varepsilon}1\xrightarrow{b}3 sε 1b 3变为 s → b 3 s\xrightarrow{b}3 sb 3
    (消除路径经过1的、且是回路的)
    (5)把 2 → a 1 → a 2 2\xrightarrow{a}1\xrightarrow{a}2 2a 1a 2 2 → b 2 2\xrightarrow{b}2 2b 2变为 2 → a a ∪ b 2 2\xrightarrow {aa\cup b}2 2aab 2
    (6)把 3 → b 1 → b 3 3\xrightarrow{b}1\xrightarrow{b}3 3b 1b 3变为 3 → b b 3 3\xrightarrow{bb}3 3bb 3
    3.将状态2去消除中心点
    (1)将 s → a 2 → ε a s\xrightarrow{a}2\xrightarrow{\varepsilon}a sa 2ε a 2 → a a ∪ b 2 2\xrightarrow{aa\cup b}2 2aab 2变为 s → a ( a a ∪ b ) ∗ a s\xrightarrow{a(aa\cup b)^*}a sa(aab) a
    (2)将 s → b 3 s\xrightarrow{b}3 sb 3 s → a 2 → a a ∪ b 2 → a b 3 s\xrightarrow{a}2\xrightarrow{aa\cup b}2\xrightarrow{ab}3 sa 2aab 2ab 3变为 s → a ( a a ∪ b ) ∗ a b ∪ b 3 s\xrightarrow{a(aa\cup b)^*ab\cup b}3 sa(aab)abb 3
    (因为 3 → ε a 3\xrightarrow{\varepsilon}a 3ε a,所以状态3也是终结状态)
    (3)将 3 → b b 3 3\xrightarrow{bb}3 3bb 3 3 → b a ∪ a 2 → a a ∪ b 2 → a b 3 3\xrightarrow{ba\cup a}2\xrightarrow{aa\cup b}2\xrightarrow{ab}3 3baa 2aab 2ab 3变为 3 → ( b a ∪ a ) ( a a ∪ b ) ∗ a b ∪ b b 3 3\xrightarrow{(ba\cup a)(aa\cup b)^*ab\cup bb}3 3(baa)(aab)abbb 3
    (4)将 3 → ε a 3\xrightarrow{\varepsilon}a 3ε a 3 → b a ∪ a 2 → a a ∪ b 2 → ε a 3\xrightarrow{ba\cup a}2\xrightarrow{aa\cup b}2\xrightarrow{\varepsilon}a 3baa 2aab 2ε a变为 3 → b a ∪ a ( a a ∪ b ) ∗ ∪ ε a 3\xrightarrow{ba\cup a(aa\cup b)^*\cup\varepsilon}a 3baa(aab)ε a
    4.将状态3去消除中心点
    s → a ( a a ∪ b ) ∗ a b ∪ b 3 s\xrightarrow{a(aa\cup b)^*ab\cup b}3 sa(aab)abb 3 3 → ( b a ∪ a ) ( a a ∪ b ) ∗ a b ∪ b b 3 3\xrightarrow{(ba\cup a)(aa\cup b)^*ab\cup bb}3 3(baa)(aab)abbb 3 3 → b a ∪ a ( a a ∪ b ) ∗ ∪ ε a 3\xrightarrow{ba\cup a(aa\cup b)^*\cup\varepsilon}a 3baa(aab)ε a
    s → a ( a a ∪ b ) ∗ a s\xrightarrow{a(aa\cup b)^*}a sa(aab) a变为
    s → ( a ( a a ∪ b ) ∗ a b ∪ b ) ( ( b a ∪ a ) ( a a ∪ b ) ∗ a b ∪ b b ) ∗ ( b a ∪ a ( a a ∪ b ) ∗ ∪ ε ) ∪ ( a ( a a ∪ b ) ∗ ) a s\xrightarrow{(a(aa\cup b)^*ab\cup b)((ba\cup a)(aa\cup b)^*ab\cup bb)^*(ba\cup a(aa\cup b)^*\cup\varepsilon)\cup(a(aa\cup b)^*)}a s(a(aab)abb)((baa)(aab)abbb)(baa(aab)ε)(a(aab)) a
    在这里插入图片描述

泵引理(一个正则语言一定存在泵长度)

A A A是正则语言,则存在常数 p p p p p p泵长度,类似最大循环节长度),若 s ∈ A s\in A sA ∣ s ∣ ≥ p |s|\geq p sp
s = x y z s=xyz s=xyz,并且满足:
(1) ∀ i ≥ 0 , x y i z ∈ A \forall i\geq0,xy^iz\in A i0xyizA
(2) ∣ y ∣ > 0 |y|>0 y>0
(3) ∣ x y ∣ ≤ p |xy|\leq p xyp
在这里插入图片描述
如果要证明一个语言不是正则的,则用反证法找一个反例即可。在这里插入图片描述

在这里插入图片描述

二、上下文无关文法(CFG)

G = ( V , Σ , R , S ) G=(V,\Sigma,R,S) G=(V,Σ,R,S)
V V V:有穷变元集
Σ \Sigma Σ:有穷终结符集
R R R:有穷规则集(形如 A → w , w ∈ ( V ∪ Σ ) ∗ A\rightarrow w,w\in(V\cup\Sigma)^* Aw,w(VΣ)
S ∈ V S\in V SV:初始变元
一个上下文无关语言(CFL)与上下文无关文法等价!

CFG生成

合并

对于原本的初始变元 S 1 , S 2 , . . . S k S_1,S_2,...S_k S1,S2,...Sk,新增规则 S → S 1 ∣ S 2 ∣ . . . S k S\rightarrow S_1|S_2|...S_k SS1S2∣...Sk

正则语言生成

用DFA转化为等价的CFG(正则语言都是上下文无关语言!)
对于原DFA中 δ ( q i , a ) = q j \delta(q_i,a)=q_j δ(qi,a)=qj(即 q i → a q j q_i\xrightarrow{a}q_j qia qj),则令 R i → a R j R_i\rightarrow aR_j RiaRj
对于原DFA中 q i ∈ F q_i\in F qiF(即 q i q_i qi为终止状态),则令 R i → ε R_i\rightarrow \varepsilon Riε

语法分析树

在这里插入图片描述
在这里插入图片描述

文法歧义性

最左派生:每一步都优先替换最左边的变元
eg1: < E X P R > <EXPR> <EXPR>
⇒ < E X P R > + < E X P R > \Rightarrow <EXPR>+<EXPR> ⇒<EXPR>+<EXPR>
⇒ a + < E X P R > \Rightarrow a+<EXPR> a+<EXPR>
⇒ a + < E X P R > × < E X P R > \Rightarrow a+<EXPR>\times<EXPR> a+<EXPR>×<EXPR>
⇒ a + a × < E X P R > \Rightarrow a+a\times<EXPR> a+a×<EXPR>
⇒ a + a × a \Rightarrow a+a\times a a+a×a
eg2: < E X P R > <EXPR> <EXPR>
⇒ < E X P R > × < E X P R > \Rightarrow <EXPR>\times<EXPR> ⇒<EXPR>×<EXPR>
⇒ < E X P R > + < E X P R > × < E X P R > \Rightarrow <EXPR>+<EXPR>\times<EXPR> ⇒<EXPR>+<EXPR>×<EXPR>
⇒ a + < E X P R > × < E X P R > \Rightarrow a+<EXPR>\times<EXPR> a+<EXPR>×<EXPR>
⇒ a + a × < E X P R > \Rightarrow a+a\times<EXPR> a+a×<EXPR>
⇒ a + a × a \Rightarrow a+a\times a a+a×a
注意到最左派生产生歧义性,因此这是歧义文法

乔姆斯基范式(CNF)

初始变元不能在式子右方出现
只允许如下形式规则:
S → ε S\rightarrow \varepsilon Sε
A → B C A\rightarrow BC ABC
A → a A\rightarrow a Aa任意终结符

生成CNF

任何的CFG都有等价的CNF!

  1. 添加新初始变元 S 0 S_0 S0与新规则 S 0 → S S_0\rightarrow S S0S(旧初始变元)
  2. 处理所有的 ε \varepsilon ε规则:
    若有非初始变元 A → ε A\rightarrow\varepsilon Aε,则删除之,并修改所有等式右边与 A A A相关的内容。
    B → u A v B\rightarrow uAv BuAv变为 B → u v B\rightarrow uv Buv
    B → u A v A w B\rightarrow uAvAw BuAvAw变为 B → u v A w ∣ u A v w ∣ u v w B\rightarrow uvAw|uAvw|uvw BuvAwuAvwuvw(三种不同的可能情况)
    B → A B\rightarrow A BA变为 B → ε B\rightarrow\varepsilon Bε
    重复以上,知道删除所有 ε \varepsilon ε相关规则为止( S 0 → ε S_0\rightarrow\varepsilon S0ε除外)
  3. 处理所有的单一规则:(左边单个对应右边单个)
    删除 A → B A\rightarrow B AB,并修改所有相关的内容。
    若有 B → u B\rightarrow u Bu,则添加 A → u A\rightarrow u Au
    重复以上,直到删除所有单一规则为止。
  4. 处理 A → u 1 u 2 . . . u k A\rightarrow u_1u_2...u_k Au1u2...uk长规则:
    将其换成 A → u 1 A 1 , A 1 → u 2 A 2 , . . . . . . , A k = u k − 1 u k A\rightarrow u_1A_1,A_1\rightarrow u_2A_2,......,A_{k}=u_{k-1}u_k Au1A1,A1u2A2,......,Ak=uk1uk
  5. 处理终结符:
    引入新变元 U i U_i Ui与新规则 U i → a i U_i\rightarrow a_i Uiai
    A → a i a j A\rightarrow a_ia_j Aaiaj换成 A → U i U j A\rightarrow U_iU_j AUiUj
    A → a i B A\rightarrow a_iB AaiB换成 A → U i B A\rightarrow U_iB AUiB
    A → B a i A\rightarrow Ba_i ABai换成 A → B u i A\rightarrow Bu_i ABui

G : S → A S A ∣ a B G:S\rightarrow ASA|aB G:SASAaB
A → B ∣ S A\rightarrow B|S ABS
B → b ∣ ε B\rightarrow b|\varepsilon Bbε
求等价CNF。

(1)添加新初始变元 S 0 S_0 S0
S 0 → S S_0\rightarrow S S0S
S → A S A ∣ a B S\rightarrow ASA|aB SASAaB
A → B ∣ S A\rightarrow B|S ABS
B → b ∣ ε B\rightarrow b|\varepsilon Bbε
(2)处理B的 ε \varepsilon ε规则
S 0 → S S_0\rightarrow S S0S
S → A S A ∣ a B ∣ a S\rightarrow ASA|aB|a SASAaBa
A → B ∣ S ∣ ε A\rightarrow B|S|\varepsilon ABSε
B → b B\rightarrow b Bb
(3)处理A的 ε \varepsilon ε规则
S 0 → S S_0\rightarrow S S0S
S → A S A ∣ a B ∣ a ∣ S A ∣ A S S\rightarrow ASA|aB|a|SA|AS SASAaBaSAAS S → S S\rightarrow S SS没有用,可以删去)
A → B ∣ S A\rightarrow B|S ABS
B → b B\rightarrow b Bb
(4)处理单一规则 S 0 → S S_0\rightarrow S S0S
S 0 → A S A ∣ a B ∣ a ∣ S A ∣ A S S_0\rightarrow ASA|aB|a|SA|AS S0ASAaBaSAAS
S → A S A ∣ a B ∣ a ∣ S A ∣ A S S\rightarrow ASA|aB|a|SA|AS SASAaBaSAAS
A → B ∣ S A\rightarrow B|S ABS
B → b B\rightarrow b Bb
(5)处理单一规则 A → B A\rightarrow B AB
S 0 → A S A ∣ a B ∣ a ∣ S A ∣ A S S_0\rightarrow ASA|aB|a|SA|AS S0ASAaBaSAAS
S → A S A ∣ a B ∣ a ∣ S A ∣ A S S\rightarrow ASA|aB|a|SA|AS SASAaBaSAAS
A → S ∣ b A\rightarrow S|b ASb
B → b B\rightarrow b Bb
(6)处理单一规则 A → S A\rightarrow S AS
S 0 → A S A ∣ a B ∣ a ∣ S A ∣ A S S_0\rightarrow ASA|aB|a|SA|AS S0ASAaBaSAAS
S → A S A ∣ a B ∣ a ∣ S A ∣ A S S\rightarrow ASA|aB|a|SA|AS SASAaBaSAAS
A → A S A ∣ a B ∣ S A ∣ A S ∣ a ∣ b A\rightarrow ASA|aB|SA|AS|a|b AASAaBSAASab
B → b B\rightarrow b Bb
(7)处理长规则 A S A ASA ASA
S 0 → A A 1 ∣ a B ∣ a ∣ S A ∣ A S S_0\rightarrow AA_1|aB|a|SA|AS S0AA1aBaSAAS
S → A A 1 ∣ a B ∣ a ∣ S A ∣ A S S\rightarrow AA_1|aB|a|SA|AS SAA1aBaSAAS
A → A A 1 ∣ a B ∣ S A ∣ A S ∣ a ∣ b A\rightarrow AA_1|aB|SA|AS|a|b AAA1aBSAASab
B → b B\rightarrow b Bb
A 1 → S A A_1\rightarrow SA A1SA
(8)处理终结符 a a a
S 0 → A A 1 ∣ U B ∣ U ∣ S A ∣ A S S_0\rightarrow AA_1|UB|U|SA|AS S0AA1UBUSAAS
S → A A 1 ∣ U B ∣ U ∣ S A ∣ A S S\rightarrow AA_1|UB|U|SA|AS SAA1UBUSAAS
A → A A 1 ∣ U B ∣ S A ∣ A S ∣ U ∣ B A\rightarrow AA_1|UB|SA|AS|U|B AAA1UBSAASUB
A 1 → S A A_1\rightarrow SA A1SA
B → b B\rightarrow b Bb
U → a U\rightarrow a Ua
于是得到 G G G对应的乔姆斯基范式。

下推自动机(PDA,通常指的是非确定性下推自动机)

组成,每次读入字符后选择与栈顶字符匹配或压入栈。
M = ( Q , Σ , Γ , δ , q 0 , F ) M=(Q,\Sigma,\Gamma,\delta,q_0,F) M=(Q,Σ,Γ,δ,q0,F)
Q Q Q:有穷状态集
Σ \Sigma Σ:输入字母表( Σ ε = Σ ∪ { ε } \Sigma_\varepsilon=\Sigma\cup\{\varepsilon\} Σε=Σ{ε}
Γ \Gamma Γ:栈字母表( Γ ε = Γ ∪ { ε } \Gamma_\varepsilon=\Gamma\cup\{\varepsilon\} Γε=Γ{ε}
δ : Q × Σ ε × Γ ε → P ( Q × Γ ε ) \delta:Q\times\Sigma_{\varepsilon}\times\Gamma_{\varepsilon}\rightarrow P(Q\times\Gamma_{\varepsilon}) δ:Q×Σε×ΓεP(Q×Γε)(转移函数)
q 0 q_0 q0:初始状态( q 0 ∈ Q q_0 \in Q q0Q
F F F:终结状态集( F ⊆ Q F\subseteq Q FQ
在这里插入图片描述
以此图为例,可以绘制出此自动机。
在栈的初始插入一个 $符号,用于判断是否为空栈。
在这里插入图片描述

上下文无关语言CFL

如果一个语言是上下文无关语言(CFL) ⟺ \Longleftrightarrow 下推自动机(PDA)识别这个语言。
CFL对正则运算封闭!
CFL对交 ∩ \cap 不封闭!(语言 A , B A,B A,B是CFL, A ∩ B A\cap B AB不一定是CFL)
CFL对补运算不封闭!(语言 A A A是CFL, A c A^c Ac不一定是CFL)

CFL的泵引理(一个CFL必定有泵)

假设 A A A为上下文无关语言,则存在常数 p p p泵长度,类似循环节最大长度),若 s ∈ A s\in A sA,且 ∣ s ∣ ≥ p |s|\geq p sp
s = u v x y z s=uvxyz s=uvxyz,其中
(1) ∀ i ≥ 0 , u v i x y i z ∈ A \forall i\geq 0,uv^ixy^iz\in A i0,uvixyizA
(2) ∣ v y ∣ > 0 |vy|>0 vy>0
(3) ∣ v x y ∣ ≤ p |vxy|\leq p vxyp

同正则文法一样,找出一个反例证明不是CFL即可!

eg1:证明 C = { a i b j c k ∣ 0 ≤ i ≤ j ≤ k } C=\{a^ib^jc^k|0\leq i\leq j\leq k\} C={aibjck∣0ijk}不是CFL。
prove:假设 C C C为上下文无关语言,设 p p p为泵长度,不妨令 s = a p b p c p s=a^pb^pc^p s=apbpcp
s = u v x y z s=uvxyz s=uvxyz,其中
(1) ∀ i ≥ 0 , u v i x y i z ∈ C \forall i\geq 0,uv^ixy^iz\in C i0,uvixyizC
(2) ∣ v y ∣ > 0 |vy|>0 vy>0(即 v v v y y y至少含一种符号)
(3) ∣ v x y ∣ ≤ p |vxy|\leq p vxyp(即 v v v y y y至多含两种符号,理由同上)

(1): v v v y y y仅含一种符号
①: a a a不在 v v v y y y之中,此时只可能是 a . . . a ⏟ p 个 ∣ ∅ ∣ b . . . b ⏟ p 个 ∣ ∅ ∣ c . . . c ⏟ p 个 \underbrace{a...a}_{p个}|\emptyset|\underbrace{b...b}_{p个}|\emptyset|\underbrace{c...c}_{p个} p a...a∣∅∣p b...b∣∅∣p c...c,违背了 ∣ v y ∣ > 0 |vy|>0 vy>0,矛盾。
②: b b b不在 v v v y y y之中,此时只可能是 a . . . a ⏟ p − i 个 ∣ a . . . a ⏟ i 个 ∣ b . . . b ⏟ p 个 ∣ c . . . c ⏟ i 个 ∣ c . . . c ⏟ p − i 个 \underbrace{a...a}_{p-i个}|\underbrace{a...a}_{i个}|\underbrace{b...b}_{p个}|\underbrace{c...c}_{i个}|\underbrace{c...c}_{p-i个} pi a...ai a...ap b...bi c...cpi c...c,违背了 ∣ v x y ∣ ≤ q |vxy|\leq q vxyq,矛盾。
③: c c c不在 v v v y y y之中,同①,矛盾。
(2): v v v y y y含两种符号
此时易知当 i > 1 i>1 i>1时,就不具有 a p b p c p a^pb^pc^p apbpcp的形式,即 i = 0 i=0 i=0 i = 1 i=1 i=1,矛盾。( ∀ i ≥ 0 \forall i\geq 0 i0才算成立)
综上, C C C不是CFL,证毕。

eg2:证明 D = { w w ∣ w ∈ { 0 , 1 } ∗ } D=\{ww|w\in\{0,1\}^*\} D={www{0,1}}不是CFL。
prove:假设 C C C为上下文无关语言,设 p p p为泵长度,不妨令 s = 0 p 1 p 0 p 1 p s=0^p1^p0^p1^p s=0p1p0p1p
s = u v x y z s=uvxyz s=uvxyz,其中
(1) ∀ i ≥ 0 , u v i x y i z ∈ C \forall i\geq 0,uv^ixy^iz\in C i0,uvixyizC
(2) ∣ v y ∣ > 0 |vy|>0 vy>0(即 v v v y y y至少含一种符号)
(3) ∣ v x y ∣ ≤ p |vxy|\leq p vxyp(即 v v v y y y至多含两种符号)
(注意这里一定要挑一个合适的反例,例如 0 p 1 0 p 1 0^p10^p1 0p10p1可以拆分为 0...0 ⏟ p − 1 个 ∣ 0 ∣ 1 ∣ 0 ∣ 0...0 ⏟ p − 1 个 1 \underbrace{0...0}_{p-1个}|0|1|0|\underbrace{0...0}_{p-1个}1 p1 0...0∣0∣1∣0∣p1 0...01,是合法的。)

(1) v x y vxy vxy在前半部分里,即 v x y vxy vxy在第一个 0 p 1 p 0^p1^p 0p1p内。此时随着 i i i的变化,后半个 0 p 1 p 0^p1^p 0p1p的数量会与前半个不同,不匹配,矛盾。
(2) v x y vxy vxy在后半部分里,同上,矛盾。
(3) v x y vxy vxy横跨中间,则 v v v y y y不可以含两种符号,故 v v v 1 i 1^i 1i y y y 1 i 1^i 1i,同理 i i i的变化会让头尾的两个 0 p 0^p 0p 1 p 1^p 1p数量与内部的两个不同,不匹配,矛盾。
综上, D D D不是CFL,证毕。

三、图灵机

单带图灵机(TM)

有一个纸带序列与一个可以左右双向移动的读写头
M = ( Q , Σ , Γ , δ , q 0 , q a c c , q r e j ) M=(Q,\Sigma,\Gamma,\delta,q_0,q_{acc},q_{rej}) M=(Q,Σ,Γ,δ,q0,qacc,qrej)
Q Q Q:有穷状态集
Σ \Sigma Σ:输入字母表(注意空格符 B ∉ Σ B\notin\Sigma B/Σ
Γ \Gamma Γ:带字母表, Σ ∪ { B } ⊆ Γ \Sigma\cup\{B\}\subseteq\Gamma Σ{B}Γ
δ \delta δ Q × Γ → Q × Γ × { L , R } Q\times\Gamma\rightarrow Q\times\Gamma\times\{L,R\} Q×ΓQ×Γ×{L,R}(转移函数,L/R表示左移/右移
q 0 ∈ Q q_0\in Q q0Q:初始状态
q a c c ∈ Q q_{acc}\in Q qaccQ停机接受状态
q r e q ∈ Q q_{req}\in Q qreqQ停机拒绝状态, q a c c ≠ q r e j q_{acc}\neq q_{rej} qacc=qrej
单带图灵机的格局(序列的当前状态): u q a v uqav uqav
q q q:当前状态
u a v uav uav:当前带上的内容
a a a:当前的扫描符号
(即之前的序列 u u u|当前的状态 q q q|当前的扫描符号 a a a|后面的序列 v v v
eg:对于带 101101111 101101111 101101111,状态 q 7 q_7 q7正在扫描第五个字符 0 0 0,其格局为 1011 q 7 01111 1011q_701111 1011q701111
初始格局 q 0 w q_0w q0w(w为输入串)
接受格局 u q a c c a v uq_{acc}av uqaccav
拒绝格局 u q r e j a v uq_{rej}av uqrejav
停机格局 u q a c c a v / u q r e j a v uq_{acc}av/uq_{rej}av uqaccav/uqrejav
(图灵机的计算结果只能是停机接受停机拒绝不停机
δ ( q i , b ) = ( q j , c , L ) \delta(q_i,b)=(q_j,c,L) δ(qi,b)=(qj,c,L)(L表示左移),则
u a q i b v uaq_ibv uaqibv产生 u q j a c v uq_jacv uqjacv(将 b b b变为 c c c q i q_i qi变为 q j q_j qj后左移)
q i b v q_ibv qibv产生 q j c v q_jcv qjcv(已经在带最左端,不可再左移)
δ ( q i , b ) = ( q j , c , R ) \delta(q_i,b)=(q_j,c,R) δ(qi,b)=(qj,c,R)(R表示右移),则
u a q i b v uaq_ibv uaqibv产生 u a c q j v uacq_jv uacqjv(因为带一定可以继续右移,所以不需要分情况)
如何判断当前状态已经在带最左端:在当前位置写下某个特殊符号,让带头向左移动,若仍然检测到该符号则说明在最左端,否则恢复原来的符号

图灵可识别=递归可枚举=计算可枚举=半可判定=半可计算
图灵可判定=递归=可解=能行=可判定=可计算

图灵可识别 ≠ \neq =图灵可判定!

图灵机的等价变形

多带图灵机(同时多个纸带)

在这里插入图片描述
δ : Q × Γ k → Q × Γ k × { L , R } k \delta:Q\times\Gamma^k\rightarrow Q\times\Gamma^k\times\{L,R\}^k δ:Q×ΓkQ×Γk×{L,R}k
δ : ( q i , a 1 , . . . , a k ) = ( q j , b 1 , . . . , b k , L / R , L / R , . . . , L / R ⏟ k 个 ) \delta:(q_i,a_1,...,a_k)=(q_j,b_1,...,b_k,\underbrace{L/R,L/R,...,L/R}_{k个}) δ:(qi,a1,...,ak)=(qj,b1,...,bk,k L/R,L/R,...,L/R)
多带图灵机可转换为等价的单带图灵机!
图灵可识别 ⇔ \Leftrightarrow 可用多带图灵机识别!

非确定性图灵机(NTM)

左移/右移的基础上增加了“停止”状态 S S S
d e l t a : Q × Γ → P ( Q × Γ × { L , R , S } ) delta:Q\times\Gamma\rightarrow P(Q\times\Gamma\times\{L,R,S\}) delta:Q×ΓP(Q×Γ×{L,R,S})
因此计算NTM格局的方式变为了计算树(拥有多个非确定性分支)
在这里插入图片描述
每个非确定性图灵机(NTM)都有等价的确定性图灵机(DTM)!
图灵可识别 ⇔ \Leftrightarrow 可用非确定性图灵机识别!
图灵可判定 ⇔ \Leftrightarrow 可用非确定性图灵机判定!

识别器:输入 x x x,输出 0 / 1 / ? 0/1/? 0/1/?(停机拒绝/停机接受/不停机
判定器:输入 x x x,输出 0 / 1 0/1 0/1(停机拒绝/停机接受,没有不停机
转换器:输入 x x x,输出 y y y输出一个串而非一位,通常用于计算函数
产生器:输入 0 n 0^n 0n,输出 x n x_n xn(生成序列)
枚举器:输入 ε \varepsilon ε,输出 x 1 , x 2 , x 3 , . . . x_1,x_2,x_3,... x1,x2,x3,...无输入,无遗漏,无多余,无顺序,可重复

图灵可识别 ⇔ \Leftrightarrow 图灵可枚举!

图灵机算法

对象编码写作< O 1 , O 2 , . . . , O k O_1,O_2,...,O_k O1,O2,...,Ok>,表示对串 O 1 O 2 . . . O k O_1O_2...O_k O1O2...Ok进行一种编码转换。
eg:设定一种对 01 01 01串编码的方式,将所有的字符重复出现1次,多个串拼接时用两个不同的字符作为间隔符拼接。
x = 010 , y = 11 , x=010,y=11, x=010,y=11,< x , y x,y x,y> = 001100101111 =001100101111 =001100101111 001100 ∣ 10 ∣ 1111 001100|10|1111 001100∣10∣1111

递归定理

存在可计算函数 q : Σ ∗ → Σ ∗ q:\Sigma^*\rightarrow\Sigma^* q:ΣΣ ∀ w \forall w w q ( w ) q(w) q(w)是图灵机 P w P_w Pw的描述,单带图灵机 P w P_w Pw打印出 w w w,然后停机。(一个函数如果可计算,则和图灵机等价!

自我复制机:自己打印自己的图灵机。 ∀ x , S E L F ( x ) = < S E L F > \forall x,SELF(x)=<SELF> x,SELF(x)=<SELF>(不断地进行自我复制)
递归定理:假设单带图灵机 T T T有计算函数 t : Σ ∗ × Σ ∗ → Σ ∗ t:\Sigma^*\times\Sigma^*\rightarrow\Sigma^* t:Σ×ΣΣ,则存在单带自动机 R R R,其计算函数 r : Σ ∗ × Σ ∗ → Σ ∗ r:\Sigma^*\times\Sigma^*\rightarrow\Sigma^* r:Σ×ΣΣ ∀ w , r ( w ) = t ( \forall w,r(w)=t( w,r(w)=t(< R R R> , w ) ,w) ,w)
T T T可以用 R R R来代替,从而实现递归运算,将问题转化)

图灵机接受性问题

定义 A T M = { < M , w > ∣ 图灵机 M 能接受串 w } A_{TM}=\{<M,w>|图灵机M能接受串w\} ATM={<M,w>图灵机M能接受串w}
一个图灵机能接受某些给定的串构成的语言, 是图灵可识别的!是不可判定的!
在这里插入图片描述
通用机:存在一个固定的图灵机 U U U,对于任意图灵机 M M M与输入 w w w U ( < M , w > ) = M ( w ) U(<M,w>)=M(w) U(<M,w>)=M(w)

图灵机极小性问题

极小图灵机:对于图灵机 M M M,其描述的字符< M M M>是最短的。
(因为图灵机有无穷多种,每种都有等价的极小图灵机,因此 M I N T M MIN_{TM} MINTM是无穷语言。)
M I N T M MIN_{TM} MINTM不是图灵可识别!

不动点(x=f(x))

递归定理的不动点形式:对于 ∀ \forall 可计算函数 t : Σ ∗ → Σ ∗ t:\Sigma^*\rightarrow\Sigma^* t:ΣΣ,存在一个图灵机 F F F,使得 t ( < F > ) t(<F>) t(<F>)描述一个与 F F F等价的图灵机。

四、可计算问题/不可计算问题

算法可解:存在处处停机的等价图灵机。
在这里插入图片描述

对于正则语言的可判定问题

A D F A = { < B , w > ∣ D F A   B 接受串 w } A_{DFA}=\{<B,w>|DFA\ B接受串w\} ADFA={<B,w>DFA B接受串w}是可判定语言
同理 A N F A A_{NFA} ANFA是可判定语言
A R E X = { < R , w > ∣ 正则表达式  R 派生串 w } A_{REX}=\{<R,w>|正则表达式\ R派生串w\} AREX={<R,w>正则表达式 R派生串w}是可判定语言
(因为DFA、NFA、REX提供给图灵机的都是等价的,图灵机能在这三种之间进行转换)
DFA空性 E D F A = { < A > ∣ A 是 D F A 且 L ( A ) = ∅ } E_{DFA}=\{<A>|A是DFA且L(A)=\empty\} EDFA={<A>ADFAL(A)=}是可判定语言
DFA等价性 E Q D F A = { < A , B > ∣ A 与 B 都是 D F A 且 L ( A ) = L ( B ) } EQ_{DFA}=\{<A,B>|A与B都是DFA且L(A)=L(B)\} EQDFA={<A,B>AB都是DFAL(A)=L(B)}是可判定语言

关于上下文无关语言(CFL)的可判定问题

每一个CFL是可判定的!
A C F G = { < G , w > ∣ C F G   G 派生串 w } A_{CFG}=\{<G,w>|CFG\ G派生串w\} ACFG={<G,w>CFG G派生串w}是可判定语言
CFG空性 E C F G = { < G > ∣ C F G   G , L ( G ) = ∅ } E_{CFG}=\{<G>|CFG\ G,L(G)=\emptyset\} ECFG={<G>CFG GL(G)=}是可判定语言
CFG等价性 E Q C F G = { < G , H > ∣ C F G   G , H , L ( G ) = L ( H ) } EQ_{CFG}=\{<G,H>|CFG\ G,H,L(G)=L(H)\} EQCFG={<G,H>CFG G,HL(G)=L(H)}是不可判定语言!

不可计算问题

有理数集可数,实数集不可数!
在这里插入图片描述

用对角化方法证明不可计算问题

对角化方法:在判定结果图上构造一个非图灵机后观察对角线上的判定结果。
eg:定义 A T M = { < M , w > ∣ 图灵机 M 能接受串 w } A_{TM}=\{<M,w>|图灵机M能接受串w\} ATM={<M,w>图灵机M能接受串w}
证明: A T M A_{TM} ATM不可判定。

证:
那只需用对角化法证明 D T M D_{TM} DTM不可判定。
假设存在图灵机 H H H可判定 A T M A_{TM} ATM,即:
H ( < M > , w ) = { 接受 M 接受 w 拒绝 M 不接受 w H(<M>,w)=\left\{\begin{array}{ll} 接受 & M接受w \\ 拒绝 & M不接受w\end{array}\right. H(<M>,w)={接受拒绝M接受wM不接受w
构造 D D D=“对于输入< M M M>, M M M是图灵机”
在输入" M , < M > M,<M> M,<M>"上运行 H H H,如果 H H H接受则拒绝 D D D,反之接受,即:
D ( < M > ) = { 接受 M 不接受 < M > 拒绝 M 接受 < M > D(<M>)=\left\{\begin{array}{ll} 接受 & M不接受<M> \\ 拒绝 & M接受<M>\end{array}\right. D(<M>)={接受拒绝M不接受<M>M接受<M>
(M串是图灵机自己的编码,即所有w中的一部分, D T M D_{TM} DTM A T M A_{TM} ATM的特例。
不妨令 M = D M=D M=D,即:
D ( < D > ) = { 接受 D 不接受 < D > 拒绝 D 接受 < D > D(<D>)=\left\{\begin{array}{ll} 接受 & D不接受<D> \\ 拒绝 & D接受<D>\end{array}\right. D(<D>)={接受拒绝D不接受<D>D接受<D>
显然矛盾,故原命题得证。
如图所示,对于 H ( < M , < M > > ) H(<M,<M>>) H(<M,<M>>) D D D的结果是反过来的,而 D < D > D<D> D<D>上的结果却并不是全部接受。
在这里插入图片描述

非图灵可识别语言

对于 A A A A A A的补集 A c / A ‾ = Σ ∗ − A A^c/\overline{A}=\Sigma^*-A Ac/A=ΣAA可判定 ⇔ \Leftrightarrow A与 A c A^c Ac图灵可识别。可判定语言对布尔运算封闭

归约法

图灵机的停机问题 H A L T T M = { < M , w > ∣ 图灵机 M 在输入 w 上停机 } HALT_{TM}=\{<M,w>|图灵机M在输入w上停机\} HALTTM={<M,w>图灵机M在输入w上停机}是不可判定的。
图灵机空性问题 E T M = { < M > ∣ M 是图灵机且 L ( M ) = ∅ } E_{TM}=\{<M>|M是图灵机且L(M)=\emptyset \} ETM={<M>M是图灵机且L(M)=}是不可判定的
图灵机正则性问题 R E G U L A R T M = { < M > ∣ M 为图灵机且 L ( M ) 正则 } REGULAR_{TM}=\{<M>|M为图灵机且L(M)正则\} REGULARTM={<M>M为图灵机且L(M)正则}是不可判定的。
图灵机等价性问题 E Q T M = { < M 1 , M 2 > ∣ M 1 和 M 2 是图灵机且 L ( M 1 ) = L ( M 2 ) } EQ_{TM}=\{<M_1,M_2>|M_1和M_2是图灵机且L(M_1)=L(M_2)\} EQTM={<M1,M2>M1M2是图灵机且L(M1)=L(M2)}是不可判定的。


http://www.kler.cn/news/356548.html

相关文章:

  • 优选算法第一讲:双指针模块
  • C++(模板进阶)
  • Android 自定义TextView实现文字描边效果
  • 【vue】⾃定义指令+插槽+商品列表案例
  • Windows git 配置
  • HarmonyOS NEXT 应用开发实战(五、页面的生命周期及使用介绍)
  • 人工智能 MiniCPM-V-8B-2.6:单图、多图、视频多模态大模型
  • js 鼠标拖动canvas画布
  • RHCE第三次笔记SSH
  • ParallelsDesktop20最新版本虚拟机 一键切换系统 游戏娱乐两不误
  • 【服务器虚拟化】
  • linux一二三章那些是重点呢
  • SCI英文文献阅读工具【全文翻译】【逐句翻译】
  • python 猜数字游戏
  • Tomcat日志文件详解及catalina.out日志清理方法
  • 鸿蒙ArkTS实用开发技巧: 提高效率的关键知识点
  • 12.个人博客系统(Java项目基于spring和vue)
  • 尚硅谷rabbitmq 2024 Federation配置 第60节答疑
  • 【如何获取股票数据10】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深A股历史分时KDJ数据获取实例演示及接口API说明文档
  • 「从零开始的 Vue 3 系列」:第十二章——Element Plus 组件的二次封装实践(保姆式)