【计算理论】【《计算理论导引(原书第3版)》笔记】第一章:正则语言

1.1|有穷自动机

有穷自动机的状态图
  • 起始状态用一个指向它的无出发点的箭头表示
  • 接受状态带有双圈
  • 从一个状态指向另一个状态的箭头称为转移
有穷自动机的形式化定义
  • 有穷自动机是一个 5 5 5元组 ( Q , Σ , δ , q 0 , F ) (Q , \Sigma , \delta , q_{0} , F) (Q,Σ,δ,q0,F),其中

    • Q Q Q是一个有穷集合,称为状态集
    • Σ \Sigma Σ是一个有穷集合,称为字母表
    • δ : Q × Σ → Q \delta : Q \times \Sigma \rightarrow Q δ:Q×ΣQ是转移函数
    • q 0 ∈ Q q_{0} \in Q q0Q是起始状态
    • F ⊆ Q F \subseteq Q FQ是接受状态集
  • A A A是机器 M M M接受的全部字符串集,则称 A A A是机器 M M M的语言,记作 L ( M ) = A L(M) = A L(M)=A,又称 M M M识别 A A A

  • 如果机器不接受任何字符串,它仍然识别一个语言,即空语言 ∅ \emptyset

有穷自动机计算的形式化定义
  • M = ( Q , Σ , δ , q 0 , F ) M = (Q , \Sigma , \delta , q_{0} , F) M=(Q,Σ,δ,q0,F)是一台有穷自动机, w = w 1 w 2 ⋯ w n w = w_{1} w_{2} \cdots w_{n} w=w1w2wn是一个字符串并且其中任一 w i w_{i} wi是字母表 Σ \Sigma Σ的成员,如果存在 Q Q Q中的状态序列 r 0 r_{0} r0 r 1 r_{1} r1 ⋯ \cdots r n r_{n} rn满足下述条件

    • r 0 = q 0 r_{0} = q_{0} r0=q0

    • δ ( r i , ω i + 1 ) = r i + 1 , i = 0 , ⋯   , n − 1 \delta(r_{i} , \omega_{i + 1}) = r_{i + 1} , i = 0 , \cdots , n - 1 δ(ri,ωi+1)=ri+1,i=0,,n1

    • r n ∈ F r_{n} \in F rnF

  • M M M接受 w w w

正则语言
  • 如果一个语言被一台有穷自动机识别,则称它是正则语言
正则运算

A ∪ B = {   x ∣ x ∈ A 或 x ∈ B   } A \cup B = \set{x \mid x \in A 或 x \in B} AB={ xxAxB}

连接(并置)

A ∘ B = {   x y ∣ x ∈ A 且 y ∈ B   } A \circ B = \set{xy \mid x \in A 且 y \in B} AB={ xyxAyB}

星号

A ∗ = {   x 1 x 2 ⋯ x k ∣ k ≥ 0 且每一个 x i ∈ A   } A^{*} = \set{x_{1} x_{2} \cdots x_{k} \mid k \geq 0 且每一个 x_{i} \in A} A={ x1x2xkk0且每一个xiA}

定理
  • 正则语言类在并运算下封闭,换言之,如果 A 1 A_{1} A1 A 2 A_{2} A2是正则语言,则 A 1 ∪ A 2 A_{1} \cup A_{2} A1A2也是正则语言
