关于NP-hard NP-complete问题定义典故与解释证明

NP 是 Non-deterministic Polynomial 的缩写,NP 问题通俗来说是其解的正确性能够被很容易检查的问题,这里"很容易检查"指的是存在一个多项式检查算法。
例如,著名的推销员旅行问题(Travel Saleman Problem or TSP):假设一个推销员需要从香港出发,经过广州,北京,上海,…,等 n 个城市, 最后返回香港。 任意两个城市之间都有飞机直达,但票价不等。现在假设公司只给报销 $C 块钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于 $C?
推销员旅行问题显然是 NP 的。因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。但是,要想知道一条总路费小于 $C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排! 这将是个天文数字。
NP-complete 问题是所有 NP 问题中最难的问题。它的定义是,如果你可以找到一个解决某个 NP-complete 问题的多项式算法,那么所有的 NP 问题都将可以很容易地解决。
通常证明一个问题 A 是 NP-complete 需要两步,第一先证明 A 是 NP 的,即满足容易被检查这个性质; 第二步是构造一个从某个已知的 NP-complete 问题 B 到 A 的多项式变换,使得如果 B 能够被容易地求解,A 也能被容易地解决。这样一来,我们至少需要知道一个 NP-complete 问题。
第一个 NP complete 问题是 SAT 问题,由 COOK 在 1971 年证明。SAT 问题指的是,给定一个包含 n 个布尔变量(只能为真或假) X1,X2,…,Xn 的逻辑析取范式,是否存在它们的一个取值组合,使得该析取范式被满足? 可以用一个具体例子来说明这一问题,假设你要安排一个 1000 人的晚宴,每桌 10 人,共 100 桌。主人给了你一张纸,上面写明其中哪些 人因为江湖恩怨不能坐在同一张桌子上,问是否存在一个满足所有这些约束条件的晚宴安排? 这个问题显然是 NP 的,因为如果有人建议一个安排方式,你可以很容易检查它是否满足所有约束。COOK 证明了这个问题是 NP-complete 的,即如果你有一个好的方法能解决晚宴安排问题,那你就能解决所有的 NP 问题。
这听起来很困难,因为你必须面对所有的 NP 问题,而且现在你并不知道任何的 NP-complete 问题可以利用。COOK 用非确定性图灵机( Non-deterministic Turing Machine ) 巧妙地解决了这一问题。
正式地,NP 问题是用非确定性图灵机来定义的,即所有可以被非确定性图灵机在多项式时间内解决的问题。非确定性图灵机是一个特殊的图灵机,它的定义抓住了"解容易被检查" 这一特性。非确定性图灵机有一个"具有魔力的"猜想部件,只要问题有一个解,它一定可以猜中。例如,只要存在哪怕一个满足约束的晚宴安排方式,或是一个满足旅行预算的行程安排,都无法逃过它的法眼,它可以在瞬间猜中。在猜出这个解以后,检查确认部分和一台普通的确定性图灵机完全相同,也即是等价于任何一个实际的计算机程序。
COOK 证明了,任意一个非确定性图灵机的计算过程,即先猜想再验证的过程,都可以被描述成一个 SAT 问题,这个 SAT 问题实际上总结了该非确定性图灵机在计算过程中必须满足的所有约束条件的总和(包括状态转移,数据读写的方式等等),这样,如果你有一个能解决该 SAT 问题的好的算法,你就可以解决相应的那个非确定性图灵机计算问题,因为每个 NP 问题都不过是一个非确定性图灵机计算问题,所以,如果你可以解决 SAT ,你就可以解决所有 NP 问题。因此,SAT 是一个 NP-complete 问题。
有了一个 NP-complete 问题,剩下的就好办了,我们不用每次都要和非确定性图灵机打交道,而可以用前面介绍的两步走的方法证明其它的 NP-complete 问题。迄今为止,人们已经发现了成千上万的NP-complete 问题,它们都具有容易被检查的性质,包括前面介绍的推销员旅行问题。当然更重要的是,它们是否也容易被求解,这就是著名的 P vs NP 的问题。

