Skip to content

计算模型

问题与决定性问题

判定性问题

只需要回答"是"或"否"的问题。

如:

  1. 一个图是否连通?
  2. 一个数是否是素数?

功能性问题

需要给出一个解决方案的问题。 如 排序,最大流,最大团等等。

本课程只讨论判定性问题。

有限自动机与正则语言

有限自动机是一个五元组(Q,Σ,δ,q0,F),其中:

  1. Q 是有限集,称为状态集
  2. Σ 是有限集,称为字母表
  3. δ转移函数
  4. q0Q初始状态
  5. FQ接受状态

有限自动机计算的形式定义

M=(Q,Σ,δ,q0,F) 是一个有限自动机,w=w1w2wn 是一个字符串,其中 wiΣ

若存在 Q 的一个状态序列 r0,r1,,rn,使得:

  1. r0=q0
  2. ri+1=δ(ri,wi+1),对 i=0,1,,n1
  3. rnF

则称 M 接受字符串 w。 记为 δ(r0,w)F

识别语言

对于一个有限自动机 M,若 A={wΣ|δ(q0,w)F},则称 AM 的语言,记为 L(M)=A,也称 M 识别 A

M 识别的语言唯一,不识别任意其他语言。

正则语言

若存在一个有限自动机 M,使得 L(M)=A,则称 A 是一个正则语言

等价

若两个有限自动机的语言相同,则称它们是等价的。

正则运算

  1. 并:AB={w|wA 或 wB}
  2. 连接:AB={w|w=w1w2,w1A,w2B}
  3. 星号:A=A0A1A2,其中 A0={ε}A1=AA2=AA。 即 A={w1w2wn|n0,wiA}
  4. 补:Ac=ΣA

正则语言对这四种运算封闭。 则相对补与对称差运算也是封闭的。 即 AB=ABcAB=(AB)(BA)

非确定性

当机器处于给定的状态并读入下一个输入符号时,可以知道机器的下一个状态是什么——它是确定的。因此,称这是确定型计算 (deterministiccomputation)。在非确定型(nondeterministic)机器中,在任何一点,下一个状态可能存在若干个选择。

确定型有限自动机(DeterministicFiniteAutomaton,DFA)非确定型有限自动机(NondeterministicFiniteAutomaton,NFA)

非确定性是确定性的推广,因此每一台 DFA 自动地是一台 NFA

确定型有限自动机 (DFA)

δ:Q×ΣQ 是一个函数,对于每一个 qQσΣδ(q,σ) 是唯一的。

非确定型有限自动机 (NFA)

δ:Q×ΣεP(Q) 是一个函数,对于每一个 qQσΣεδ(q,σ) 是一个状态集合,可能进入多个状态。

转移箭头函数上的符号可以是 ε,表示可以不读入任何输入就转移。

NFA的计算方式

  1. 若读到输入字符 s,机器把自己备份 0 次或多次,然后从这些备份中选择一个状态,继续读入下一个字符。
  2. 若读到 ε,机器将自己备份一次,然后继续读入下一个字符。
  3. 读入下一个输入符号,若该符号存在于备份状态的转移函数中,则转 1,否则停机。
  4. 机器检查是否有一个备份状态是接受状态。若存在一个副本是接受状态,则接受输入。

对于输入,NFA 计算的路径可能不唯一。

NFA 与 DFA 等价

对于每一个 NFA,都存在一个等价的 DFA

子集构造法

NFAN=(Q,Σ,δ,q0,F)DFAM=(Q,Σ,δ,q0,F)

  1. Q=2Q,即 DFA 的状态集是 NFA 的状态集的幂集。
  2. E 表示 ε 闭包,即 E(S)={q | qS 或 q 可以通过若干个 ε 转移到 S}
  3. q0=E({q0})
  4. δ(S,a)=E(qSδ(q,a)),其中 SQaΣ
  5. F={SQ | SF}

正则表达式

R 是一个正则表达式,则 R

  1. a,aΣ
  2. ε
  3. (R1R2), R1R2 是正则表达式。
  4. (R1R2), R1R2 是正则表达式。
  5. (R1)R1 是正则表达式。

每个正则表达式 R 表示一种正则语言 L(R)

  1. L(a)={a}
  2. L(ε)={ε}
  3. L()=
  4. L(R1R2)=L(R1)L(R2)
  5. L(R1R2)=L(R1)L(R2)
  6. L(R1)=(L(R1))

正则表达式与有限自动机等价

-个语言是正则的,当且仅当可以用正则表达式描述它。

由正则表达式构造有限自动机

由正则表达式构造有限自动机

由有限自动机构造正则表达式

由有限自动机构造正则表达式

泵引理

A 是一个正则语言,则存在一个整数 p,使得对于任意 wA,若 |w|p,则 w 可以被分解为 w=xyz,满足:

  1. 对于任意 i0xyizA
  2. |y|>0
  3. |xy|p

图灵机

