1. 多项式时间(Polynomial time)

时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当程序所处理的问题规模扩大后,程序需要的时间长度对应增长得有多快。也就是说,对于某一个程序,其处理某一个特定数据的效率不能衡量该程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。

不管数据有多大,程序处理所花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,比如找n个数中的最大值这个程序的时间复杂度就是O(n),为线性级复杂度,而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,时间复杂度是,为平方级复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是的指数级复杂度,甚至的阶乘级复杂度。

结合函数增加速度和算法的实际运行效果,多项式时间算法可视为高效算法或实用算法,指数时间算法为不实用算法。

2. 确定性算法与非确定性算法

2.1. 确定性算法

设A是求解问题B的一个解决算法,在算法的整个执行过程中,每一步都能得到一个确定的解,这样的算法就是确定性算法。

2.2. 非确定性算法

设A是求解问题B的一个解决算法,它将问题分解成两部分,分别为猜测阶段和验证阶段,其中

  • 猜测阶段:在这个阶段,对问题的一个特定的输入实例x产生一个任意字符串y,在算法的每一次运行时,y的值可能不同,因此,猜测以一种非确定的形式工作。
  • 验证阶段:在这个阶段,用一个确定性算法(有限时间内)验证。①检查在猜测阶段产生的y是否是合适的形式,如果不是,则算法停下来并得到no;② 如果y是合适的形式,则验证它是否是问题的解,如果是,则算法停下来并得到yes,否则算法停下来并得到no。它是验证所猜测的解的正确性。

3. 规约/约化

问题A可以约化为问题B,称为“问题A可规约为问题B”,可以理解为问题B的解一定就是问题A的解,因此解决A不会难于解决B。由此可知问题B的时间复杂度一定大于等于问题A。

现在有两个问题:求解一个一元一次方程和求解一个一元二次方程。那么我们说,前者可以规约为后者,意即知道如何解一个一元二次方程那么一定能解出一元一次方程。我们可以写出两个程序分别对应两个问题,那么我们能找到一个“规则”,按照这个规则把解一元一次方程程序的输入数据变一下,用在解一元二次方程的程序上,两个程序总能得到一样的结果。这个规则即是:两个方程的对应项系数不变,一元二次方程的二次项系数为0。

从规约的定义中我们看到,一个问题规约为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断规约,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC问题,也就是NP-完全问题。

4. P类问题、NP类问题、NPC问题、NP难问题

P类问题:能在多项式时间内可解的问题。

NP类问题:在多项式时间内“可验证”的问题。也就是说,不能判定这个问题到底有没有解,而是猜出一个解来在多项式时间内证明这个解是否正确。即该问题的猜测过程是不确定的,而对其某一个解的验证则能够在多项式时间内完成。P类问题属于NP问题,但NP类问题不一定属于P类问题。

NPC问题:存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。其定义要满足2个条件:

  • 它是一个NP问题;
  • 所有NP问题都能规约到它。

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

参考文献

P问题、NP问题、NPC问题、NP-hard问题详解_困比比的博客-CSDN博客_np-hard问题是什么

组合优化_浙江大学_中国大学MOOC(慕课)