未来数学家的挑战
计算量问题
杨照昆;杨重骏
一、前言
二、计算量
三、P 之外?
四、古克定律与 NP-completeness
五、NP-complete 问题之近似解
六、 NP-hardness 与围棋
七、结论


一、前言
有数学家说过「一个好的问题胜过十个好解答」。因为解答一出,此问题已是到了终点,对不断求创新的人们而言,已不构成挑战。而新的问题是源头活水,能开拓新的境界。多数人都不愿沉醉在好的解答中不断的玩味,而希望找到新的问题,不断的思考,摸索。
大家在《数播》上已看见了不少好的问题,尤其最近康明昌教授谈到的费马定理,几何三大难题,都是极有趣的问题。有的已有了解答,有的尚待解决。除了上面的题目外,像四色问题(即任何一个地图只要用四种颜色就可以把国界分开),五次以上方程序的公式解,及数论上质数分布问题,都曾在职业及业余数学家的心目中占有相当的地位。本文所要介绍的是一个最近(1970年代开始)一种许多数学家及电子计算器学家所关心的大问题──NP 问题。 NP 所代表的意思,你看完本文之后自然会明白,现在你不妨记住「NP-hard」这个伟大的字。将来如果你对某人说你的问题是「NP-hard」,他也许就要对你刮目相看了,NP-hard 不但代表 hard(难),而且是 NP 的难!
NP 问题的代表问题之一是售货员旅行问题 (traveling salesman problem)。有一个售货员要开汽车到 n 个指定的城市去推销货物,他必须经过全部的 n 个城。现在他有一个有此 n 城的地图及各城之间的公路距离,试问他应如何取最短的行程从家中出发再到家中?


________________________________________图1 售货员之地图,A,B,C,… 表城名,数字表两城之间之里数。

如图1中,A,B,C,…,G 表示 7 个城市,而售货员要从 A 城出发再回到 A 城并访问 B,C,…,G,所有的城,一个可行的方法是

问题是:这是否是最短的途径?也许更近呢?加起来的结果第一路径总长235里,而第二路径总长为230里,故第二路径较短,但是否存在一个更短的路径呢?目前的方法接近一个一个的排着试,还没有找到更好可以寻得最短路径的方法。对七个城而言,共有 6!=720 个排法,尚不算难,但若有 20 个城,则排法就有 19! 种。因故在排列组合里 n! 写起来轻松,但 1.21 x 1017 是一个大得不得了的数字,若每秒钟排一次,要排 3.84 x 109 年(一年约为 3.15 x 107 秒),即使使用计算器,每秒排一百万次(不容易做到)也得重做三千年才能找到答案。「生也有涯,知也无涯」,想不到区区二十个城,要三十个世纪才能找到答案。
由于电子计算器的发展,有许多以前认为枉费时的计算,像行列式之值,反矩阵,高次方程式的解,都可以在极短的时间内解决。但也突然出现了一些新问题,连大型计算器也望之兴叹。像售货员问题,因为找不到比硬排好得很多的做法,使得数学家们开始想要证明,根本找不到比硬排好得很多的做法。这个证明至今尚未找到。就像以前一角三等分问题一样,既然找了几千年找不到用圆规直尺三等分任一角的方法,也许我们可以证明绝对不可能用圆规直尺三等分一角。现在我们要证明绝不可能写一个计算器程序大大的简化售货员旅行问题。与三等分一角问题不同的是,前者是一种数学上的好奇,而当今的问题与实际用途却有密切的关连。
在此我们一直强调一个好得很多的方法。原因是对这类的问题,你若能计算快一倍或十倍、千倍,往往起不了什么大作用,好像刚才的二十城旅行问题,即使快了千倍,仍需三年的计算时间,而再加三城立刻就把这个计算法的效果抵消了,因此我们所要的是计算量基本层次的减少,这就是我们在下一节所要讨论的。
二、计算量
计算量,顾名思意,是指解决某问题所需要计算的时间,但因每个复杂问题的计算往往都要经过许多不同的运算,除加减乘除四则外,还要包含比较,取数据,存数据等等,若仔细计算起来,十分困难,一般都只绘出一两个主要的量,加以统计,以上节中售货员旅行问题为例,其主要的工作是对每一个排法加起总路径之长,因对 n 城而言,有 (n-1)! 的排法,我们就定其计算量为 O(n!),即在 n! 之层次(order 即 O 缩写之来源)之内。
举二个例子,我们若要求 n 个数的和或平均值,则其计算量为 O(n)。但若我们要把 n 个数字依次排列,则其计算量会因做法的不同而有相当的差别,一个直接了当的方法是,先求出最大的(比 (n-1) 次),再从不是最大的中间求次大的(比 (n-2) 次),再求第三大的(比 (n-3) 次),……如此一共比了

