P问题:该问题存在一个可以在多项式时间内解决该问题的算法。(P:polynominal,多项式)

为什么我们要研究这个?因为计算机处理的输入常常不是那么几十个几千个那么一点点,想象一下,当计算机处理的数据达到100万个的时候,时间复杂度为O(n2)和O(en)的算法,所需的运行次数简直是天壤之别,O(e^n)指数级的可能运行好几天都没法完成任务,所以我们才要研究一个问题是否存在多项式时间算法。而我们也只在乎一个问题是否存在多项式算法,因为一个时间复杂度比多项式算法还要复杂的算法研究起来是没有任何实际意义的。

NP类问题:能在多项式时间内验证得出一个正确解的问题。(NP:Nondeterministic polynominal,非确定性多项式)

P类问题是NP问题的子集,因为存在多项式时间解法的问题,总能在多项式时间内验证他。

注意定义,这里是验证。NP类问题,我用个人的俗话理解就是,不知道这个问题是不是存在多项式时间内的算法,所以叫non-deterministic非确定性,但是我们可以在多项式时间内验证并得出这个问题的一个正确解。举个例子,

著名的NP类问题:旅行家推销问题(TSP)。即有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的环路,这个环路路径小于a。我们知道这个问题如果单纯的用枚举法来列举的话会有(n-1)! 种,已经不是多项式时间的算法了,(注:阶乘算法比多项式的复杂)。那怎么办呢?我们可以用猜的,假设我人品好,猜几次就猜中了一条小于长度a的路径,我画画画画,好的,我得到了一条路径小于a的环路,问题解决了,皆大欢喜。可是,我不可能每次都猜的那么准,也许我要猜完所有种呢?所以我们说,这是一个NP类问题。也就是,我们能在多项式的时间内验证并得出问题的正确解,可是我们却不知道该问题是否存在一个多项式时间的算法,每次都能解决他(注意,这里是不知道,不是不存在)。

所以这就引出了这类讨论的一个千年问题:是否 NP类问题=P类问题?

即,是否所有能在多项式时间内验证得出正确解的问题,都是具有多项式时间算法的问题呢?

太让人震惊了,要是解决了这个问题,那岂不是所有的NP问题都可以通过计算机来解决?

圣战的结果是,有的存在,有的不存在。=_=

在这场圣战中,人们还发现了很多的东东,也就是我们接下来要介绍的NPC问题(啊喂,我不是游戏NPC)和NPH问题。

(PS :网络上经常有人说,这不是个NP问题吗,其实很多时候他们说的应该是NPC问题,而不是NP问题)

为了证明这个千古难题,科学家想出了很多办法。其中之一就是问题的约化。所谓问题约化就是,可以用问题B的算法来解决A ,我们就说问题A可以约化成问题B。举个例子,一元一次方程的求解,跟二元一次方程的求解,我们知道,只要能求解二元一次方程,那就可以用二元一次方程的解法来求解一元一次方程,只需要将一元一次方程加上y,并附加一个方程y=0就可以将一元一次方程变形为一个二元一次方程,然后用二元一次方程的解法来求解这个方程。注意,这里二元一次方程的解法会比一元一次的复杂。所以我们说,只需要找到解二元一次方程的规则性解法,那就能用这个规则性解法来求解一元一次方程。从这里也可以看出,约化是具有传递性的,如A约化到B,B约化到C,A就可以约化到C,同时不断约化下去,我们会发现一个很惊人的特性,就是他一定会存在一个最大的问题,而我们只需要解决了这个问题,那其下的所有问题也就解决啦!这就是我们所说的NPC问题的概念!!!

引到NP问题里就是,对于同一类的所有的NP类问题,若他们都可以在多项式时间内约化成最难的一个NP类问题,(我们直观的认为,被约化成的问题应具有比前一个问题更复杂的时间复杂度)当我们针对这个时间复杂度最高的超级NP问题要是能找到他的多项式时间算法的话,那就等于变向的证明了其下的所有问题都是存在多项式算法的,即NP=P!!!!给出NPC问题定义,

NPC问题:如果所有np问题都能在多项式时间内转化为他,则称该np问题为npc问题(NPC:NP complete又叫NP完全问题)

NPC问题是NP问题的子集。

当然,很多时候NPC问题是找不到一个多项式时间算法的,更多时候他是一个指数级的算法。

最后介绍下NPH问题。

NPH问题:我们又叫NP难问题,他不是一个NP问题,然后所有的NPC问题都可以在多项式时间内转化为他的话,我们就叫他NPH(hard)问题。

至此,介绍完了这四大问题,感觉自己像在写小说一样,越写越兴奋,哈哈,简直又臭又长~~

