一、多项式规约
1、概念及性质
多项式时间归约:如果问题X和问题Y满足以下两条性质,那么问题X可以在多项式时间归约到问题Y。
- 问题X可以通过多项式时间的基本运算步骤转换为问题Y;
- 问题X多项式次调用求解问题Y的算法
记为 。三点性质: - 若 , 能在多项式时间内求解,则 也能在多项式时间内求解
- 若 , 不能在多项式时间内求解,则 也不能在多项式内求解
- 若 且 ,则 多项式等价,记为 。 中一方能在多项式时间内求解则另一方也能在多项式时间内求解。
2、点独立集和点覆盖
点独立集:在图
中选出若干个顶点,这些顶点之间没有边相连接,称为点独立集。一个图中所有点独立集中点数最多的集合称为图的最大点独立集。
点覆盖:在图
中选出若干个顶点组成集合
,使得图中每一条边的两个顶点都至少有一个顶点在
中,则集合
称为图的点覆盖集。一个图中所有的点覆盖集中点数最少的集合称为图的最小点覆盖。
证明:
由
是点独立集证明
是点覆盖
证明:设
是大小为
的点独立集。则对于图中的任意一条边
,因为
是点独立集,故
不能全在
中,即
至少有一个在
中。因此,集合
能保证对于图中每一条边,该边都至少有一个顶点在
中,
是图的点覆盖。
由
是点覆盖证明
是点独立集
证明:设
是大小为
的点覆盖。则对于图中的任意一条边
,
至少有一个顶点在
中,故在
中,
最多有一个顶点在
中。因此,
是图的点独立集。
综上,
。
3、集合覆盖问题和顶点覆盖问题
问题说明:给定一个集合
和若干
的子集合
,问能否在
中找出
个集合,使得这
个集合的并为
。如下图所示,
集合
的并为集合
。
定义了集合覆盖问题,我们可以将顶点覆盖问题规约到这个问题上去。即证明
。这个问题的证明可以通过如下构造来完成:
- 顶点覆盖问题即为对于给定的图 ,能否找到 个点,使得图中每条边都至少有一个点在这 个点中。
- 对于顶点问题做如下转化:给定一个集合 , 中元素为图中的每条边。对于图中每个顶点 ,我们都建立一个集合 , 中元素为与顶点 相连的边。这样,问题就转化成了在集合 中能否找到 个集合,使得这些集合的并为 。
- 举个例子,下图是一个6个顶点,7条边的图。对于左边的图而言,当
时,
为图的点覆盖;对于右边转化后的集合而言,
的并集为
。
这样,就证明了顶点覆盖 可以多项式规约到集合覆盖。但集合覆盖问题能多项式规约到顶点覆盖问题吗?答案是否定的,因为对于任意的集合 而言,每个元素出现次数可能不是偶数,对于图而言,每条边出现次数一定是偶数,故这种情况下无法通过构图来表示任意一种集合,因此集合覆盖无法规约到顶点覆盖。
4、可满足性问题(SAT)和3-SAT
可满足性问题定义:对于给定的由二元bool变量构成的表达式,例如
。
为bool变量,目的是求解合适的
的值,使得
。
表示“与”,
表示"并",
表示
的非。由此可知,要使得
,那么每个
,进而得到每个
中二元变量
至少有一个为
。
3-SAT:当每个
包含3个bool变量时构成的逻辑表达式
,并求解各个bool变量使得
的问题称为3-SAT问题。如下图即为一个3-SAT问题及其的一个解。
证明:
5、自规约问题
规约问题总结
规约的传递性:若
,则
。
对上面规约问题做一个总结:
二、P,NP和NPC问题
1、P问题
能在多项式时间内解决的问题称为P问题。比如:素数问题。
素数问题:任意给定一个数字
,求
是否是素数的算法。AKS素数测试(又被称为 Agrawal–Kayal–Saxena素数测试 和 Cyclotomic AKS test)是一个决定型素数测试算法 ,由三个来自印度坎普尔理工学院的计算机科学家,Manindra Agrawal、Neeraj Kayal和Nitin Saxena,在2002年8月6日发表于一篇题为素数属于P的论文。
2、NP问题
能在多项式时间内验证的问题称为NP问题。比如:对于3-SAT问题,给出其中一个解法,让你判断这个解法是否是原问题的一个解。可见所有的P问题都可以在多项式时间内去验证,因此,P问题是NP问题的子集。
3、EXP问题
能在指数时间复杂度内解决的问题。NP问题是EXP问题的子集。
4、普遍认为
目前还不能证明
或者
。
5、NPC问题
找出一个已被证明的NPC问题(SAT),所有能规约到这个NPC问题的问题统称为NPC问题。
定理:若
是NPC问题,
是NP问题,
,则
是NPC问题。
三、经典的NPC问题
1、序列问题
哈密尔顿圈:对于给定的图 ,问是否存在一条路,使得经过图 所有顶点并且每个顶点只经过一次。