1. 简介
算法的时间复杂度用来衡量一个算法运行需要的计算量,并且反映了在输入规模非常大的时候算法的运行速度。多项式时间算法亦称为有效算法,是因为其的计算量随着输入规模的变化速度对于计算机而言相对可以接受,而超多项式时间的算法(如指数时间算法)在输入规模较大的时候,算法的计算量会增加的非常恐怖。
因此,一个问题是否存在多项式时间的算法来解决是一个非常值得探讨的问题。
2. 定义
P,NP,NPC,NP-HARD都是形容问题的难度。
- P指的是该问题存在一个多项式时间算法得出正解
- NP指的是该问题存在一个多项式时间算法验证一个解是否为正解
- NP-HARD指的是该问题能被所有的NP问题在多项式时间内规约到
- NPC指的是该问题是一个NP-HARD问题,又是一个NP问题
3. 关系
P,NP,NPC,NP-HARD对应着问题的难度不断递增。这是因为解决了所有的NP-HARD问题,那么所有的NPC问题都被解决;而解决一个NPC问题,所有的NP问题都被解决;解决所有的NP问题,P问题也一定都被解决。
它们的关系图如下。P是属于NP的,因为多项式时间都能得出正解了,在拿每个解和这个解比较,一定能在多项式时间验证。而NPC则是一类特殊的NP问题,亦是一类特殊的NP-HARD问题,因此NPC属于NP和NP-Hard。
最关键的问题是P是否等于NP,亦就是说,如果我能在多项式时间内验证一个解是否为问题的正解,那么我是否就能够在多项式时间内得到问题的正解。