N、NP、NPC问题分析总结

article/2025/7/10 13:47:58

目录

  • 一、时间复杂度
    • 1、定义
    • 2、多项式级别的复杂度
    • 3、非多项式级别的复杂度
    • 4、并非所有的问题都能够找到多项式级别时间复杂度的解法
  • 二、P、NP、NPC问题
    • 1、P问题
    • 2、NP问题
    • 3、一类特殊的NP问题
    • 4、约化(Reducibility)
    • 5、NPC问题
    • 6、NPC问题的定义
    • 7、证明一个问题是NPC问题
    • 8、NP-Hard问题。
    • 9、P、NP、NPC、NP-Hard问题关系

一、时间复杂度

1、定义

时间复杂度并不是一个程序运行完成需要的时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。

2、多项式级别的复杂度

n出现在底数的位置(n表示数据的规模)。如:O(1)、O(log(n))、O(n^a)

3、非多项式级别的复杂度

O(a^n)、O(n!)

4、并非所有的问题都能够找到多项式级别时间复杂度的解法

如:The Halting Problem图灵停机问题,甚至不会有解。
输出1到n这n个数的全排列,至少是阶乘级。
Hamilton回路:给定一个图,是否能找到一条经过每个顶点一次且恰好一次(不重复也不遗漏)最后又走回来的路。(NPC问题)

二、P、NP、NPC问题

1、P问题

P——polynomial多项式
如果一个问题可以找到一个能在多项式时间内解决它的算法,那么这个问题属于P问题。

2、NP问题

可以在多项式的时间内验证一个解的问题。
NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。
NP问题并不是非P类问题,因为有很多问题无法在多项式时间内验证,如:证明一个图中不存在Hamilton回路。
之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不可能指望一个问题连多项式地验证一个解都不行,却存在一个解决他的多项式级的算法。
信息学中号称最困难的问题——“NP问题”,实际上是在探讨NP问题与P类问题的关系。
显然,所有的P类问题都是NP问题(能多项式的解决一个问题,必能多项式的证明一个问题),即P属于NP。现在的NP问题,即研究是否所有的NP问题都是P类问题,是否有P=NP,证明或推翻P=NP?

3、一类特殊的NP问题

.目前人们普遍认为P=NP不成立,即,存在至少一个不可能有多项式级复杂度的算法的NP问题。原因是在研究NP问题的过程中找到了一类特殊的NP问题叫做NP-完全问题,即NPC问题。

4、约化(Reducibility)

问题A可以“变成”问题B来求解。如:一元一次方程可以约化为一元二次方程,通过二次项系数置0. Hamilton回路可以约化为TSP问题(Travelling Salesman Problem, 旅行商问题)
“问题A可约化为问题B”——> B的时间复杂度高于或者等于A的时间复杂度。
约化具有传递性。
我们说的“可约化”是指的可“多项式地”约化(Polynomial-time Reduible),即变换输入的方法是能在多项式的时间里完成的。

5、NPC问题

一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增加了。
通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但是应用范围更广的算法来替代复杂度虽然低但是适用范围很小的一类问题的算法。
类似,我们也可以找到一个“超级”NP问题,使得所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。这种“超级”NP问题存在多个,是一类问题,交过NP-完全问题,即NPC问题。

6、NPC问题的定义

(1)它是一个NP问题,(2)所有NP问题都可以约化到它。
既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P了。因此给NPC找一个多项式算法太不可思议了。所以前面才说,“正是NPC问题的存在,使人们相信P不等于NP”。所以,普遍认为,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。

7、证明一个问题是NPC问题

先证明它是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足,第一个NPC问题来源,下文将介绍),这样就可以说它是NPC问题了。
第一个NPC问题可设定为逻辑电路问题:给定一个逻辑电路,问是否存在一种输入使输出为True。
逻辑电路问题属于NPC问题,这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它。证明过程很复杂,大意是任意一个NP问题的输入和输出都可以转换为逻辑电路的输入和输出。因此对于一个NP问题,转化成了为求出满足结果为True的一个输入(即可行解)。

8、NP-Hard问题。

NP-Hard问题满足NPC问题定义的第二条但不一定要满足第一条。也就是说,NP-Hard问题不一定是NP问题,它的范围比NPC问题要广。
NP-Hard问题同样难以找到多项式的算法,但不在我们的研究范围内,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。

9、P、NP、NPC、NP-Hard问题关系

如下图所示:
NP可约化为NPC
参考资料

文章来源:https://blog.csdn.net/qq_40229166/article/details/122687776
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://chatgpt.dhexx.cn/article/lTHk6T6h.shtml

相关文章

[算法笔记]如何证明一个问题是NPC问题

[算法笔记]如何证明一个问题是NPC问题 步骤(Step)例子(Example)做题经验分析(Analysis)总结(Sum up) 步骤(Step) 在进入正题前,我想向大家讲解一…

npc内网穿透

备注:使用npc工具做内网穿透需要一台带公网的服务器作为服务端,在带公网IP的服务器为服务端,安装nps服务。在内网服务器安装npc客户端 安装使用地址:https://ehang-io.github.io/nps/#/ 下载地址:https://github.com/e…

unity3d如何量产npc

文章目录 1.技术概述2.技术详述2.1 修改预制体2.2放置预制体2.3开始量产 3.技术使用中遇到的问题和解决过程。3.1第一个npc脚没落地 4.进行总结。 1.技术概述 在unity3d游戏制作过程中,常常需要用到大量的剧情npc,特别是遇到,军训等大场面&a…

【npc实现代理】

nianzii is real !!!!!!!!哈哈哈哈哈哈,又到了快乐的时光了。今天给大家分享 自己在使用npc时候的一些步骤和方法。在此之前我先给大家分享一个白嫖别人nps的方法:fofa搜索 :app"nps" 即可出现一大堆没有隐藏网站指纹的nps网站的登…

