谈一谈|如何理解NP问题

一概念引入

1.1时间复杂度

在计算机处理一个问题时,往往需要一定的时间,假设把这个问题复杂化(将这个问题进行扩展),那么把计算机处理这类问题的时间变化速率,称为解决这种问题所用算法的时间复杂度。例如,一个枚举一定范围内的数字的问题,计算机所用时间会随着范围的变化而线性变化,由于是简单的枚举,所以时间复杂度可以记为O(n),n可以代表这个范围大小。在计算机处理问题时,由于算法设计不同,对应的时间复杂度也不一定相同。

1.2多项式级时间和非多项式级时间

在众多的时间复杂度中,根据其表达式的特点,可以大致将它们划分为两个范畴,一个是多项式级一个是非多项式级。它们各自表示什么意思呢?还记得高中数学中学习的函数吗,在学习不同函数时,最常做的一件事是观察它们的图像变化,可以发现,x作为底数的图像和x作为指数的图像在后期的变化简直有天壤之别。这也正是需要将时间复杂度划分的原因(多项式级的时间复杂度在后期变化远小于非多项式级),将n作为底数的时间复杂度归为多项式级,n作为指数的归为非多项式级。例如O(n)、O(log(n))、O(n^a)等就是多项式级的时间复杂度,像O(n!)和O(a^n)就是非多项式级的复杂度。对于计算机来说需要处理的问题往往是很庞大的,如果采用非多项式级复杂度的算法,那么将浪费很大的资源。

1.3 P问题

在解释了多项式级和非多项式级时间复杂度之后,P问题的概念就简单了。对于众多的问题,通常把能够使用多项式级时间复杂度算法解决的问题称为P问题。

二什么叫NP问题

2.1 约化

一般,问题A可以约化为问题的B的解释是可以用解决问题B的方法解决问题A。简单的说,也就是问题A是问题B的另一种形式,且问题A的复杂程度要小于等于问题B。就像解方程组的问题,假如你会解二元一次方程组,那么你一定会解一元一次方程,在这个例子中,一元一次方程就是问题A,二元一次方程组就是问题B,问题A可以看作是问题B中另一个自变量系数为零的特殊“二元一次方程组”。那么解二元一次方程组的问题是否可以约化成解三元一次方程组问题呢?答案很明显是可以,同理的,解一元一次方程也可以约化成解三元一次方程组问题。可以看出,约化是具有传递性的,且如果问题A可以约化成问题B,则问题B的时间复杂度一定大于等于问题A的时间复杂度。

2.2 P=NP?

有了约化这个概念之后,可以发现所有的P问题都可以约化成NP问题。因为一个问题既然可以在多项式级时间内解决,那么对于验证一个解的正确性是肯定可以做到的,因此,如果把P问题看作一个集合P,NP问题看作另一个集合NP,则P包含于NP。那么P=NP吗?答案尚未确定,这也是现在所常研究的“NP问题”的实质,这是一道世界难题,一旦解决这个问题,那么就意味着可以找出具有多项式级时间复杂度的算法来解决NP问题。

三新的问题

3.1 NP与NPC问题

前文提到确定P=NP的问题是一道世界难题,这是因为已知的NP问题远远多于P问题,且运用约化的概念,是否所有的NP问题也可以约化成同一个问题呢?这个问题的答案早已被证实是可行的,而且这种问题还不止一个,它们被称为NPC问题。很明显,NPC问题具有两个特点:它满足NP问题的条件,且所有的NP问题都可以约化成它。既然所有的NP问题都可以约化成NPC问题,那么只要能够在多项式级的时间复杂度下解决一个NPC问题,所有的NP问题也都能用同样的方法解决了,那么NP问题也就成了P问题。但是给一个NPC问题找出一个多项式级时间复杂度的算法的工作至今仍在进行中,因此,还是很难证明P=NP。

3.2 NPC案例

逻辑电路是一个典型的NPC问题,什么叫做逻辑电路呢?一个逻辑电路由若干个输入,一个输出,若干“逻辑门”和密密麻麻的线组成。在逻辑电路问题中,需要找到不同输入的组合,使得输出的结果满足要求。

图3.1.1 逻辑电路示意图

逻辑电路之所以是一个NPC问题,是因为你无法在多项式级的时间复杂度内解决它,但是要想验证一个解的正确性是很简单的,无论这个逻辑电路多么复杂,仍然只需要将每个点的状态带入进去就可以验证,属于O(n)的时间复杂度。

3.3 NPC与NP-Hard问题

