P、NP、NP-hard、NPC问题

基本概念:

P Problem: 对于任意的输入规模n,问题都可以在n的多项式时间内得到解决;
NP(Non-deterministic Polynomial) Problem: 可以在多项式的时间里验证一个解的问题;
NPC(Non-deterministic Polynomial Complete) Problem: 满足两个条件:
1.是一个 NP 问题
2.所有的 NP 问题都可以约化到它

NP-hard Problem: 满足NPC问题的第 2 条,但不一定要满足第 1 条。(NP-Hard问题要比 NPC问题的范围广)

 

 

1. P Problem:

如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于 P 问题,即算法的时间复杂度是多项式级的。比如 n 个数中间找到最大值,或者 n 个数排序之类的。
2. NP Problem:

NP 问题的另一个定义是可以在多项式的时间里猜到一个解的问题,例如求图中起点到终点是否有一条小于100个单位长度的路线,随便选一条,如果算出来路径小于100,那么就猜到了一个解,也就是说如果你运气足够好的话就可以在多项式时间内解决这个问题。当然猜的前提是问题存在解。

很显然,所有的 P 类问题都是 NP 问题,能在多项式时间内解决,必然能多项式地验证一个解。(NP 是否等于 P 这个问题貌似还没有定论。)

著名的NP类问题:旅行家推销问题(TSP)。
有一个推销员,要到 n 个城市推销商品,他要找出一个包含所有 n 个城市的环路,这个环路路径小于 a 。我们知道这个问题如果单纯的用枚举法来列举的话会有(n−1)! 种,已经不是多项式时间的算法了(注:阶乘算法比多项式的复杂)。那怎么办呢?我们可以用猜的,假设我人品好,猜几次就猜中了一条小于长度 a 的路径,好的,我得到了一条路径小于 a 的环路,问题解决了,皆大欢喜。可是,我不可能每次都猜的那么准,也许我要猜完所有种呢?所以我们说,这是一个 NP 类问题。

所以这就引出了这类讨论的一个千年问题:是否 NP类问题=P类问题?即是否所有能在多项式时间内验证得出正确解的问题,都是具有多项式时间算法的问题呢? 要是解决了这个问题,那岂不是所有的NP问题都可以通过计算机来解决。
3. NPC Problem:

存在一个NP问题,使得所有的该类NP问题都可以多项式时间地规约(Polynomial-time Reducibility) 为NPC问题。根据规约的传递性,对NP问题进行一层接一层地规约,最终可以得到一个足够泛化的NP问题,即NPC问题。

posted on 2022-05-02 20:35  HHHuskie  阅读(160)  评论(0编辑  收藏  举报

导航