次就可以完成此工作。因此我们以 O(n2),即在 n2 之层次来表此方法的计算量。另外一种快排法,先把 n 个数分成若干小块,每块排好之后再合起来,则可以证明此种方法之计算量为 1 ,因排数字与排名字,电话号码相同,这种排法很有实用价值,例如某大城有一百万户,则 n2=1012,而 只有 2 x 107,其差别三个月与一分钟之比。
一般计算量的层次多以下表来区分,


在上表中,k 为某一大于 2 的正整数,它们中间都有一道鸿沟,有基本层之不同,在计算器理论上,若某人能发现一个新的方法,降低一个层次的计算量,那么他的新方法有资格称之为一个突破,可以不朽矣。表1 有一个对上项各量之比较,是以计算器每秒作一百万次 (106) 计算为原则。
n
n
n2 n3 2n 3n n!
10 10-6 10-5 10-5 10-4 10-3 10-3 0.059 0.45
20 10-6 10-5 10-5 10-4 10-2 1(秒) 58(分) 1年
50 10-5 10-4 10-4 0.0025 0.125 36年 2 x 1010年 1057年
1000 10-5 10-3 10-3 1 16小时 10333年 极大 极大
106 10-5 1 6 1月 105年 极大 极大 极大
109 10-5 16小时 6天 3年 3 x 109年 极大 极大 极大
表一:以计算器每秒做一百万次时完成各层次计算量所约需的时间(若无单位,均以秒为单位)
在这个表中,特别注意 n3 与 2n 中之差异,一般称 2n 为计算量呈指数上升,而 n3 或 nk 之计算量呈 n 的方次上升 2 ,对目前及未来的计算器而言,一个呈方次上升的计算量应可以应付,但对一个呈指数上升的计算量在 n 相当大时则毫无希望。因此计算器学家所集中精力的方向在如何将一个呈指数上升的计算量问题,简化成一个方次上升的计算量问题。我们定义凡对一个问题中最重要的参数 n 而言,若能找到一个方法可以以方次上升的计算量完成,我们称此问题为一 P-问题(P 为英文多项式 Polynomial 之第一字母),包含所有此类问题之集合以 P 表示之。
三、P 之外?
本节之题目有点不平常,我们的目的是提醒读者本文中常用之英文大写的 P 是一个凡能用 O(nk) 计算量解决之问题之集合。而 P 之外加一个问号系指到目前为止,我们尚不知道 P 之外是否是一个空集合。
到目前为止,除了售货员旅行问题之外,已经有上百有趣或有用的问题,无法用 O(nk) 的计算量来解决,我们在此列举几个例子。
问题1:售货员旅行问题(甲)
即第一节所述之问题,不再重复,不过假定所有距离均为正整数 3 。
问题2:售货员旅行问题(乙)
与第一题之条件相同,但现在有一个给定之正整数 B,问题是是否存在一条路径其总距离不大于 B。(问题1与问题2在表面上相似,但在以后的理论上有很大的不同)
问题3:背袋问题(甲)
有物体 n 个,各重 w1,w2,…,wn,今欲将它们分为二袋,试问如何分法可使两袋之重量最为接近。(不妨假定 wi 皆为正整数,这并未失去一般性。)
问题4:背袋问题(乙)
如上题,并给定一正整数 B,试问可否选出若干 wi,使其和

