算法导论-第34章-计算模型与NP完全性
34.1 引言
34.1.1 算法与计算模型的关系
非形式地说,算法是为实现某个任务而构造的简单指令集。这是一个非严格的算法定义。
1900年,Hilbert在巴黎举行的世界数学家大会上提出了23个数学问题,其中第10个问题是要设计一个算法来测试多项式是否有整数根,他没有用算法这个术语,而用这样一句短语: “通过有限多次运算就可以决定的过程”。
- 该问题是算法上不可解的,1970年由Yuri Matijasevic解决。关键在于算法的精确定义,后来由Church和Turing分别解决,从此称为丘奇-图灵论题。
- Church使用入演算定义算法和Turing使用图灵机定义算法。
现在严格地讲,一个问题算法可解的等于该问题在图灵机上可解(可判断)。
34.1.2 计算模型的作用
- 对于一个计算任务,有两个问题要解决:
- 该计算任务能否在一个计算机上实现?
- 该计算任务在一个计算机上实现的复杂度?
- 计算模型可以帮助我们解决上述问题,本课程我们主要学习图灵机模型。
- 计算模型的主要作用:
- 可计算性:将问题按计算模型的可计算性进行分类。也就是回答一个问题在某种计算模型上是否可计算,而不计较其计算时间的长短。
- 计算复杂性:将问题按计算模型的计算复杂性(时间和空间)进行分类。
- 可编程性:在计算模型下算法的实现。
34.1.3 几种计算模型的语言识别能力
- 有限状态自动机能够识别正则文法生成的语言;
- 下推自动机能够识别上下文无关文法生成的语言;
- 线性有界自动机能够识别上下文相关文法生成的语言;
- 然而上述自动机不能识别短语结构文法生成的语言。图灵机能够识别短语结构文法生成的所有语言,是一种能力很强的计算模型。
34.2 图灵机模型
- 确定性图灵机DTM
- 非确定性图灵机NTM
34.3 NP完全问题
P问题:
- 确定性图灵机上具有多项式时间算法的判定问题类
NP问题:
- 在非确定性图灵机上多项式时间可解的问题
- 在确定性图灵机上多项式时间可验证的问题
NP完全问题:
- 存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。其定义要满足2个条件:
- 首先,它得是一个NP问题;
- 然后,所有的NP问题都可以约化到它。
- 要证明npc问题的思路就是: 先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它。
问题 A A A 的实例 I I I 多项式时间内转化为问题 B B B 的实例 f ( I ) f(I) f(I),对于 A A A 的输入 I I I 的回答与其对应的 B B B 的输入 f ( I ) f(I) f(I) 一致,则称 A A A 可多项式归约于 B B B,记为 A ≤ p B A \le _pB A≤pB。
如果 B B B 可以多项式时间求解,则 A A A 也可以多项式时间求解。
参考
- https://zhuanlan.zhihu.com/p/73953567
- http://www.matrix67.com/blog/archives/105