P问题、NP问题、NPC问题

   看师兄们的论文经常说一句这是个NP难问题,所以采用另外一种方法来代替(比如凸松弛,把l0范数的问题松弛为l1范数的问题来求解)。然后搜索了相关知识,也还是没看太懂,把一些理论知识先贴上来,希望以后再接触到会有更好的理解。

参考来源:http://blog.csdn.net/jbb0523/article/details/40710449

》简要介绍

(简单介绍了相关概念和从属关系,若时间不紧可详细看下文中的相关解释)

一、相关概念

  P: 能在多项式时间内解决的问题

  NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题

  NPC: NP完全问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的NP问题,即解决了此NPC问题,所有NP问题也都得到解决。

  NP hard:NP难问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的问题(不一定是NP问题)。

二、四者联系的图形表示

  将四种问题用集合表示,它们的关系图1所示。

图1 P NP NPC NPhard关系的图形表示

  说明:

  1. P问题属于NP问题,NPC问题属于NP问题。

  2. NPC问题同时属于NP hard问题,是NP与NPhard的交集。

》时间复杂度 

  时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复杂度。因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。我们也说,O(n^100)的复杂度小于O(1.01^n)的复杂度。

     容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。

     总结来说,多项式复杂度的比指数级复杂度的算法要好很多。

》约化(规约reducibility)

     规约就是说一个问题A可以在多项式时间转化为问题B,然后问题A有解当前仅当转化后的问题B有解,也就是说只要解决了B那么就可以解决A,注意这个转化是单向的,比如你可以用解二次方程的方法解一次方程,但是反过来却不行。(一元二次方程的二次项系数为0时可用B问题解决方法来求解A问题,即一次方程。)

    “问题A可约化为问题B”有一个重要的直观意义:B的时间复杂度高于或者等于A的时间复杂度。也就是说,问题A不比问题B难。

     约化具有一项重要的性质:约化具有传递性。如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。

》P问题

P是指在多项式时间能由确定型图灵机解决的问题

如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。

》NP问题

NP问题是指在多项式时间内能由非确定型图灵机解决的问题

     NP问题不是非P类问题。NP问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。

     之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。

    确定型图灵机可以理解为就是按照某种固定的算法,一步步求出解的程序,而非确定型图灵机其实是概念上的,他的理论价值更大一些,他是指某个程序rp非常好,能猜出答案。怎么叫猜出答案呢,举个例子比如说哈密顿问题(是说经过图上的所有点一次且仅一次的路径),程序猜出了个路径ACDEFB啥的,然后程序要自己看看这个路径是不是哈密顿路,验证了一下,我勒个去,还真是,于是答案就出现了。所以这里的猜是指给出一个正确的答案,就是不仅猜出了个答案,还要自己验证一下是不是正确的,所以在有些地方解释NP就是说能在多项式时间验证的问题就是NP的,也不能说不对吧。

》提出一个问题P=NP?

     所有的P类问题都是NP问题。也就是说,能多项式地解决一个问题,必然能多项式地验证一个问题的解——既然正解都出来了,验证任意给定的解也只需要比较一下就可以了。

→关键是,人们想知道,是否所有的NP问题都是P类问题?

→普遍趋向于不等于

》NPC问题

     有个叫Cook的人发现所有的NP问题都可以规约到一种叫做SAT的问题,也就是说只要SAT能有效的解决,所有问题都能利这种方法经过相应转化而有效解决,后来人们发现所有的问题能规约到的问题不止一种,而是一大类,有很多个,这类问题就被称作NP-complete问题,俗称NP完全问题,就是说这类问题是np里最难的,所有的NP问题都可以规约到他们。到这里我们注意到NPC问题是有两个条件的:

     →首先,它得是一个NP问题

     →然后,所有的NP问题都可以约化到它

     证明一个问题是 NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足;至于第一个NPC问题是怎么来的,下文将介绍),这样就可以说它是NPC问题了。

    既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P了。因此,给NPC找一个多项式算法太不可思议了。因此,前文才说,“正是NPC问题的存在,使人们相信P≠NP”。我们可以就此直观地理解,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。

》NP-hard问题

     NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广)。NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java面试通关手册

六道面试中常见的智力题 来看看你会做几道?

下面的题目来自滴滴出行2017秋招题。这些题目是我自己觉得比较难或者比较容易出错的题目。

2084
来自专栏机器之心

机器学习时代的哈希算法,将如何更高效地索引数据

2275
来自专栏C语言及其他语言

[每日一题]矩阵转置(1242)

题目描述 输入N*N的矩阵,输出它的转置矩阵。 输入 第一行为整数N。 接着是一个N*N的矩阵。 输出 转置矩阵 样例输入 2 1 2 1 2 样例输出 1 ...

3429
来自专栏C语言及其他语言

[每日一题]老王赛马

题目描述 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为“战国时期”。在魏国作官的孙膑,因为受到同僚庞涓的迫害,被齐国使臣救出后,到...

2749
来自专栏PPV课数据科学社区

【学习】spss中如何做相关分析

相关分析是很基础的一种分析方法,接触spss的同学很快就会学习到想相关分析。虽然他很基础,但是在做很多高级分析之前,都要进行相关分析。这篇问文章就系统的和...

3688
来自专栏C语言及其他语言

【每日一题】问题 1429[蓝桥杯][历届试题]兰顿蚂蚁

题目描述 ? 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有...

2866
来自专栏hadoop学习笔记

Hanlp自然语言处理工具的使用演练

Hanlp是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。Hanlp具备功能完善、性能高效、架构清洗、语料时新、可自定义的特点;提供...

1942
来自专栏数据派THU

教你用Python进行自然语言处理(附代码)

3608
来自专栏ATYUN订阅号

赫尔辛基大学AI基础教程:搜索和游戏(2.3节)

在本节中,我们将研究一个经典的AI问题:游戏。为了清晰起见,我们将重点关注的最简单的场景是双人游戏,如井字棋和国际象棋等完全信息游戏。

923
来自专栏ACM算法日常

5行位运算,map靠边站——位操作进阶

Given an array of integers, every element appears three times except for one. F...

1121

扫码关注云+社区

领取腾讯云代金券