问题5:包装问题
有 n 个各别重量小于 1 公斤的物品及足够可以装 1 公斤东西的盒子,今将物品装于盒子之中,多个物品可装于一盒,但任何一盒不得重于 1 公斤,试求最小的盒子数。
问题6:舞伴问题
今有 n 个男孩子与 n 个女孩子参加舞会,每个男孩与女孩均交给主持一个名单,写上他(她)中意的舞伴(至少一人,但可以多于一人)。试问主持人在收到名单后,是否可以分成 n 对,使每人均得到他(她)所喜欢的舞伴。
问题7:库存问题
某仓库有 D 个存仓,排成一列,今有 n 批货物,各可占有一个或多个存仓,并已知各批物品存入与提出之日期。试问可否将各货物存入库里不发生存仓不够的困难且同一批货物若需一个以上存仓时,其存仓必须相邻。
问题8:
已知 a,b,n 三正整数,问是否存在一小于 n 位之正整数使得

问题9:
(甲) 给定一 n 位正整数 a,试问其是否为质数?
(乙) 给定一 n 位正整数 a,试问是否存在 m,n >1 且 a="mn"?
问题10:分丛问题
已知空间 n 个点,并假定各点之间之距离为正整数,又给定两正整数 K 与 B,问是否可将此 n 点分成小于 K 个不重合的子集,使得在同一子集内之任意二点距离均不大于 B?
现在可以看出这类问题的一般结构了。很显然的,有些是极有用的问题,而有些可以转换成有用的问题。例如舞伴问题,若把男孩与女孩换成工人与工头,或医生与病人就有大用了。这些问题到目前没有一个可以证明是属于 P 的,大家都猜测它们可能在 P 之外,即其计算量是呈指数增加的。
在60年代,已有些人把某些问题归于一类了,即是几个问题是互依的,若其中之一若属于 P,则其它几个也属于 P,其证明方法大都是证明两个互依问题中间有一个只需要用 O(nk) 时间来完成的桥梁。直到1971年古克 (Stephen A. Cook) 发表了〈The Complexity of Theorem Proving Procedures〉才把 P 之外约问题归成了三大类,即 NP, NP-complete 及 NP-hard 4 ,现在谈古克定律。
四、古克定律与 NP-completeness
古克定律的证明很难,就是了解它也不容易,我们将从几个角度来看这个问题,试着去暸解它。它的主要结果是把前节那类问题大部归于一个较易证明的集合,称之为 NP,而在 NP 中找到一批互依的问题称之为 NP-complete 类并得到下面的结果。
1. 若有一个 NP-complete 问题可以用 O(nk) 计算量来解决,则全体的 NP 问题都可以用 O(nk) 之计算量来解决,即
1' 若有一个 NP-complete且 ,则 P="NP"。
又换句话说,NP-complete 是 NP 中的难题,NP-complete 解决了 5 , NP 就解决了。但若有一个属于 NP 而不属于 NP-complete 的问题解决了,则其它的 NP 问题不一定可以解决。
什么叫做 NP?NP 是英文 nondeterministic polynomial 的缩写,意思就是非确定性的多项式时间。要暸解这个字。我们先看一看普通计算器的作用。
现在已知用一个计算器,要解决售货员旅行问题非常困难,但若我们有许多计算器同时用,是否可以快到把原问题在 O(nk) 时间内解决?「许多」,不是一、二,多一二个是于事无补的,多百个千个仍是杯水车薪,不能有很大的作用,因为就是一千个机子可以分开做,也最多只能快一千倍,在第一节内已说过,帮助不大。因此计算器学家先放眼望去,干脆允许你可以无限的增加机器。现在我们要注意的是并不是有了无限多的机器所有的问题就可以立刻解决了,因有的问题有先后次序,例如在算下式的时候
[(a1 a2)a3 a4]a5 a6