算法中的P问题、NP问题、NP难问题和NP完全问题相关推荐

  1. 算法中的P问题、NP问题、NP完全问题和NP难问题梳理

    结论(可以简单这么初步认识):NPH>NPC>NP>或=P 在讲P类问题之前先介绍两个个概念:多项式,时间复杂度.(知道这两概念的可以自动跳过这部分) 1.多项式: axn−bxn− ...

  2. [总结]算法中的P问题、NP问题、NP完全问题和NP难问题

    在讨论算法的时候,常常会说到这个问题的求解是个P类问题,或者是NP难问题等等,于是我特地搜了这方面的资料,自己总结了下,估计研究算法的大家应该都知道,要是我总结的哪里不对,欢迎一起探讨~ 在讲P类问题 ...

  3. 算法中的P问题、NP问题、NP完全问题和NP难问题

    在讨论算法的时候,常常会说到这个问题的求解是个P类问题,或者是NP难问题等等,于是我特地搜了这方面的资料,自己总结了下,估计研究算法的大家应该都知道,要是我总结的哪里不对,欢迎一起探讨~ 在讲P类问题 ...

  4. 一文讲解机器学习算法中的共线性问题

    多重共线性是使用线性回归算法时经常要面对的一个问题.在其他算法中,例如决策树和贝叶斯,前者的建模过程是逐步递进,每次拆分只有一个变量参与,这种建模机制含有抗多重共线性干扰的功能:后者干脆假定变量之间是 ...

  5. python 回归去掉共线性_一文讲解机器学习算法中的共线性问题

    多重共线性是使用线性回归算法时经常要面对的一个问题.在其他算法中,例如决策树和贝叶斯,前者的建模过程是逐步递进,每次拆分只有一个变量参与,这种建模机制含有抗多重共线性干扰的功能:后者干脆假定变量之间是 ...

  6. 集成算法中的Bagging

    Bagging meta-estimator 基本描述 在集成算法中,bagging 方法会在原始训练集的随机子集上构建一类黑盒估计器的多个实例,然后把这些估计器的预测结果结合起来形成最终的预测结果. ...

  7. 密码算法中iv值是什么_?标检测中的?极?值抑制算法(nms):python代码解析

    ⾮极⼤值抑制(Non-Maximum Suppression)原理 ⾮极⼤值抑制,顾名思义,找出极⼤值,抑制⾮极⼤值.这种思路和算法在各个领域中应⽤⼴泛,⽐如边缘检测算法canny算⼦中就使⽤了该⽅法 ...

  8. Np计算机领域,我国数学家证明NP=P

    2020年7月出版的<计算机科学>(中国计算机学会会刊)发表了国防科技大学教授.湘潭大学计算机学院特聘教授姜新文题为<哈密顿图判定问题的多项式时间算法>的论文,这标志着在数学和 ...

  9. TensorFlow2实现协同过滤算法中的矩阵分解(首家基于TS2版本)

    目标: 用TensorFlow2,实现协同过滤算法中的矩阵分解.网上找的绝大部分是基于一个模板复制出来的,且基于TensorFlow1,因此本人亲自动手,用TensorFlow2实现. 好奇为什么Te ...

最新文章

  1. mac mysql的安装
  2. LSGO:祝大家新年快乐!
  3. DOM4J对于XML的用法
  4. [architecture]-AXI/APB/AHB/ACE的介绍
  5. 4.3 计算机网络之IPv4(IPv4分组、IPv4地址、NAT、子网划分与子网掩码、CIDR、ARP协议、DHCP、ICMP)
  6. 为什么要将对象序列化
  7. 搭载恩智浦i.MX 8M Plus处理器的核心板,它来了!
  8. 天锋w2019_不知道为什么那么多人喜欢三星W2019,直到入手这款天锋W2019手机
  9. Go 应用性能优化指北
  10. 入门人工智能,我究竟该学些什么?
  11. 我的log4j与logback简易配置
  12. g++: command not found的解决
  13. 带你玩转Logview: MaxCompute Logview参数详解和问题排查
  14. python基础实训_python基础实践(三)
  15. 2.3绘制构造线与射线
  16. SSL 1105——【USACO 2.1】顺序的分数(递归+二分)
  17. python实现天气预报_python实现智能语音天气预报
  18. ol3 Demo1 ----加载geoserver发布的地图数据
  19. 路由器OpenWRT、LEDE、潘多拉、华硕、梅林、老毛子系统区别和特点
  20. ofd 文件发票解析

热门文章

  1. C语言编程之.H文件与.C文件的关系
  2. 偷偷学K3S,然后惊呆所有人
  3. LTE提高了频谱利用率吗?
  4. python爬虫脚本获取网易招聘某个职业的全部数据信息
  5. bvh动作 舞蹈_kinect动作捕捉初探(下)——bvh文件的处理和应用
  6. Altium Designer(八):邮票孔拼版
  7. 【MySQL】检索数据
  8. C语言探索之旅 | 第二部分第一课:模块化编程
  9. Python 3 爬虫之批量下载字帖图片
  10. js获取当前日期及下一天日期