证明
  • M 1 M_{1} M1识别 A 1 A_{1} A1 M 2 M_{2} M2识别 A 2 A_{2} A2,其中 M 1 = ( Q 1 , Σ , δ 1 , q 1 , F 1 ) M_{1} = (Q_{1} , \Sigma , \delta_{1} , q_{1} , F_{1}) M1=(Q1,Σ,δ1,q1,F1) M 2 = ( Q 2 , Σ , δ 2 , q 2 , F 2 ) M_{2} = (Q_{2} , \Sigma , \delta_{2} , q_{2} , F_{2}) M2=(Q2,Σ,δ2,q2,F2),构造识别 A 1 ∪ A 2 A_{1} \cup A_{2} A1A2 M M M,这里 M = ( Q , Σ , δ , q 0 , F ) M = (Q , \Sigma , \delta , q_{0} , F) M=(Q,Σ,δ,q0,F)

  • Q = {   ( r 1 , r 2 ) ∣ r 1 ∈ Q 1 且 r 2 ∈ Q 2   } Q = \set{(r_{1} , r_{2}) \mid r_{1} \in Q_{1} 且 r_{2} \in Q_{2}} Q={ (r1,r2)r1Q1r2Q2}

  • 转移函数 δ \delta δ定义如下:对每一对 ( r 1 , r 2 ) ∈ Q (r_{1} , r_{2}) \in Q (r1,r2)Q和每一个 a ∈ Σ a \in \Sigma 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))

  • q 0 q_{0} q0是有序对 ( q 1 , q 2 ) (q_{1} , q_{2}) (q1,q2)

  • F F F等于有一个元素是 M 1 M_{1} M1 M 2 M_{2} M2的接受状态的有序对组成的集合 F = {   ( r 1 , r 2 ) ∣ r 1 ∈ F 1 或 r 2 ∈ F 2   } F = \set{(r_{1} , r_{2}) \mid r_{1} \in F_{1} 或 r_{2} \in F_{2}} F={ (r1,r2)r1F1r2F2}或写成 F = ( F 1 × Q 2 ) ∪ ( Q 1 × F 2 ) F = (F_{1} \times Q_{2}) \cup (Q_{1} \times F_{2}) F=(F1×Q2)(Q1×F2)

定理
  • 正则语言类在连接运算下封闭,换言之,如果 A 1 A_{1} A1 A 2 A_{2} A2是正则语言,则 A 1 ∘ A 2 A_{1} \circ A_{2} A1A2也是正则语言
    • 有穷自动机 M M M当它的输入可以被分成两段, M 1 M_{1} M1接受第一段且 M 2 M_{2} M2接受第二段时, M M M才接受输入

1.2|非确定性

确定型有穷自动机 D F A DFA DFA
  • 每一个状态对于字母表中的每一个符号总是恰好有一个转移箭头射出
非确定型有穷自动机 N F A NFA NFA
  • 每一个状态对于字母表中的每一个符号可能有 0 0 0个、 1 1 1个或多个射出的箭头
  • 如果计算分支中至少有一个结束在接受状态,则机器接受
示例
  • 接受所有形如 0 k 0^{k} 0k的字符串的 N F A NFA NFA,其中 k k k 2 2 2 3 3 3的倍数

1

非确定型有穷自动机的形式化定义
  • 对任意的字母表 Σ \Sigma Σ,把 Σ ∪ {   ε   } \Sigma \cup \set{\varepsilon} Σ{ ε}记作 Σ ε \Sigma_{\varepsilon} Σε
  • 非确定型有穷自动机是一个 5 5 5元组 ( Q , Σ , δ , q 0 , F ) (Q , \Sigma , \delta , q_{0} , F) (Q,Σ,δ,q0,F),其中
    • Q Q Q是有穷的状态集
    • Σ \Sigma Σ是有穷的字母表
    • δ : Q × Σ ε → P ( Q ) \delta : Q \times \Sigma_{\varepsilon} \rightarrow \mathcal{P} (Q) δ:Q×ΣεP(Q)是转移函数
    • q 0 ∈ Q q_{0} \in Q q0Q是起始状态
    • F ⊆ Q F \subseteq Q FQ是接受状态集
