美文网首页
NP和P问题

NP和P问题

作者: SpringWolfM | 来源:发表于2018-01-11 04:54 被阅读0次

来源:maxtrix67:http://www.matrix67.com/blog/archives/105

  • P问题:在多项式时间内可以求出解的问题
  • NP问题:在多项式时间内可以证明一个解是对的问题 or 在多项式时间内可以猜出一个解的问题

  1. 所有的P类问题都是NP问题

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

  1. 是否所有的NP问题都是P类问题

人们目前想知道想证明的是:是否所有的NP问题都是P类问题
也就是说,集合P与集合NP(把P类问题和NP类问题集合化),现在知道P属于NP,想要知道:是否有P=NP
目前的大方向是:P=NP不成立,也就是,多数人相信,存在至少一个不可能有多项式级复杂度的算法的NP问题。

  1. NP-compeleted(NP完全问题)
  • 约化(Reducibility,有的资料上叫“归约”):
    问题A可以约化为问题B的含义是,可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。

    例子1:问题A是求解一个一元一次方程,问题B是求解一个二元一次方程。求解一元一次方程可以约化为求解一个二元一次方程。把问题A转换成问题B,两个问题就等价了。

    例子2:Hamilton回路可以约化为TSP问题(Travelling Salesman Problem,旅行商问题):在Hamilton回路问题中,两点相连即这两点距离为0,两点不直接相连则令其距离为1,于是问题转化为在TSP问题中,是否存在一条长为0的路径。Hamilton回路存在当且仅当TSP问题中存在长为0的回路。

NPC问题的定义非常简单。同时满足下面两个条件的问题就是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问题的时间复杂度更高从而更难以解决。

不要以为NPC问题是一纸空谈。NPC问题是存在的。确实有这么一个非常具体的问题属于NPC问题。下文即将介绍它。

下文即将介绍逻辑电路问题。这是第一个NPC问题。其它的NPC问题都是由这个问题约化而来的。因此,逻辑电路问题是NPC类问题的“鼻祖”。

逻辑电路问题是指的这样一个问题:给定一个逻辑电路,问是否存在一种输入使输出为True。

什么叫做逻辑电路呢?一个逻辑电路由若干个输入,一个输出,若干“逻辑门”和密密麻麻的线组成。看下面一例,不需要解释你马上就明白了。
┌───┐
│ 输入1├─→┐ ┌──┐
└───┘ └─→┤ │
│ or ├→─┐
┌───┐ ┌─→┤ │ │ ┌──┐
│ 输入2├─→┤ └──┘ └─→┤ │
&
nbsp;└───┘ │ ┌─→┤AND ├──→输出
└────────┘┌→┤ │
┌───┐ ┌──┐ │ └──┘
│ 输入3├─→┤ NOT├─→────┘
└───┘ └──┘
这是个较简单的逻辑电路,当输入1、输入2、输入3分别为True、True、False或False、True、False时,输出为True。
有输出无论如何都不可能为True的逻辑电路吗?有。下面就是一个简单的例子。
┌───┐
│输入1 ├→─┐ ┌──┐
└───┘ └─→┤ │
│AND ├─→┐
┌─→┤ │ │
│ └──┘ │ ┌──┐
│ └→┤ │
┌───┐ │ │AND ├─→输出
│输入2 ├→─┤ ┌──┐ ┌→┤ │
└───┘ └→┤NOT ├→──┘ └──┘
└──┘

上面这个逻辑电路中,无论输入是什么,输出都是False。我们就说,这个逻辑电路不存在使输出为True的一组输入。

回到上文,给定一个逻辑电路,问是否存在一种输入使输出为True,这即逻辑电路问题。

逻辑电路问题属于NPC问题。这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它(不要以为NP问题有无穷多个将给证明造成不可逾越的困难)。证明过程相当复杂,其大概意思是说任意一个NP问题的输入和输出都可以转换成逻辑电路的输入和输出(想想计算机内部也不过是一些 0和1的运算),因此对于一个NP问题来说,问题转化为了求出满足结果为True的一个输入(即一个可行解)。

有了第一个NPC问题后,一大堆NPC问题就出现了,因为再证明一个新的NPC问题只需要将一个已知的NPC问题约化到它就行了。后来,Hamilton 回路成了NPC问题,TSP问题也成了NPC问题。现在被证明是NPC问题的有很多,任何一个找到了多项式算法的话所有的NP问题都可以完美解决了。因此说,正是因为NPC问题的存在,P=NP变得难以置信。P=NP问题还有许多有趣的东西,有待大家自己进一步的挖掘。攀登这个信息学的巅峰是我们这一代的终极目标。现在我们需要做的,至少是不要把概念弄混淆了。

相关文章

  • NP和P问题

    来源:maxtrix67:http://www.matrix67.com/blog/archives/105 P问...

  • P问题、NP问题、NPC、NP-Hard、P=NP?

    目录 时间复杂度与多项式时间 确定性算法与非确定性算法 判定性问题 规约/约化 P问题 NP问题 NPC问题 P=...

  • NLP初学之-P , NP , NP Hard问题

    今天看了后,终于能大致理解,P问题,NP问题之间的简单区别。 P问题---多项式可解决的问题; NP问题----给...

  • P、NP、NPC问题

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

  • P,NP,NPC问题

    参考链接:什么是P问题、NP问题和NPC问题 时间复杂度   此处我们分为两类,多项式级的复杂度和非多项式级的复杂...

  • P与NP问题

    这是困扰计算机系的同学们50年的经典问题:P是否等于NP? P就是能在多项式时间内解决的问题,NP就是能够在多项式...

  • p对np问题

    P对NP问题是克雷数学研究所高额悬赏的七个千禧年难题之一,同时也是计算机科学领域的最大难题,关系到计算机完成一项任...

  • P, NP, NP-complete, NP-hard问题对比

    左图在假设P≠NP的情况下有效,右图在假设P=NP的情况下有效 在假定P≠NP的情况下, 有 NP问题:可以在多项...

  • P/NP/NP-完全问题

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

  • NP完全性和近似算法

    NP完全性 P类问题:P类问题就是在多项式时间内可以解决的问题。NP类问题:NP类问题是指那些在多项式时间内可以被...

网友评论

      本文标题:NP和P问题

      本文链接:https://www.haomeiwen.com/subject/thtznxtx.html