除非换个形式,否则必须一步一步的解括号,机子多了并不能加快计算的速度,而且机子多了,其间之联络千变万化,一个机子要应付千千万万别的机子送来的信号也疲于奔命了。因此我们只假定所有的机子都只承上启下,单线作业,不作任何横向联络 6 ,也就是说,机器1可以把它的结果传给它下面的机子,像 a1,a2,…,an 而每一个机子又可以把它们的结果传给自己的子机,但在 a1,a2,…,an 之间不互相联络。以售货员旅行问题为例,若有20个城,第一个机子开始,叫下面19个机子各取一个不同的城及计算与 A 距离,而这个19个机子又将它所求得的距离交给自己的18个子机令它们取一个与自己不同的城加上距离,如此往下,在第十次时,第十阶段的机子把它已取9城及总距离告诉下一个机子,叫他们再取一与已取之城不同之城加上距离,如此一直做到第19次,所有路线的距离都有了,在时间上求得所有的距离是 O(n)(但用了 19! 个计算器),古克定义凡可以在 O(nk) 时间内用无限多计算器解决的问题为一 NP 问题。
现在要记住的是由于无横向连络,在所有路径的距离都有了之后,并没有解决售货员问题(甲),因为不知谁是最短(若加以比较以求最短距离,则要 O(n!) 个比较),因此我们不能说售货员旅行问题(甲)是一个 NP 问题。但上节问题2,售货员旅行问题乙,任何一个单线都可以知道它的总距离是否不大于 B,因此每单线都有一个「Yes」或「No」的答案。只要有一个「Yes」的答案,我们即知道本问题已解决,故问题二是一个 NP 问题。在单线作业中,每个机子可以作三件事。
1. 目前答案不明确,大家各自作业。
2. 某线已找到答案,立刻叫停,大家停止作业,解题完毕。
3. 此路不通,本线不再作业,但不叫停,别线仍然作业。
从上项作用,很容易看出找出答案的计算时间即某线叫停的时间,亦即任何一个有「Yes」答案线中计算量之总和,也就是说找到答案「快捷方式」上所需的时间。易言之,在一非确定性计算器系统下,其子机像有「猜测」到快捷方式的功能。若在任何计算步骤中,某人猜了一个答案,而计算器可以在 O(nk) 时间内回答「Yes」或「No」,这个问题即是一个 NP 问题。再以售货员旅行(甲)及图1为例,若你猜一个路径

我们无法知道此路是否最短,但在(B)问题中,一个「Yes」或「No」的结果只要7个加法就可以回答了。因此根据新的定义,问题2是一个 NP 问题。
由这两个定义,读者不难看出问题2,4,6,7,8,9(乙)与10皆为 NP 问题,特别是问题9之(甲),(乙),其实是一样的问题,但如果你猜二个 m,n,立刻就可知道 a 是否是 mn。
古克定理的关键在证明若一种叫满足问题 (Satisfactability Problem) 的例子属于 P,则所有 NP 问题均属于 P(即此问题属于 NP-complete),令 , ,-(且,或,反)表三个基本的逻辑运算(即对0与1逻辑符号而言, , ,除了1 1=1之外, , 与一般代数之加乘相同)。令 f 为一个含有 n 个逻辑变量 (u1,u2,…,un) 的函数。假如我们可以找到一组 u1,u2,…,un,使得 f(u1,u2,…,un) = 1,则 f(u1,u2,…,un) 称为可满足。例如

为一可满足函数,取 u1=u2=u3=1 即可,但

永为 0,故此 f 为不可满足。
直觉上,这类问题除了将 u1, u2,…,un 一个一个以 0,1 代入检查 2n 次之外,显无快捷方式可循,古克1971年之论文即证明这是一切 NP 问题之母。
古克定理:
满足问题为 NP-complete。
现在已可证明在前节中之问题,除了问题1,3,5,9 之外,全是 NP-complete 问题。
五、NP-complete 问题之近似解
NP-complete 问题既找不到可行的解法,而很大部分的 NP-complete 问题都在计算器语言,程序,电路设计,统计学,程序作业上有大用,因此只好退而求其次找一个可行的近似解。很可惜的是,所有的 NP-complete 问题虽在 NP 的层次上相联,在近似解上往往各需不同的解法,这些解法多从直观而来,我们在此举二个例子。
例1
在第三节问题5,包装问题中,若采取「能装就装」法,即现有的盒子若可以装得下,就不用新盒子,则此法所需用之盒子数 k1 与最可能少的盒子数 k0 满足 。
证明
今令 n 个物品之重为 w1,w2,…,wn 公斤,因每个盒子只可以装1公斤,故

