![fdf4a21f031e44f7fdd1ce014a5ba9ed.png](https://i-blog.csdnimg.cn/blog_migrate/af02429df702d400ada93ff3973e664b.png)
所谓NP-hard,指所有NP问题都能在多项式时间复杂度内归约到的问题。
这里梳理下涉及到的知识点,主要参考来源:
《什么是P、NP、NPC、NP-Hard问题》、《什么是P问题、NP问题和NPC问题》、《何为NP-hard》、百度百科:NP-hard
介绍一些预备知识
1. 时间复杂度
时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。
程序的时间复杂度一般可以分为两种级别:
- 多项式级的复杂度,如O(1),O(log(n))、O(n^a)等
- 非多项式级(NP,non-deterministic polynomia)的复杂度,如O(a^n)、O(n!)等。后者的复杂度计算机往往不能承受。
自然地,可以想到一个问题:
会不会所有的问题都可以找到复杂度为多项式级的算法呢?
显然,“不可能”。
例如著名的旅行商问题(Travel Saleman Problem or TSP):假设一个推销员需要从香港出发,经过广州,北京,上海