什么是P问题,NP问题和NPC问题?

来源:互联网 发布:阿莫达非尼 淘宝 编辑:程序博客网 时间:2024/06/06 01:29

此文由百度文库上的一个PPT整理而得。

先简单的几句话说一下时间复杂度。时间复杂度并不是计算机解决一个问题需要花多长时间,而是当问题规模扩大后,而是当问题规模扩大后,程序需要的时间增长速度有多快。

不管程序数据有多大,程序处理花的时间总是那么多的,那我们说这个这个程序很好,具有O(1)的复杂度,也就是常数级复杂度;

数据规模变得多大,花的时间也跟着变得有多长,那这个程序具有O(n)的复杂度,而像冒泡排序、插入排序,数据扩大两倍,时间扩大四倍的,我们称为具有O(n2)复杂度。以此类推,如此等等。

容易看出,复杂度主要分为两种级别,其中后者的复杂度都远远大于前者:

一种是O(1),O(log n),O(n的a次方),我们把他们叫做多项式级别的复杂度,因为它们的规模n出现在底数的位置;

另一种是O(a的n次方),O(n!)型复杂度,它是非多项式的,其复杂度计算机往往不能承受。

当我们解决一个问题时,选择的复杂度往往是多项式级别的复杂度,非多项式级别的复杂度需要的时间太多,往往会超时,除非这个问题的规模非常小。

问题是:是不是所有的问题都可以找到多项式级别复杂度的算法呢?答案是否定的。甚至有些问题根本不可能找出一个正确的算法来,这样的问题成为之不可解问题。


P类问题:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就称为P问题。P是多项式英文单词的第一个字母Polinomial。

NP问题:这里强调,NP问题不是非P类问题。NP问题是指可以在多项式时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式时间里猜出一个解的问题。很显然,所有的P类问题都是NP问题。

NPC问题:也称为NP完全问题,首先它是一个NP问题,另外一条是所有的NP问题都可以约化得到它。

链接在这里:http://wenku.baidu.com/link?url=MITliZXFlmHXZ2d9mZeQuxhlYqa_mCPUYf8onGJikrczlilDWZysfraqeyBmpghWH2hw_ICmDa_13tBwaTAWefIvPbFc4Iz5ht-4x8hYRxa


0 0