另一方面,「能装就装」法不可能有两个以上的盒子同时少于 公斤,故

本例得证。
这个问题的结果是说,我们大约可以用「能装就装」法做得最好情形的一半好。经过较复杂的证明,Johnson 在1974年证得,当 n 很大时,
(i)
,且存在一种情形能产生。
(ii)

也就是用「能装就装」法不会坏到 70% 以上,但可以坏到多用了 70% 的盒子。
售货员旅行问题的一个直观走法是先访问最近那个尚未访问过的城,称为「先访近城」法,以图1为例,其走法为

Rosenkrantz 等在1977年证明这并不是一个很理想的走法,他们证出若各城间的距离满足三角不等式 7 ,则「先访近城」法所走之总程 D1 与最短路径 D0 之关系为

且当 n 很大时,可以有一种情形使得

上式中之 [x] 表示大于 x 之最小整数,例如 [5]=5, [2.5]=3。因 当 n 大时可以很大,故 D1 可与 D0 相差非常之大,但在同一篇论文之中,Rosenkrantz 等证明另一种复杂的「直观」走法可以达到 之地步。
在上面的定理中,三角不等式的条件很重要,若城之距离无此关系存在时,Sahni 与Gonzalez 在1976年证得:若 NP,则不可能存在一个有限的 m,及一个 O(nk) 计算量的走法,能使其全程长 D1 在任何 n 时满足

即上式中 m 非等于无限大不可,亦即所有 O(nk) 的做法都不很好。
六、NP-hardness 与围棋
不是所有的难题都可归结为 NP 问题,像下得一手绝对好的围棋现在目前的推测是比所有 NP 问题还要难的计算问题,即 NP-hard 问题,NP-hard 问题的定义如下:
定义: 若 x 为一 NP-hard 问题,则若 NP ,则 。
也就是说,即使 P="NP",x 还不一定属于 P,但 NP, 则 x 绝不比 NP 的问题容易。在第三节中的问题1、3不一定是 NP 问题,但若能以 O(nk) 的计算量解决它们,则比较容易的问题2与4也可以 O(nk) 解决,故若问题1、3 则问题2、4 ,又因2、4是 NP-complete,即推出 NP="P"。这与 NP-hard 之定义相合,故问题1、3均为 NP-hard 问题。同理问题5也属于 NP-hard,不过这些 NP-hard 似乎比 NP 难不了多少,但下棋问题可能比 NP 问题要难得多,围棋问题可以作如下观。
问题11.(围棋问题)
以平常的围棋规则在一个 n x n 的棋盘上下,给定一个残局(下了二个子就可以算残局),首先,是否可以确定黑子在最好的下法之下,一定会赢?
这个问题不能用一般的方法证明它是不是为 NP。因为目前没有人能猜一个必胜的下法且在 O(np) 时内证明它是对的,因为它与对方如何应付有关,而敌方的应付又与他对你以后的下法的推测有关,如此往下走,首先发生困难的是记忆上亮了红灯,即所需要的记忆可能呈方次以上的进展。
因每一个记忆至少要用(来计算)一次,否则这个记忆就不如不要,因此一个问题的记忆若呈指数上升,则其计算量亦非呈指数似的上升不可,但若某问题只需要方次上升的记忆,即不能保证它只需要方次上升的计算量。
因此计算器学家定义三个新的集合:
PSPACE={x:x 只需要方次上升的记忆 }
注:x 均指问题。
PSPACE-complete:
若 PSPACE,
又 PSPACE-complete,
且 ,
则 P= PSPACE。
PSPACE-hard:
若 PSPACE-hard,
且 ,
则 P= PSPACE。
注意在上式中 PSPACE-complete PSPACE,即 PSPACE-complete 是 PSPACE 中的难题,但 PSPACE-hard 不一定属于 PSPACE。 Stockmeyer and Meyer 在1937年证明了一个与古克相似的定理。
若令 表示存在一个 x, 表对所有的 x,Q 表 , 中的一个,x 为布氏变量0与1,则我们称 f(Q1 x1,Q2 x2,…,Qn xn) 为一量化布氏公式。若 f 有可能为1,则 f 称之为可满足,例如把第四节中之(1)式改写成

