码迷,mamicode.com
首页 > 其他好文 > 详细

P和NP问题

时间:2017-04-12 05:14:33      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:p=!np?

  1. 什么是P,什么是NP问题?

    看论文的过程中,经常出现P=NP或者P!=NP问题,经常困扰着我,让我无时无刻想去搞懂到底什么是P,什么是NP。P(polynomialP就是能在多项式时间内能够解决的问题。NP(Non-deterministic polynomial)也就是非确定的多项式,即是难解问题。那么第二个问题将会围绕着什么是多项式时间,这是什么东西?

  2. 多项式时间?

    在研究算法的时间复杂度时,我们通常用O(nk )来表示。其中n是问题的规模,k是一个非负整数。一些科学家指出只有多项式时间算法才称得上是"好"算法。其实多项式时间复杂性也并不意味着较低的时间要求,如(n1000 ),他们的值依然大的惊人。至于科学家为什么要用这个标准去定义它,我们搞算法无需关注,不是重点。通常人们将存在多项式时间算法的问题成为易解问题,将需要在指数时间内解决的问题成为难解问题,目前证明的难解问题只有两类:不可判定问题和非决定的难处理问题。

  3. 什么不可判定问题和非决定的难处理问题?

    不可判定问题:他们太难了,以致于根本不存在能求解它们的任何算法。非决定的难处理问题:这类问题是可判定的(即可解的)。但是即使使用非决定的计算机也不能在多项式时间内求解它们。

  4. 什么是确定算法,什么是不确定算法

    设A是问题II的一个算法。如果在处理问题II的实例时,在算法的执行过程中,每一步只有一个确定的选择,则称算法A是确定性算法。因此,确定性算法对于同样的输入实例一遍一遍地执行,其输出从不改变。通常在写程序时,用到的都是一些确定性算法,比如查找和排序算法。

    非确定算法包含两个阶段:猜测和验证阶段。设A 是求解问题II的一个算法。对于规模为n的输入实例L,生成一个输出结果S,把它作为给定实例L的一个候选解,该解可能是相应的输入实例L的解,也可能不是,甚至完全不着边际。但是它能够以多项式时间内能够输出这个结果。那么在验证阶段需要一个确定性算法来验证,把L和S都作为该算法的输入,如果s的确是L的一个解,算法停止且输出是,否则输出否。

  5. P类问题和NP类问题的关系?

    P类问题是可以用多项式时间的确定性算法来进行判定或求解

    NP类问题可以用多项式时间的不确定算法来进行判定或求解,关键是存在一个确定算法,能够以多项式的时间来验证在猜测阶段所产生的答案。

    直观上理解:P类问题是在确定性算法下的易解问题,而NP问题是非确定性计算模型下的易验证问题。因为确定性算法只是不确定算法的一种特例,显然有P NP,再者,通常认为,问题求解难于问题验证,故大多数研究者相信NP类是比P类要大得多集合,即是P! NP,故P!=NP。可是还没有任何人证明:在NP类中有哪个问题不属于P类。即P=NP?,但是后来人们发现还有一系列的特殊NP类问题,这类问题使得大多数科学家相信P!=NP,这类特殊的问题就是NP完全问题。

  6. NP完全问题与NP 问题之间的关系?

     1. 解决了这个问题我们就解决了所有NP问题
    2. 这个问题本身也是个NP问题

本文出自 “简答生活” 博客,请务必保留此出处http://1464490021.blog.51cto.com/4467028/1914944

P和NP问题

标签:p=!np?

原文地址:http://1464490021.blog.51cto.com/4467028/1914944

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!