视频课程:北大的刘田老师的理论计算机基础
书籍:1.《计算理论导引》,麻省理工,中文翻译本 2. 《computational complexity: a modern approach》,普林斯顿
本质:通过学习这一个课程,解决什么问题是能计算的,什么是不能计算的?有多快,要用多少存储?以及采用什么计算模式?
课程结构:针对上述课程关心的三个问题,分为三大块,
1)自动机:即形式语言、自动机;采用什么计算模型?
2)可计算性:即可计算理论及算法;解决哪些是可计算的、哪些是不可计算的?
3)复杂性:即计算复杂性理论;要用多少时间、要用多少存储?
1 自动机与语言
这一部分解决:有哪些计算装置?能力如何?
包括有穷自动机、下推自动机、图灵机
1.1 有穷自动机与正则语言
包括确定性有穷自动机(deterministic finite automaton,DFA)、非确定性有穷自动机(nondeterministic finite automaton,NFA)
1.1.1 确定性有穷自动机DFA
有穷自动机两个要素:状态、转移
一般用状态图或状态表来表示自动机
有穷指的的是有穷个状态,确定指的是接受输入后状态的转移是确定的
接受状态、拒绝状态、初始状态
马尔科夫链
有穷自动机的形式定义:一个5元组
计算的形式定义:
如果一个语言被一台有穷自动机识别,则称它是正则语言
正则运算:包括连接、并、星号(注意不包括补、交)
正则语言对正则运算封闭,也对补运算、交运算封闭(即对A,B两个正则语言做并、连接、星号、补或交运算之后仍然是正则语言)
补运算证明思路:只要将接受状态改动下即可补运算
并运算证明思路:让两个自动机同时运行 只要两个自动机有一个接受 我就接受
交运算证明思路:1)交可以根据布尔运算转化为补和并2)构造自动机,让2个自动机同时运行
连接运算证明思路:还是运行2自动机,和交运算并运算不同,不是同时运行,是先后运行;把输入分割为2部分,先后输入到2自动机,难点是何处断开;当遇到第一个断开点,第一个自动机不停继续走,第二个自动机开始启动,那么每次遇到一个断开点,第一个自动机保留一个副本,继续往下走,第二个自动机启动新副本从这儿往下走;那么只要控制断开点是常数个,就可以设计有穷自动机了
星号运算证明思路:类似证明,不过是启动一个自动机,把输入串截成若干段,每段都是接受的,每段都是重启自动机,难点和连接运算一样,在何处截断?
1.1.2 非确定性有穷自动机NFA
下一个状态可以不唯一确定
包含ε移动,多种选择(含0种选择)
计算树
非确定性自动机可以让证明简单,也可以让自动机变得简单
非确定性自动机是概念上的突破 更简单
确定性自动机的状态数更多,计算简单:描述复杂,分析简单
非确定性自动机状态数简单,计算复杂:描述简单,分析复杂
确定性自动机是真实的
非确定性自动机只是方便分析,没有实物,无法制造,只是数学概念
非确定有穷自动机的形式定义:
等价性:每台DFA都有对应的NFA,两台机器识别相同语言
推论:一个语言是正则的,当且仅当有一台NFA识别它
用NFA对正则运算的封闭性证明更加简单,用ε移动连接一下就搞定了
1.1.3 正则表达式
正则表达式是描述模式的手段
正则表达式形式定义:
省略最外层括号
规定优先级,星号 > 连接 > 并
正则表达式 等价于 正则语言 等价于 有穷自动机
利用泵引理证明一个语言是非正则语言
1.2 下推自动机与上下文无关文法
1.2.1 上下文无关文法
文法 文法(生成的)语言
产生式 替换规则 产生式缩写
变元 非终结符 初始符
非变元 终结符
派生 语法分析树
上下文无关文法CFG定义
上下文无关文法生成的语言称为上下文无关语言CFG
设计CFG:合并、正则、匹配、递归
正则语言是实际上CFG的一种特例
ww是上下文有关的 非ww是上下文有关的
定理:CFG对并运算封闭
定理:正则语言都是上下文无关语言
最左派生 文法的歧义性 歧义文法 固有歧义语言
非确定性
乔姆斯基范式CNF
定理:任意CFG都有等价的CNF
形式语言:零型文法(任意图灵机识别的文法TM) 一型文法(上下文有关文法 线性有界自动机LBA) 二型文法(上下文无关文法 下推自动机PDA) 三型文法(典型代表正则表达式 NFA DFA)
1.2.2 下推自动机PDA
比非确定性有穷自动机多了个设备--栈,栈可以做推入和弹出
下推自动机有非确定性的,这个非确定性直接扩展了下推自动机的能力,比如固有歧义文法,和有穷自动机不同,有穷自动机的确定性与否,实际上是等价的,不改变自动机的能力
所以一般下推自动机指非确定性下推自动机,即PDA即NPDA
形式定义,6元组
PDA计算
另一个例子