图灵机 (TuringMachine,TM) 是一个七元组 (Q,Σ,Γ,δ,q0,qaccept,qreject),其中:

  1. Q 是有限集,称为状态集
  2. Σ 是有限集,称为输入字母表,不包含特殊空白符号
  3. Γ 是有限集,称为带子字母表ΣΓ,且 ΓΣ
  4. δ:Q×ΓQ×Γ×{L,R}转移函数。即 δ(q,a)=(r,b,L/R) 表示在状态 q 读入字符 a 后,将字符 a 替换为字符 b,转移到状态 r,第三个参数 L/R 表示下一步向左 / 向右移动。
  5. q0Q初始状态
  6. qacceptQ接受状态
  7. qrejectQ拒绝状态,且 qrejectqaccept

图灵机的初始化

M=(Q,Σ,Γ,δ,q0,qaccept,qreject) 是一个图灵机,w=w1w2wn 是一个字符串,其中 wiΣ

  1. 输入带:将 w 放在最左端,其余位置填充
  2. 状态:初始状态为 q0
  3. 读写头:指向第一个字符 w1

图灵机的格局

对于一个图灵机 M=(Q,Σ,Γ,δ,q0,qaccept,qreject),设 qQu,vΓ, 则 格局 uqv 表示:

  1. 状态q
  2. 存储带:存储带上的内容为 uv,其余为空白符号
  3. 读写头:指向 v 的第一个字符。

格局的分类

  • 起始格局q0w
  • 接受格局uqacceptv
  • 拒绝格局uqrejectv
  • 停机格局uqv,其中 q{qaccept,qreject}

格局的转移

  • 如果 δ(qi,b)=(qj,c,L),则
    • uaqibvuqjacv
    • qibvqjcv
  • 如果 δ(qi,b)=(qj,c,R),则
    • uaqibvuacqjv

图灵机的计算

M=(Q,Σ,Γ,δ,q0,qaccept,qreject) 是一个图灵机,w=w1w2wn 是一个字符串,其中 wiΣ

若存在格局序列 C1,C2,,Ck,使得

  1. C1=q0w
  2. 对于 i=1,2,,k1CiCi+1
  3. Ck 是停机格局。

则称 M 接受字符串 w

图灵机 M 接受 的所有字符串的集合称为 M 接受 / 识别语言,记为 L(M)

图灵机运行的结果

  • TM 进入接受状态,则停机且接受输入。
  • TM 进入拒绝状态,则停机且拒绝输入。
  • 否则,TM 一直运行,不停机。

若图灵机 M所有输入都停机,则称 M判定器
即对于任意输入,M 要么接受,要么拒绝,不会无限循环

对于可以识别某个语言的判定器 M,称 M 判定该语言。

语言的分类

  • 图灵可识别语言存在一个图灵机可以识别该语言。

    • 也称递归可枚举语言
      • = 递归可枚举
      • = 计算可枚举
      • = 半可判定
      • = 半可计算
  • 图灵可判定语言存在一个图灵机可以判定该语言。

    • 也称递归语言
      • = 递归
      • = 可解
      • = 可行
      • = 可判定
      • = 可计算

包含关系:

mermaid
graph TD
    subgraph turing_recognizable["图灵可识别语言"]
        subgraph turing_decidable["图灵可判定语言"]
            regex_language["正则语言"]
        end
    end
    classDef circleStyle fill:#dd1,color:black,stroke:#333,stroke-width:4px;

    class turing_recognizable circleStyle;
    class turing_decidable circleStyle;
    class regex_language circleStyle;

图灵机的描述

  1. 形式水平的描述:状态图或转移函数
  2. 实现水平的描述:读写头的移动与读写,状态的转移
  3. 高水平的描述:使用日常语言描述 例如

M = "对于输入串 w

  1. w = ϵ,则接受
  2. 若只有一个 0,则接受
  3. 0 的个数是奇数,则拒绝
  4. 从带左端隔一个 0 删除一个 0,转移到步骤 2"

由定义,图灵机的输入总是字符串。
有时候要输入数,图,或图灵机等对象,要将对象编码成字符串。
记对象 O 的编码为 <O>

特别的,图灵机是有向带权图也可以编码为字符串。

输入为对象的图灵机举例

非确定性图灵机

非确定性图灵机 (NondeterministicTuringMachine,NTM) 是一个七元组 (Q,Σ,Γ,δ,q0,qaccept,qreject),它的转移函数是 δ:Q×ΓP(Q×Γ×{L,R})

如果计算的某个分支导致接受状态,则机器接受该输入。

非确定性图灵机举例

NTM M接受 x , 若在 x 上运行 M 时有接受分支。
称一个 NTM 为判定的,若它对所有输入,所有分支都停机。

每个 NTM 都有等价的 DTM
每个判定 NTM 都有等价的判定 DTM

图灵可识别当且仅当可用非确定型图灵机识别。
图灵可判定当且仅当可用非确定型图灵机判定。

数据结构与算法设计复习笔记