N F A NFA NFA计算的形式化定义
  • N = ( Q , Σ , δ , q 0 , F ) N = (Q , \Sigma , \delta , q_{0} , F) N=(Q,Σ,δ,q0,F)是一台 N F A NFA NFA w w w是字母表 Σ \Sigma Σ上的一个字符串,如果能把 w w w写成 w = y 1 y 2 ⋯ y m w = y_{1} y_{2} \cdots y_{m} w=y1y2ym,这里每一个 y i y_{i} yi Σ ε \Sigma_{\varepsilon} Σε的一个成员,并且存在 Q Q Q中的状态序列 r 0 r_{0} r0 r 1 r_{1} r1 ⋯ \cdots r m r_{m} rm满足下述 3 3 3个条件

    • r 0 = q 0 r_{0} = q_{0} r0=q0

    • r i + 1 ∈ δ ( r i , y i + 1 ) , i = 0 , 1 , ⋯   , m − 1 r_{i + 1} \in \delta(r_{i} , y_{i + 1}) , i = 0 , 1 , \cdots , m - 1 ri+1δ(ri,yi+1),i=0,1,,m1

    • r m ∈ F r_{m} \in F rmF

  • 则称 N N N接受 w w w

N F A NFA NFA D F A DFA DFA的等价性
  • 如果两台机器识别相同的语言,则称它们是等价的
定理
  • 每一台非确定型有穷自动机都等价于某一台确定型有穷自动机