则上式不可能满足,因对 (u3 为 0 或 1)而言,f 不全是1。
Stockmeyer 与 Meyer 之定理为:
定理:
检定一个量化布氏公式为可满足是一个 PSPACE-complete 问题。
当我们下棋面对着一盘残局沉思的时候,我们的要求是
对我是否存在一着必胜棋可以对付
敌人任何一着应付棋
此后我是否存在一着必胜棋可以对付
敌人任何一着应付棋
……
我是否存在一着必胜棋可以对付
敌人任何一着棋
我赢了
因此这完全是 , , , ,… 之交替作用与Stockmeyer 与 Meyer 定理之关系至为密切, Robertson 与 Munro 在1918年证得围棋是一种 PSPACE-hard 的问题,目前有人计算到围棋 8 必胜法之记忆计算量在 10600 以上,不论人脑或计算机的记忆绝少不了一个原子,而现今所知的宇宙原子数约只有 1075。棋之道,大矣哉!要做一个下围棋必胜的机器人是谈何容易!
七、结论
现在你明白二十世纪的大难题了,P=NP?用简单的语言说,就是是否能找到一个只呈方次增加的方法去解决旅行、包装、舞会等问题。平凡的问题,期待您不平凡的解答。
1. Gorey, M.R. and Johnson, D.S.《Computers and Intractability-A Guide to Theory of NP-Completeness》, 1979, Freeman and Company.
2. Pearl, J.《Hearistics-Intelligent Search Strategies for Computer Problem Solving》,1984, Addsion-Wesley.
3. Cook, S.A.〈The complexity of theorm-proving procedure〉, Proc. 3rd Ann. ACM Symp. on Theory of Computing, 1971, 151-158.
4. Jonhson, D.S. et. al.〈Worst case performance bounds for simple one-dimensional packing algorithms〉, SIAM J. Comp., 1974, 299-325.
5. Rosenkrantz, D.J. et. tl.〈An analysis of several heurishics for the traveling salesman problem〉, SIAM J. Comp., 1977, 563-581.
6. Sahin,S. and Gonzalez,〈P-complete approximation problems〉, J. ACM, 1976, 555-565.
7. Stockmeyer, L.J. and Meyer, P.R.〈Word problems requiring exponential time〉, Proc. 5th. Ann. ACM Symp. on Theory of Computing, 1973, 1-9.
8. Robertson,E. and Munro, I. 〈NP-completeness, puzzles, and games〉 Utilifas Math., 1978, 99-116.

原文出处:http://blog.ednchina.com/yanshen/24599/message.aspx

===========

NP-Hard问题有如下5类:
1. 路由问题:顺序问题(Swquential ordering problem), 车辆问题(Vehicle routing problem)。
2. 分配问题:二次分配(Quadratic assignment problem),频率分配(Frequency assignment problem),广义分配(Generalized assignment problem),图着色问题,大学课程时间表问题(University course timetabling problem)。
3. 调度问题:工序车间(Jop shop),开放车间(Open shop),组车间(Group shop),单机器总权重延迟调度(Single-machine total weighted tardiness),资源约束项目调度(Resource-constrainted project schedule),排列流车间问题(Permutation flow shop problem), 带序列依赖设置时间的单机器总延迟问题(SMTTPSDST)。
4. 子集问题:集合覆盖(Set covering problem), 多重背包问题(Multiple knapsack), 最大独立集问题(Maximum Independent set), 带权约束的图树分割问题(Weight constrained graph tree partition), 边带权l-基数问题(Arc-weighted l-cardinality tree problem), 冗余分配问题,最大团问题(Maximum clique)。
5. 其他问题:箱子包装(Bin packing),2D-HP 蛋白质折叠(2D-HP Protein folding), 带约束满足(Constraint satisfaction problem), 最短公共超序列问题(Shortest common supersquence)。

