P/NP问题 | 维基百科

P 问题

P 问题的定义是:所有可以由一个确定型图灵机在多项式表达的时间内解决的问题

P 代表 Polynomial-time (adj. 多项式时间)

简单理解:答案可以很快被计算出来的问题

NP 问题

NP 问题的定义是:所有可以在多项式时间内验证它的解是否正确的决定问题

N 代表 Non-deterministic (非确定性的)

简单理解:问题的答案可以很快验证的问题。或者说,问题的答案不一定可以很快计算出来,但是如果给你一个问题的答案,你可以很快验证这个答案对不对

现在科学家们不确定 P 问题是否和 NP 问题相等,即 P = NP 是否成立,或者 P ≠ NP 是否成立。也就是说,科学家不确定如果一个问题的解能够很快被验证,那么这个问题的解是否也能很快地被求出来。

NP-Complete 问题

NP-Complete 问题(亦称 NPC 问题,NP 完全问题),指的是那些在 NP 问题中最不像在 P 中的问题。也就是说,NPC 问题是那些看起来解最不可能很快求出来的问题。但同时他们的解一定能很快被验证。

NP-Hard 问题

NP困难 | 维基百科

如果所有 NP 问题都可以多项式时间内归约到某个问题,则称该问题为 NP 困难问题。

关于归约 (Reducibility):

简单的说,一个问题 A 可以约化为问题 B 的含义是,可以用问题 B 的解法解决问题 A(个人感觉也就是说,问题 A 是 B 的一种特殊情况)。标准化的定义是,如果能找到一个变化法则,对任意一个 A 程序的输入,都能按照这个法则变换成 B 程序的输入,使两程序的输出相同,那么我们说,问题 A 可以约化为问题 B。

例如求解一元一次方程这个问题可以约化为求解一元二次方程,即可以令对应项系数不变,二次项的系数为 0,将 A 的问题的输入参数带入到 B 问题的求解程序去求解。

参考:什么是P、NP、NPC、NP-Hard问题 | Ji Hu's Blog

另外,约化还具有传递性,A 可以化约为 B,B 可以约化为 C,那么 A 也可以约化为 C。

左边是在假设 P = NP 的情况下,描述 P,NP,NP 完全,以及 NP 困难问题之间关系的欧拉图。右边则是假设 P ≠ NP 的情况下三者之间关系的欧拉图。

注意,虽然 NP-Hard 问题的名字里带了 “NP” 俩字,但是 NP-Hard 问题并不一定是 NP 问题(即并不一定能很快验证 NP-Hard 问题的解,也就是说,NP-Hard 问题是那些不一定能很快求出解,也不一定能很快验证解的问题)。

NP-Hard 问题至少和 NPC 问题一样难。

P 问题和 NP 问题的简单理解的更多相关文章

  1. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  2. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  3. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  4. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  5. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  6. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  7. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  8. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

  9. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  10. 简单理解JavaScript闭包

    很多关于JS的书籍例如<JavaScript权威指南>或者<高程>都把闭包解释的晦涩难懂,萌新们是怎么也看不懂啊!不过别怕,今天我就用很简单的方式给大家讲解下到底什么是闭包.这 ...

随机推荐

  1. .net入行三年的感想回顾

    从21年毕业到现在,还差几天就三年了 工作后才知道,工作年限分为1年以下 .3~5年.5~10年.晋升老板,每段都有每段的故事和总结 回顾下我的前三年工作心路,思考下未来发展之路(emmm,我是觉得我 ...

  2. .Net Core 访问 appsettings.json

    1.添加 NuGet 包 Microsoft.Extensions.Configuration 2.通过注入获取 Configuration 注意:注入获取的必须提前在 StartUp 里面提前注册 ...

  3. 在SelfHost项目中获取客户端IP地址

    在SelfHost项目中,获取客户端的IP地址比OwinSelfHost项目要复杂一些,可以通过以下方法获得: base.Request.Properties["System.Service ...

  4. DDP:微软提出动态detection head选择,适配计算资源有限场景 | CVPR 2022

    DPP能够对目标检测proposal进行非统一处理,根据proposal选择不同复杂度的算子,加速整体推理过程.从实验结果来看,效果非常不错 来源:晓飞的算法工程笔记 公众号 论文: Should A ...

  5. yb课堂之登陆校验Json Web Token实战之封装通用方法 《九》

    引入相关依赖并开发JWT工具类,开发生产token和校验token的方法 加入相关依赖 <dependency> <groupId>io.jsonwebtoken</gr ...

  6. 某手创作服务 __NS_sig3 sig3 | js 逆向

    拿获取作品列表为例 https://cp.kuaishou.com/rest/cp/works/v2/video/pc/photo/list?__NS_sig3=xxxxxxxxxxx 搜索__NS_ ...

  7. 使用浏览器的cookies进行登陆

    1.使用浏览器Cookie登陆 In [ ]: cookie = 'uniqueVisitorId=a2151df1-4833-00ae-72e0-f4b99d2b7be2; pgv_pvid=232 ...

  8. PixiJS源码分析系列:第二章 渲染在哪里开始?

    第二章 渲染在哪里开始? 牢记,按第一章介绍的 npm start 启动本地调式环境才可进行调式 如果是 example 文件夹内的例子还需要 serve . 开启本地静态服务器 上一章介绍了 Pix ...

  9. [oeasy]python0018_ ASCII_字符分布_数字_大小写字母_符号_黑暗森林

    ​ 打包和解包 回忆上次内容 decode 就是解码 解码和编码可以转化 encode 编码 decode 解码 互为逆过程 大小写字母之间序号全都相差(​​32​​)​​10进制​​ ​ 编辑 这是 ...

  10. 企业级环境部署:在 Linux 服务器上如何搭建和部署 Python 环境?

    在大部分企业里,自动化测试框架落地都肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试. 不过Jenkins搭建一般都会部署在公司的服务器上,不会在私 ...