计算传奇客户端中NPC外观代码的方法

每个NPC的外观都是由传奇客户端中的NPC.wil.文件提供素材,NPC.wil文件素材内综合了很多的图片。今天的教程,将教大家如何计算NPC外观代码. 首先,我们需要WIS编辑工具打开我们客户端中的npc.wil文件,查看我们需要的NPC外观图片编号…

计算机控制什么是npc,游戏里的npc是什么意思

游戏里的npc是什么意思?很多玩家在讨论游戏时会提到npc这个词,有些玩家不太理解该词的意思,想要了解,下面为大家介绍一下游戏里的npc的意思,想了解的玩家快来看看吧。 游戏里的npc是什么意思 NPC是Non-PlayerCharacter…

计算机控制什么是npc,npc是什么意思

很多朋友在玩游戏的时候,都有接触到npc,那么有人就要问了,npc是什么意思?它有什么作用呢?下面我们就来简单介绍一下。 npc是什么意思?概念如下: npc的全称是Non-Player Character,也就是非玩家控制角色的缩写。这个…

海盗王实现随身NPC功能

曾经玩过一个海盗王的服,它里面有个随身NPC交易的功能。 一般正常情况下,是在城里或者野外,来到一个NPC旁边,点击打开交易功能,才能进行物品的购买和出售。随身NPC可以在身边没有NPC的情况下,通过工坊的按…

游戏经济系统分析:通货与交易

来自GameRes,转载请标明出处:http://www.gameres.com/689338.html 文/旭曜灵 接上篇《 《PoE》的技能串联与体验设计:《Diablo II》的另一种诠释 》,这次是PoE系列的最后一篇,终于要来谈它特殊的经济系统了&#xf…

python中科学计数法怎么表示_python科学计数法转换

python 输出数字,如何不以科学计数法输出? 概述利用numpy设置输出选项即可 代码解析 未使用numpy设置: import time # time 时间类 print(time*time*1000) #输出一个非常大的数字 #out: 6.30e1352 由此可以看到,默认输出是以科学计数方式输出 使用numpy设置print的输出选项…

MATLAB临时关闭科学计数法显示

MATLAB临时关闭科学计数法显示,在format命令后加g即可解决,如: >> format long g

科学计数法

1.应用场景 较大较小数字表示&#xff0c;在一些算法中被用到。 如计算2^64&#xff0c;编程语言基本都是使用科学计数法表示结果。 2.介绍 科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式&#xff08;1≤|a|<10&#xff0c;n为整数&#xff09;&…

matlab 坐标不用科学计数法,matlab不用科学计数法

『壹』 matlab中怎么才能不是科学计数法表示结果。比如1.0e003 * 2.7581&#xff0c;怎么使它显示为2758.1谢谢了&#xff0c;很急啊 format long (小数位14) 或 format short(小数位4) 『贰』 matlab中科学计数法怎么表示 在matlab中&#xff0c;科学计数法用如下形式表示&…

计算机科学计数法符号,科学计数法怎么表示

科学计数法怎么表示2019-09-26 16:35:10文/陶凯月 科学计数法就是用幂的方式来表示。科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10&#xff0c;n为整数)&#xff0c;这种记数法叫做科学记数法。 科学记数法是一种记数的方法。把一个数表示成…

计算机输出科学计数法,python不用科学计数法

❶ Spyder集成开发环境中,Python绘图如何让Y轴不以科学计数法显示 很简单只需两个语句: import numpy as np np.set_printoptions(suppress=True) 这样就可以搞定! ❷ python 输出数字,如何不以科学计数法输出 概述 利用numpy设置输出选项即可 代码解析 1、未使用numpy设置…

C语言科学计数法介绍和示例

文章目录 1、科学计数法2、获取视频教程3、版权声明 1、科学计数法 在实际开发中&#xff0c;我们很少使用科学计数法&#xff0c;但是它经常出现在计算机系统中&#xff0c;例如浮点数在内存中的存放方式就是科学计数法&#xff0c;所以我们还是有必要学习科学计数法。 科学…

mysql查出来科学计数法_数据库字段出现科学计数法e+的情况分析

问题: 有时候,我们在将excel表格中数据导入数据库中时,对于表格中的数字会默认为float的数据类型,这个时候导入到数据库中的这个表的值是正常显示的; 然而如果你要把导入到数据库中的表,再插入到另一个表中,并且对应的字段如果是char、varchar或者是nvarchar等类型时,并…

C语言科学计数法E格式

记住口诀 e前e后必有数&#xff0c;e前为小数可以省略整数部分或者小数部分&#xff0c;e后必须为整数&#xff0c;中间不能加空格 e前为小数省略小数部分 e前为小数省略整数部分 e后不为整数不合法 e前为小数同时省略整数部分和小数部分不合法 用空格隔开不合法

C语言-求阶乘的两种方法

目录 方法一&#xff1a;递归法求阶乘 方法二&#xff1a;循环法求阶乘 main及结果 方法一&#xff1a;递归法求阶乘 long Factorial_way1(int m){if(m1)return 1;else{return m*Factorial_way1(m-1);}}方法二&#xff1a;循环法求阶乘 long Factorial_way2(int m){long su…

c语言中实现阶乘的方法,c语言实现阶乘的方法

c语言实现阶乘的方法 从键盘输入一个数&#xff0c;求出这个数的阶乘&#xff0c;即 n!。 算法思想 首先要清楚阶乘定义&#xff0c;所谓 n 的阶乘&#xff0c;就是从 1 开始乘以比前一个数大 1 的数&#xff0c;一直乘到 n&#xff0c;用公式表示就是&#xff1a;1234…(n-2)(…