P问题、NP问题、NPC问题、NP-hard问题详解相关推荐

  1. P、NP、NPC(NP完全问题)、NP-hard问题概述

    P.NP.NPC(NP完全问题).NP-hard问题概述 一.概念总结 1.P问题: 能在多项式时间内解决的问题 2.NP问题: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时 ...

  2. (数学)P、NP、NPC、NP hard问题

    概念定义: http://m.elecfans.com/article/757041.html https://www.cnblogs.com/AndyJee/p/5048556.html P问题:能 ...

  3. P,NP,NPC(NP完备),NP-hard(NP难),时间复杂度

    P是在多项式时间可以"解决"的一类问题. NP(Non-deterministic Polynomial)是给我们一个解,在多项式时间可以"验证"解是否正确. ...

  4. P、NP以及NPC问题

    P.NP.NPC 概念 > P问题:能够在多项式时间内解决的决策问题. -举例: 图搜索问题.最短路径问题.最小生成树问题······ > NP问题:不能在多项式时间内解决或不确定能不能在 ...

  5. P、NP与NPC 的通俗理解

    P.NP与NPC 的通俗理解 1.多项式时间复杂度 定义: 解决问题需要的时间与问题的规模之间是多项式关系. 多项式关系形如O(nk)" role="presentation&qu ...

  6. 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★

    文章目录 一.P 类 二.NP 类 三.NPC 类 ( NP 完全 ) 四.P .NP .NPC 三者关系 一.P 类 P\rm PP 类 : ★ 所有 能够被 确定性 单个带子图灵机 , 在 多项式 ...

  7. 那传说中的P、NP以及NPC问题

    那传说中的P.NP以及NPC问题     (这里只是自己的一些总结) 在讲这几个问题之前,有几个东西是必须要说的,包括时间复杂度.空间复杂度.图灵机什么的.那么我们就慢慢来一一说来.    图灵机:图 ...

  8. P、NP、NPC、NP-Hard等问题总结

    0.概念 P Problem: 对于任意的输入规模 n,问题都可以在 n 的多项式时间内得到解决: NP(Non-deterministic Polynomial) Problem: 可以在多项式的时 ...

  9. P、NP、NPC问题

    转自:http://blog.csdn.net/wwy851/article/details/6082007 最近看了很多关于P.NP和NPC问题的文章,但是都不是很系统全面,很多叙述的也不太清楚,有 ...

  10. P和NP以及NPC、NP-Hard问题

    文章目录 P问题 NP问题 NP-C问题(NP-Complete) NP-Hard 规约 欢迎大家访问我的GitHub博客 https://lunan0320.cn **p代表Polynomial,N ...

最新文章

  1. java的输出流包括_【转】输入/输出流 - 深入理解Java中的流 (Stream)
  2. 作业4(列表增加或者修改)
  3. 0122 - EOS 编程学习日志(1)
  4. Matlab之rand(), randn(), randi()函数的使用方法
  5. php js登录,php+js实现单点登录
  6. LeetCode946-验证栈序列
  7. Python 将时间戳转换为本地时间并进行格式化
  8. Linux组件封装(三)使用面向对象编程封装Thread
  9. 【图像分割】基于matlab蚁群优化模糊聚类图像分割【含Matlab源码 130期】
  10. 罗永浩被判为“老赖”最新回应:“卖艺”也要还完债,锤子科技会做下去
  11. 个人小程序 给头像戴圣诞帽
  12. openvino CvCapture_MSMF::initStream Failed to set mediaType (unsupported media type)
  13. 【计算机网络】 如何看懂路由表
  14. 【教程】使用 LitJson 处理 Json 数据信息
  15. 远程直播服务器连接失败,哔哩哔哩直播姬连接失败如何解决 直播姬连接失败解决方法攻略大全...
  16. 关于Qt数据库相关开发的一些经验总结
  17. DNS域名解析服务(正向解析)
  18. 怎么获得积分啊,急!!!!急!!!!急!!!!急!!!!
  19. 中职生计算机基础知识总结,浅谈中职学生的计算机基础教育
  20. java:输出一个蜗牛图案

热门文章

  1. jquery html 兼容ie8,IE浏览器 对 jquery版本的兼容性 支持
  2. 【数学建模】数据包络分析法
  3. 安装了谷歌服务框架还是闪退_GO谷歌安装器小米专版
  4. cs224n课后作业
  5. Spring中的AOP原理
  6. C语言求解根号2的近似值
  7. BT.2020 新一代超高清UHD视频制作与显示系统标准
  8. Smart3D系列教程3之 《论照片三维重建中Smart3D几个工作模块的功能意义》
  9. 关于下载excel 解析文件名乱码
  10. c语言随机抽奖小程序,基于C#实现简单的随机抽奖小程序