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. 『vulnhub系列』Hack Me Please-1

    『vulnhub系列』Hack Me Please-1 下载地址: https://www.vulnhub.com/entry/hack-me-please-1,731/ 信息搜集: 使用nmap进行 ...

  2. Java 面向对象编程之InstanceOf关键词和多态

    InstanceOf关键字使用,什么是多态 InstanceOf关键字 是Java的一个二元操作符(运算符),也是Java的保留关键字 语法 //如果该object 是该class的⼀个实例,那⼀个实 ...

  3. CF858C 题解

    洛谷链接&CF 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给你一个均为小写字母的字符串,如果它的子串同时满足: 三个连着的辅音字母. 这一段连着的辅音字母 ...

  4. 第八节 JMeter基础-高级登录【数据库数据驱动】

    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:获取数据库用户表中的数据进行登录接口测试.思路: 引用jar包[测试计划]. 设置数据库的连接信息,取变量名db1-- ...

  5. Python 基于pymongo操作Mongodb学习总结

    实践环境 Python 3.6.4 pymongo 4.1.1 pymongo-3.12.3-cp36-cp36m-win_amd64.whl 下载地址:https://pypi.org/simple ...

  6. 解决 IIS Express 启动错误:“拒绝访问”问题

    报错 Starting IIS Express ... stderr: Failed to register URL "http://localhost:8378/" for si ...

  7. LLM并行训练7-混合并行总结

    概述 根据前面的系列文章, 对预训练大模型里用到的主要并行加速技术做了一系列拆分分析. 但是在实际的训练里往往是多种并行混合训练. 我们要怎么配置这些并行策略才能让训练框架尽可能的减少通信瓶颈, 提升 ...

  8. Python+selenium编写第一个UI自动化脚本

    python UI自动化前提:①python需要安装selenium模块  ②下载浏览器驱动 1.安装selenium模块 先确认本地是否安装selenium模块,没有的话点击右边的添加按钮" ...

  9. 【PostgreSQL】下载安装PgSQL

    官网下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Windows平台 官网直接提供exe安装包, ...

  10. 【爬虫】Java爬取KFC全国门店信息

    官网地址: http://www.kfc.com.cn/kfccda/storelist/index.aspx 基础库 <dependencies> <dependency> ...