==========
NP问题就是指其解的正确性可以在多项式时间内被检查的一类问题。比如说数组求和,得到一个解,这个解对不对呢,显然是可以在多项式时间内验证的。再比如说SAT,如果得到一个解,也是能在多项式时间内验证正确性的。所以SAT和求和等等都是NP问题。然后呢,有一部分NP问题的解已经可以在多项式时间内找到,比如数组求和,这部分问题就是NP中比较简单的一部分,被命名为P类问题。那么P以外的NP问题,就是目前还不能够在多项式时间内求解的问题了。会不会将来某一天,有大牛发明了牛算法,把这些问题都在多项式时间内解决呢?也就是说,会不会所有的NP问题,其实都是P类问题呢,只是人类尚未发现呢?NP=P吗?

可想而知,证明NP=P的路途是艰难的,因为NP问题实在太多了,要一一找到多项式算法。这时Stephen A. Cook这位大牛出现了,写了一篇The Complexity of Theorem Proving Procedures,提出了一个NP-complete的概念。NPC指的是NP问题中最难的一部分问题,所有的NP问题都能在多项式时间内归约到NPC上。所谓归约是指,若A归约到B,B很容易解决,则A很容易解决。显然,如果有任何一道NPC问题在多项式时间内解决了,那么所有的NP问题就都成了P类问题,NP=P就得到证明了,这极大的简化了证明过程。那么怎样证明一个问题C是NP完全问题呢?首先,要证明C是NP问题,也就是C的解的正确性容易验证;然后要证明有一个NP完全问题B,能够在多项式时间内归约到C。这就要求必须先存在至少一个NPC问题。这时Cook大牛就在1971年证明了NP完全问题的祖先就是SAT。SAT问题是指给定一个包含n个布尔变量的逻辑式,问是否存在一个取值组合,使得该式被满足。Cook证明了SAT是一个NPC问题,如果SAT容易解决,那么所有NP都容易解决。Cook是怎样做到的呢?

他通过非确定性图灵机做到的。非确定性图灵机是一类特殊的图灵机,这种机器很会猜,只要问题有一个解,它就能够在多项式时间内猜到。Cook证明了,SAT总结了该机器在计算过程中必须满足的所有约束条件,任何一个NP问题在这种机器上的计算过程,都可以描述成一个SAT问题。所以,如果你能有一个解决SAT的好算法,你就能够解决非确定性图灵机的计算问题,因为NP问题在非图机上都是多项式解决的,所以你解决了SAT,就能解决所有NP,因此——SAT是一个NP完全问题。感谢Cook,我们已经有了一个NPC问题,剩下的就好办了,用归约来证明就可以了。目前人们已经发现了成千上万的NPC问题,解决一个,NP=P就得证,可以得千年大奖(我认为还能立刻获得图灵奖)。

那么肯定有人要问了,那么NP之外,还有一些连验证解都不能多项式解决的问题呢。这部分问题,就算是NP=P,都不一定能多项式解决,被命名为NP-hard问题。NP-hard太难了,怎样找到一个完美的女朋友就是NP-hard问题。一个NP-hard问题,可以被一个NP完全问题归约到,也就是说,如果有一个NP-hard得到解决,那么所有NP也就都得到解决了。
========
最后转一个恶搞的解释,不过很形象:
NP:在你追了若干美女都失败告终后,你发现有一批美女追起来是一样困难的,
如果你能追到其中任何一个就能追到其他所有的美女,你把这样的女人叫作NP-Complete。P=NP:这是一个美好的猜想,追美女和恐龙的难度其实一样。
APX与Random:NP的美女难追,你无法完全占有她。你只好随机的去靠近她,装作若无其事;或者用一种策略,追到她的一个approximation ratio,例如50%。APX-hard:这样的女人,连一个固定的百分比都不给你,您啊,还是另谋高就吧。

你可能感兴趣的:(刷题找工作)