计算模型
问题与决定性问题
判定性问题
只需要回答"是"或"否"的问题。
如:
- 一个图是否连通?
- 一个数是否是素数?
功能性问题
需要给出一个解决方案的问题。 如 排序,最大流,最大团等等。
本课程只讨论判定性问题。
有限自动机与正则语言
有限自动机是一个五元组
是有限集,称为状态集。 是有限集,称为字母表。 是转移函数。 是初始状态。 是接受状态。
有限自动机计算的形式定义
设
若存在
。 ,对 。 。
则称
识别语言
对于一个有限自动机
正则语言
若存在一个有限自动机
等价
若两个有限自动机的语言相同,则称它们是等价的。
正则运算
- 并:
。 - 连接:
。 - 星号:
,其中 , , 。 即 。 - 补:
。
正则语言对这四种运算封闭。 则相对补与对称差运算也是封闭的。 即
非确定性
当机器处于给定的状态并读入下一个输入符号时,可以知道机器的下一个状态是什么——它是确定的。因此,称这是确定型计算
确定型有限自动机:
非确定性是确定性的推广,因此每一台
确定型有限自动机 (DFA)
非确定型有限自动机 (NFA)
转移箭头函数上的符号可以是
NFA的计算方式
- 若读到输入字符
,机器把自己备份 次或多次,然后从这些备份中选择一个状态,继续读入下一个字符。 - 若读到
,机器将自己备份一次,然后继续读入下一个字符。 - 读入下一个输入符号,若该符号存在于备份状态的转移函数中,则转
,否则停机。 - 机器检查是否有一个备份状态是接受状态。若存在一个副本是接受状态,则接受输入。
对于输入,
NFA 与 DFA 等价
对于每一个
子集构造法
,即 的状态集是 的状态集的幂集。 表示 闭包,即 。 。 ,其中 , 。 。
正则表达式
若
。 。 。 , 和 是正则表达式。 , 和 是正则表达式。 , 是正则表达式。
每个正则表达式
。 。 。 。 。 。
正则表达式与有限自动机等价
-个语言是正则的,当且仅当可以用正则表达式描述它。
由正则表达式构造有限自动机
由有限自动机构造正则表达式
泵引理
若
- 对于任意
, 。 。 。
图灵机
图灵机
是有限集,称为状态集。 是有限集,称为输入字母表,不包含特殊空白符号 。 是有限集,称为带子字母表, ,且 。 是转移函数。即 表示在状态 读入字符 后,将字符 替换为字符 ,转移到状态 ,第三个参数 表示下一步向左 / 向右移动。 是初始状态。 是接受状态。 是拒绝状态,且 。
图灵机的初始化
设
- 输入带:将
放在最左端,其余位置填充 。 - 状态:初始状态为
。 - 读写头:指向第一个字符
。
图灵机的格局
对于一个图灵机
- 状态:
。 - 存储带:存储带上的内容为
,其余为空白符号 。 - 读写头:指向
的第一个字符。
格局的分类
- 起始格局:
。 - 接受格局:
。 - 拒绝格局:
。 - 停机格局:
,其中 。
格局的转移
- 如果
,则 - 如果
,则
图灵机的计算
设
若存在格局序列
。 - 对于
, 。 是停机格局。
则称
图灵机
图灵机运行的结果
- 若
进入接受状态,则停机且接受输入。 - 若
进入拒绝状态,则停机且拒绝输入。 - 否则,
一直运行,不停机。
若图灵机
即对于任意输入,
对于可以识别某个语言的判定器
语言的分类
图灵可识别语言:存在一个图灵机可以识别该语言。
- 也称递归可枚举语言。
- = 递归可枚举
- = 计算可枚举
- = 半可判定
- = 半可计算
- 也称递归可枚举语言。
图灵可判定语言:存在一个图灵机可以判定该语言。
- 也称递归语言。
- = 递归
- = 可解
- = 可行
- = 可判定
- = 可计算
- 也称递归语言。
包含关系:
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;
图灵机的描述
- 形式水平的描述:状态图或转移函数
- 实现水平的描述:读写头的移动与读写,状态的转移
- 高水平的描述:使用日常语言描述 例如
= "对于输入串
- 若
= ,则接受 - 若只有一个
,则接受 - 若
的个数是奇数,则拒绝 - 从带左端隔一个
删除一个 ,转移到步骤 "
由定义,图灵机的输入总是字符串。
有时候要输入数,图,或图灵机等对象,要将对象编码成字符串。
记对象 O
的编码为 <O>
。
特别的,图灵机是有向带权图也可以编码为字符串。
非确定性图灵机
非确定性图灵机
如果计算的某个分支导致接受状态,则机器接受该输入。
称
称一个
每个
每个判定
图灵可识别当且仅当可用非确定型图灵机识别。
图灵可判定当且仅当可用非确定型图灵机判定。