NP-Hard问题和NPC问题的不同在于NP-Hard问题不一定是NP问题,因此,NP-hard问题的范围要大于NPC问题,同时,要为NP-Hard问题找到一个多项式级时间复杂度的算法也更加困难,这也是“Hard”的含义,可能NPC问题能够找到多项式级时间复杂度算法的时候NP-Hard问题仍然还无法完成这项工作。

四 P、NP、NPC、NP-Hard问题的关系

在上述介绍中,可以知道,P问题包含于NP问题中,NPC问题同时包含于NP问题和NP-Hard问题,也就是它们的交集,则它们的关系可以如下表示。

图4.1 P、NP、NPC、NP-hard问题关系图

END

编  辑   |   王文星

责  编   |   黄章鱼

能力越强,责任越大。实事求是,严谨细致。   

                                                  ——where2go 团队


微信号:算法与编程之美

(0)

相关推荐

  • 什么是P、NP、NPC、NP

    优化问题在磕盐的时候经常会遇到,其中经常涉及到某某问题是NP的之类的论断,因此花了一点时间整理了一下NP问题的相关知识,在研究过程中看到一篇很好的文章,因此下面的整理主要基于这篇文章<什么是P问 ...

  • NP完全性理论(算法分析与设计)

    0.参考 http://www.matrix67.com/blog/archives/105(极好,通俗易懂) <算法导论>NP完全性 <算法设计与分析>NP完全性理论 1.基 ...

  • To P or not to P——这是最伟大的计算机数学问题

    2000年5月24日,新罕布什尔州的克莱数学研究所列出了数学和计算机科学中七个未解决的问题.解决其中任何一个问题的奖励是该研究所提供的一张100万美元的支票.然而,直到今天,这些问题中只有一个被解决了 ...

  • 谈书法的临摹理解的层次决定临摹的高度

    学习书法临摹是第一要务,也就是说书法是非临摹而不能得其法.可以说,书法(汉字)的创始就与临摹有着不解之缘,在临摹中发展丰富,在临摹中演变升华.但随着书法的内涵越来越丰富,技法的完善和艺术境界的日臻完善 ...

  • 李敖谈 莫须有 三字的理解

    莫须有"的典故,出自<宋史>岳飞传,岳飞传记岳飞被捕,案子将要做成的时候,韩世忠不服,找秦桧质问.秦桧说,岳飞儿子岳云给张宪的反动信,虽然找不到了,可是"其事体莫须有& ...

  • 由阴阳学说谈对生命的理解

    由阴阳学说谈对生命的理解 "阴阳",二字虽然简单,但在中国人的眼里,实则包罗万千事物,诸般变化.阴阳学说在中国更是盛行了二千年余年,直至今天,仍然有相当多的拥趸者,我个人将它叫做中 ...

  • 乐博士谈:如何正确理解法义

    一起到泰国的一位出家师父(比丘尼)由于初在乐博士农场,体验较好,法喜充满,所以会情不自禁的唱诵佛经,有时身体还会有轻盈的一些舞动. 乐博士农场有一些经常在那里调养的泰国出家师父们.有一位师父看到了就过 ...

  • 也谈哲学的自我理解——哲学的定义

    也谈哲学的自我理解--哲学的定义(一) 所谓哲学的自我理解,就是哲学的概念,也就是哲学究竟"是什么"的问题.这个问题是哲学的基本问题,也是困扰了整个哲学界几千年,至今仍不能做统一解 ...

  • 中医与你谈一谈阴虚与阳虚的理解

        阴虚有哪些具体表现?     阴虚多因血虚,"阴虚生内热",表现为五心烦热.口干咽燥,神烦气粗,尿黄便干等:体质虚衰.心悸气短.头晕眼花.精神状态差:月经不调.面色无华.黑 ...

  • 专题讲座 | 姚校谈如何让孩子理解父母和如何进行挫折教育

    每个家庭在教育孩子的时候,难免会遇上孩子叛逆,不听话,耍脾气,这个时候许多家长会选择理解孩子只是心情不好,让孩子玩会儿再写作业,但是指望着孩子理解自己的良苦用心,孩子不一定会理解,该怎么让孩子理解父母 ...

  • 『麻疹』中药方--试从麻疹一病浅谈对伏邪的理解

    <内经>首次提出温病病名,根据温病初起是否有里热见证,及病证特点是否符合时令病邪的致病特点,把温病分为新感温病与伏气温病两大类. 其中,伏气温病是指感邪后邪气伏藏,过时而发,病发于里的一类 ...

  • 谈一谈对安全主任岗位职责的理解

    通过张岩老师对义务教育学校校长专业标准的解读,我开始重新反思自己,审视自己,看自身能力和素质的提高幅度,能不能适应我们学校发展的需要.能不能适应完成正常工作的需要. 我经常地告诫自己,要在工作中应更加 ...