NP难问题
摘自网址https://blog.csdn.net/u014295667/article/details/47090639
https://blog.csdn.net/bitcarmanlee/article/details/51935400
P类问题:在多项式时间内可解的问题。
NP类问题(Nondeterminism Polynomial):在多项式时间内“可验证”的问题。也就是说,不能判定这个问题到底有没有解,而是猜出一个解来在多项式时间内证明这个解是否正确。
NPC类问题(Nondeterminism Polynomial complete):存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。其定义要满足2个条件:
- 首先,它得是一个NP问题;
- 然后,所有的NP问题都可以约化到它。
要证明npc问题的思路就是:
- 先证明它至少是一个NP问题,
- 再证明其中一个已知的NPC问题能约化到它。
NP难(NP-Hard)问题 即多项式复杂程度的非确定性问题。 它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比NPC问题的范围广,NP-Hard问题没有限定属于NP),即所有的NP问题都能约化到它,但是他不一定是一个NP问题。
NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。
最具代表性的NP-Hard问题:TSP
旅行推销员问题是数图论中最著名的问题之一,即"已给一个n个点的完全图,每条边都有一个长度,求总长度最短的经过每个顶点正好一次的封闭回路"。
售货员旅行问题 (traveling salesman problem),是最具有代表性的NP问题之一。假设一个推销员需要从香港出发,经过广州,北京,上海,…,等 n 个城市, 最后返回香港。 任意两个城市之间都有飞机直达,但票价不等。现在假设公司只给报销 C 块钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于 C?
推销员旅行问题显然是 NP 的。因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。但是,要想知道一条总路费小于 C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排! 这将是个天文数字。
这个天文数字到底有多大?目前的方法接近一个一个的排着试,还没有找到更好可以寻得最短路径的方法。对七个城而言,共有 6!=720 个排法,还比较简单;,但若有 20 个城,则排法就有 19! 种。因故在排列组合里 n! 写起来轻松。但 1.21∗10171.21∗1017 是一个大得不得了的数字。若每秒钟排一次,要排 3.84∗1093.84∗109 年(一年约为 3.15∗1073.15∗107 秒),即使使用计算器,每秒排一百万次(不容易做到)也得重做三千年才能找到答案。「生也有涯,知也无涯」,想不到区区二十个城,要三十个世纪才能找到答案。