AI数学基础之:P、NP、NPC问题
简介
我们在做组合优化的时候需要去解决各种问题,根据问题的复杂度不同可以分为P、NP、NPC问题等。今天给大家来介绍一下这些问题类型。
P问题
在计算复杂度理论中,P(也称为PTIME或DTIME)是基本的复杂度类型。 它是指能够使用确定图灵机在多项式时间内解决的所有决策问题。
这里我们给一下P的定义,如果一个公式语言L是一个P类型,那么当且仅当存在这样的一个确定图灵机M时成立:
- 对于所有的输入,M都会在多项式时间内运行
- 对于L中所有的x, M的输出都是1
- 对于不在L中的所有x,M输出都是0
常见的P问题包括线性规划的决策版本,计算最大公因数和找到最大匹配。 在2002年,证明了确定数字是否为质数的问题也是一个P问题。
NP问题
在计算复杂度理论中,NP(nondeterministic polynomial time)不确定性多项式时间主要用来衡量分类决策问题的复杂度。 NP是一组决策问题,对于这些问题实例来说,如果答案为“是”,那么表示该实例使用确定图灵机可在多项式时间内验证成功。
NP实际上是由两个阶段组成的,第一阶段包括对解决方案的猜测,该阶段以非确定性方式生成,而第二阶段包括确定性算法,验证猜测是否可以解决问题。也就是说NP= nondeterministic + polynomial。
根据P和NP的定义,我们可以发现所有的P问题都是NP问题,因为P的定义是所有问题都可以在多项式时间内确定地解决,而NP的定义是问题可以在多项式时间内得到验证的问题。
但是NP包含了更多的问题,其中NP中最难的问题被称为NP-complete
问题。解决多项式时间中的此类问题的算法也能够解决多项式时间中的任何其他NP问题。
NP问题的例子
在计算机科学中,很多搜索优化的问题都可以被看做是NP问题。旅行商问题就是一个典型的NP问题。
“给出一个城市列表以及每对城市之间的距离,要找到一条访问每个城市一次最后返回原城市的最短路径” 这是组合优化中的一个NP难题,在理论计算机科学和运筹学中很重要。
有些NP问题很难解决
因为NP问题中包含了很多实际生活中非常重要的问题,所以人们为查找NP中的多项式时间算法付出了巨大的努力。但是,NP中仍然存在许多问题,这些问题好像无法在多项式时间内得到解决。关于这些问题在多项式时间内是否能够被解决是计算机科学中最大的未解决问题之一。
在这种情况下,引入了一个重要的概念就是NP完全决策问题集(NP-complete),它是NP的子集,可以非正式地描述为NP中“最难”的问题。如果我们说一个问题被证明是NPC问题,那么意味着在这个问题上无法找到多项式时间算法。
但是,在实际应用中,通常不会花费大量的计算去寻找一个最优解,但是可以在多项式时间内找到一个次优解,这对于实际应用就已经足够了。
NPC问题
在计算复杂度理论中,满足以下情况的问题是NPC问题:
- 一个不确定的图灵机可以在多项式时间内求解。
- 确定性的Turing机可以在较大的时间复杂度中进行求解(EXPTIME或者暴力搜索算法),并且可以在多项式时间内验证其解。
- 它可以用来模拟任何其他具有相似可解性的问题(NP中的其他问题都可以在多项式时间内转换或者规约为该问题)。
根据规则3,因为NPC问题是NP问题的更加复杂的形式,如果你可以找到一个解决某个 NP-complete 问题的多项式算法,那么所有的 NP 问题都将可以很容易地解决。
举个例子,一个一元一次方程可以规约为求一个一元二次方程,只需要将二次型系数变为0即可。通过不断地规约,我们能得到复杂度更高但是应用范围更广的算法来代替复杂度虽低但是应用范围小的一类问题的算法。
尽管可以“快速”验证NPC问题的解决方案,但是没有已知的方法可以快速找到解决方案。即,随着问题的大小增长,使用任何当前已知的算法解决问题所需的时间迅速增加。
仍未发现用于计算NP完全问题的解决方案的方法,但是计算机科学家和程序员仍然经常遇到NP完全问题。 NP完全问题通常通过使用启发式方法和近似算法来解决。
NP-hard
在计算复杂性理论中,NP-hard是对一类问题的描述,这些问题“至少与NP中最难的问题一样难”。 NP-hard问题的一个简单例子是子集和问题。
如果一个已知的NPC问题能够规约到此问题,那么这个问题就叫做NP-hard问题。
所以NPC问题一定是NP-Hard问题,但并不是所有的NP-Hard问题都是NPC问题。
P和NP问题
P和NP问题是计算机科学中尚未解决的主要问题。它谈论的是如果一个问题可以快速的被验证,那么该问题是否可以被快速解决?
P是指该问题能够在多项式时间内找到解决方案,而NP是指如果找到候选的答案,则能够进行快速验证。
一般情况下大家都任务P != NP,也就是说虽然无法在多项式时间内解决,但答案可以在多项式时间内验证。
根据P和NP是否相同,我们分别作出P、NP、NPC和NP-Hard的关系图。
本文已收录于 http://www.flydean.com/04-p-np-npc-problem/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
AI数学基础之:P、NP、NPC问题的更多相关文章
- 图解AI数学基础 | 线性代数与矩阵论
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-det ...
- 算法复习-P NP NPC NP-hard概念
from http://blog.csdn.net/huang1024rui/article/details/49154507 P.NP.NPC和NP-Hard相关概念的图形和解释 一.相关概念 P: ...
- 图解AI数学基础 | 概率与统计
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-det ...
- 浅谈P NP NPC
P问题:多项式时间内可以找到解的问题,这个解可以在多项式时间内验证. NP问题:有多项式时间内可以验证的解的问题,而并不能保证可以在多项式时间内找到这个解. 比如汉密尔顿回路,如果找到,在多项式时间内 ...
- P,NP,NPC,NPC-HARD
P: 能在多项式时间内解决的问题 NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题 NPC: NP完全问题,所有NP问题在多项式时间内都能约化(Reducib ...
- p,np,npc,np难问题,确定图灵机与非确定图灵机
本文转自豆瓣_燃烧的影子 图灵机与可计算性 图灵(1912~1954)出生于英国伦敦,19岁进入剑桥皇家学院研究量子力学和数理逻辑.1935年,图灵写出了"论高斯误差函数"的论文, ...
- P,NP,NPC的通俗解释
这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题 了”之类的话.你要知道,大多数人此时所说的NP问题其实都是指的N ...
- P类问题,NP,NPC,HPHard,coNP,NPI问题 的简单认识
参考<算法设计技巧与分析>--沙特 问题可以分为判定类问题和最优化问题,判定类问题可以转化为最优化问题,所以下面讨论的是判定类的问题. P类问题是可以在多项式时间 采用确定性算法给出解 ...
- P NP NPC
study from : http://www.matrix67.com/blog/archives/105
随机推荐
- 微信小程序:自定义组件
为什么要学习自定义组件? 1.用上我自己的单词abc,我希望在页面中展示椭圆形的图片, 2.打开手机淘宝,假如现在要做一个企业级项目,里面有很多页面,首页存在导航模块,点击天猫,进入第二个页面,而第二 ...
- APP跳转小程序,小程序跳转APP
关注公共号,搜索 "APP跳转小程序,小程序跳转APP",查看原文 前置条件: 开发环境:windows 开发框架:uni-app , H5+,nativeJS,mpvue 编辑器 ...
- [Java Tutorial学习分享]接口与继承
目录 接口 概述 Java 中的接口 使用接口作为API 定义一个接口 The Interface Body 实现接口 使用接口作为类型 进化的接口 默认方法 扩展包含默认方法的接口 静态方法 接口总 ...
- 微信小程序onReachBottom第二次失效
当整个页面就是一个view包着一个轮播.一个横向scroll-view和一个纵向scroll-view onReachBottom方法只执行一次 解决方法:
- 【读书笔记】Linux命令行与Shell脚本编程大全
Linux命令行与Shell脚本编程大全 5.2 shell 的父子关系 命令分组 Command Grouping 主要有两种形式: 一种以小括号包括,命令之间以冒号分隔.也被称为 进程列表: 注意 ...
- 爬虫入门到放弃系列05:从程序模块设计到代理IP池
前言 上篇文章吧啦吧啦讲了一些有的没的,现在还是回到主题写点技术相关的.本篇文章作为基础爬虫知识的最后一篇,将以爬虫程序的模块设计来完结. 在我漫(liang)长(nian)的爬虫开发生涯中,我通常将 ...
- P2424 约数和 【整除分块】
一.题目 P2424 约数和 二.分析 因为都是加法,那么肯定有的一个性质,即前缀和的思想,就是$$ { ans =\sum_{i=1}^y f(i)} - {\sum_{i=1}^x f(i)} ...
- MySQL中where和on,where和having 的区别
where和on的区别 用到连接查询时on会常用到,我们以左连接为例,来了解on的作用. on是在生成临时表使用的条件,不管on子句的条件是否为真,其都会返回左表的数据,如果条件为真则右表对应的数据也 ...
- 攻防世界 reverse hackme
hackme XCTF 3rd-GCTF-2017 __int64 __fastcall sub_400F8E(__int64 a1, __int64 a2) { char input[136]; / ...
- fork、exec 和 exit 对 IPC 对象的影响
GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/ ...