证明
  • N = ( Q , Σ , δ , q 0 , F ) N = (Q , \Sigma , \delta , q_{0} , F) N=(Q,Σ,δ,q0,F)是识别语言 A A A N F A NFA NFA,构造一台识别语言 A A A D F A   M = ( Q ′ , Σ , δ ′ , q 0 ′ , F ′ ) DFA \ M = (Q^{'} , \Sigma , \delta^{'} , q_{0}^{'} , F^{'}) DFA M=(Q,Σ,δ,q0,F)

  • 假设 N N N没有 ε \varepsilon ε箭头

    • Q ′ = P ( Q ) Q^{'} = \mathcal{P} (Q) Q=P(Q)

    • 对于 R ∈ Q ′ R \in Q^{'} RQ a ∈ Σ a \in \Sigma aΣ,令 δ ′ ( R , a ) = {   q ∈ Q ∣ 存在 r ∈ R , 使得 q ∈ δ ( r , a )   } \delta^{'} (R , a) = \set{q \in Q \mid 存在 r \in R , 使得 q \in \delta(r , a)} δ(R,a)={ qQ存在rR,使得qδ(r,a)}或写成 δ ′ ( R , a ) = ⋃ r ∈ R δ ( r , a ) \delta^{'} (R , a) = \displaystyle\bigcup\limits_{r \in R}{\delta(r , a)} δ(R,a)=rRδ(r,a)

    • q 0 ′ = {   q 0   } q_{0}^{'} = \set{q_{0}} q0={ q0}

    • F ′ = {   R ∈ Q ′ ∣ R 包含 N 的一个接受状态   } F^{'} = \set{R \in Q^{'} \mid R 包含 N 的一个接受状态} F={ RQR包含N的一个接受状态}

  • 假设 N N N ε \varepsilon ε箭头

    • 对于 M M M的任意一个状态 R R R,定义 E ( R ) E(R) E(R)为从 R R R的成员出发只沿着 ε \varepsilon ε箭头可以达到的状态集合,包括 R R R本身的所有成员在内,对于 R ⊆ Q R \subseteq Q RQ E ( R ) = {   q ∣ 从 R 出发沿着 0 个或者多个 ε 箭头可以达到 q   } E(R) = \set{q \mid 从 R 出发沿着 0 个或者多个 \varepsilon 箭头可以达到 q} E(R)={ qR出发沿着0个或者多个ε箭头可以达到q}

    • δ ′ ( R , a ) = {   q ∈ Q ∣ 存在 r ∈ R , 使得 q ∈ E ( δ ( r , a ) )   } \delta^{'} (R , a) = \set{q \in Q \mid 存在 r \in R , 使得 q \in E(\delta(r , a))} δ(R,a)={ qQ存在rR,使得qE(δ(r,a))}

    • q 0 ′ = E ( {   q 0   } ) q_{0}^{'} = E(\set{q_{0}}) q0=E({ q0})

定理
  • 一个语言是正则的,当且仅当有一台 N F A NFA NFA识别它
在正则运算下的封闭性
正则语言类在并运算下封闭
构造

2

证明
  • N 1 = ( Q 1 , Σ , δ 1 , q 1 , F 1 ) N_{1} = (Q_{1} , \Sigma , \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} , \Sigma , \delta_{2} , q_{2} , F_{2}) N2=(Q2,Σ,δ2,q2,F2)识别 A 2 A_{2} A2,构造识别 A 1 ∪ A 2 A_{1} \cup A_{2} A1A2 N = ( Q , Σ , δ , q 0 , F ) N = (Q , \Sigma , \delta , q_{0} , F) N=(Q,Σ,δ,q0,F)

  • Q = {   q 0   } ∪ Q 1 ∪ Q 2 Q = \set{q_{0}} \cup Q_{1} \cup Q_{2} Q={ q0}Q1Q2

  • 状态 q 0 q_{0} q0 N N N的起始状态

  • 接受状态 F = F 1 ∪ F 2 F = F_{1} \cup F_{2} F=F1F2

  • 定义 δ \delta δ如下:对每一个 q ∈ Q q \in Q qQ和每一个 a ∈ Σ ε a \in \Sigma_{\varepsilon} aΣε

δ ( q , a ) = { δ 1 ( q , a ) , q ∈ Q 1 δ 2 ( q , a ) , q ∈ Q 2 {   q 1 , q 2   } , q = q 0 且 a = ε ∅ , q = q 0 且 a ≠ ε \delta(q , a) = \begin{cases} \delta_{1} (q , a) , & q \in Q_{1} \\ \delta_{2} (q , a) , & q \in Q_{2} \\ \set{q_{1} , q_{2}} , & q = q_{0} 且 a = \varepsilon \\ \emptyset , & q = q_{0} 且 a \neq \varepsilon \end{cases} δ(q,a)= δ1(q,a),δ2(q,a),{ q1,q2},,qQ1qQ2q=q0a=εq=q0a=ε

正则语言类在连接运算下封闭
  • N 1 N_{1} N1的每一个接受状态增加一个 ε \varepsilon ε箭头,使得只要 N 1 N_{1} N1在一个接受状态,就允许 N N N非确定性地分支进入 N 2 N_{2} N2
构造

3

证明
  • N 1 = ( Q 1 , Σ , δ 1 , q 1 , F 1 ) N_{1} = (Q_{1} , \Sigma , \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} , \Sigma , \delta_{2} , q_{2} , F_{2}) N2=(Q2,Σ,δ2,q2,F2)识别 A 2 A_{2} A2,构造识别 A 1 ∘ A 2 A_{1} \circ A_{2} A1A2 N = ( Q , Σ , δ , q 1 , F 2 ) N = (Q , \Sigma , \delta , q_{1} , F_{2}) N=(Q,Σ,δ,q1,F2)

  • Q = Q 1 ∪ Q 2 Q = Q_{1} \cup Q_{2} Q=Q1Q2

  • N N N的起始状态是 N 1 N_{1} N1的起始状态 q 1 q_{1} q1

  • N N N的接受状态集是 N 2 N_{2} N2的接受状态集

  • 定义 δ \delta δ如下:对每一个 q ∈ Q q \in Q qQ和每一个 a ∈ Σ ε a \in \Sigma_{\varepsilon} aΣε

δ ( q , a ) = { δ 1 ( q , a ) , q ∈ Q 1 且 q ∉ F 1 δ 1 ( q , a ) , q ∈ F 1 且 a ≠ ε δ 1 ( q , a ) ∪ {   q 2   } , q ∈ F 1 且 a = ε δ 2 ( q , a ) , q ∈ Q 2 \delta(q , a) = \begin{cases} \delta_{1} (q , a) , & q \in Q_{1} 且 q \notin F_{1} \\ \delta_{1} (q , a) , & q \in F_{1} 且 a \neq \varepsilon \\ \delta_{1} (q , a) \cup \set{q_{2}} , & q \in F_{1} 且 a = \varepsilon \\ \delta_{2} (q , a) , & q \in Q_{2} \end{cases} δ(q,a)= δ1(q,a),δ1(q,a),δ1(q,a){ q2},δ2(q,a),qQ1q/F1qF1a=εqF1a=εqQ2

正则语言类在星号运算下封闭
构造

4

证明
  • N 1 = ( Q 1 , Σ , δ 1 , q 1 , F 1 ) N_{1} = (Q_{1} , \Sigma , \delta_{1} , q_{1} , F_{1}) N1=(Q1,Σ,δ1,q1,F1)识别 A 1 A_{1} A1,构造识别 A 1 ∗ A_{1}^{*} A1 N = ( Q , Σ , δ , q 0 , F ) N = (Q , \Sigma , \delta , q_{0} , F) N=(Q,Σ,δ,q0,F)

  • Q = {   q 0   } ∪ Q 1 Q = \set{q_{0}} \cup Q_{1} Q={ q0}Q1

  • q 0 q_{0} q0是新的起始状态

  • F = {   q 0   } ∪ F 1 F = \set{q_{0}} \cup F_{1} F={ q0}F1

  • 定义 δ \delta δ如下,对每一个 q ∈ Q q \in Q qQ和每一个 a ∈ Σ ε a \in \Sigma_{\varepsilon} aΣε

δ ( q , a ) = { δ 1 ( q , a ) , q ∈ Q 1 且 q ∉ F 1 δ 1 ( q , a ) , q ∈ F 1 且 a ≠ ε δ 1 ( q , a ) ∪ {   q 1   } , q ∈ F 1 且 a = ε {   q 1   } , q = q 0 且 a = ε ∅ , q = q 0 且 a ≠ ε \delta (q , a) = \begin{cases} \delta_{1} (q , a) , & q \in Q_{1} 且 q \notin F_{1} \\ \delta_{1} (q , a) , & q \in F_{1} 且 a \neq \varepsilon \\ \delta_{1} (q , a) \cup \set{q_{1}} , & q \in F_{1} 且 a = \varepsilon \\ \set{q_{1}} , & q = q_{0} 且 a = \varepsilon \\ \emptyset , & q = q_{0} 且 a \neq \varepsilon \end{cases} δ(q,a)= δ1(q,a),δ1(q,a),δ1(q,a){ q1},{ q1},,qQ1q/F1qF1a=εqF1a=εq=q0a=εq=q0a=ε


最近更新

  1. TCP协议是安全的吗?

    2023-12-13 15:36:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-13 15:36:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-13 15:36:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-13 15:36:04       18 阅读

热门阅读

  1. C语言变量的作用域,生命周期和链接相关

    2023-12-13 15:36:04       40 阅读
  2. Babylonjs学习笔记(十)——拉伸多边形

    2023-12-13 15:36:04       33 阅读
  3. 名称空间与函数对象

    2023-12-13 15:36:04       35 阅读
  4. 工具:Jupyter

    2023-12-13 15:36:04       38 阅读
  5. 力扣面试150题 | 209.长度最小的子数组

    2023-12-13 15:36:04       34 阅读
  6. 工厂模式实现

    2023-12-13 15:36:04       40 阅读
  7. 力扣labuladong——一刷day70

    2023-12-13 15:36:04       39 阅读
  8. POJ:1113

    2023-12-13 15:36:04       41 阅读
  9. springboot全局异常处理和自定义异常处理

    2023-12-13 15:36:04       40 阅读
  10. 轻松应用字典树

    2023-12-13 15:36:04       41 阅读