P problem、NP problem、NP-complete problem、NP-hard problem是什么

2024-09-03 08:58
文章标签 problem np hard complete

本文主要是介绍P problem、NP problem、NP-complete problem、NP-hard problem是什么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

时间复杂度不是表示一个程序解决问题需要花多少时间,而当程序所处理的问题规模扩大后,程序需要的时间长度对应增长得有多快

一、多项式时间(Polynomial time)

多项式复杂度

容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者。

等,我们把它叫做多项式级复杂度,因为它的规模n出现在底数的位置;

非多项式级的复杂度

另一种像是等,它是非多项式级的复杂度,其复杂度计算机往往不能承受

当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。

二、P问题

1. P problem(Polynomial-time)多项式问题(能解决)

说的是某些问题可以用一组多项式来表示。

P是一类可以通过确定性图灵机(以下简称 图灵机)在多项式时间(Polynomial time)内解决的问题集合。

P类:能够在多项式时间内用算法求解的问题

P问题:有多项式时间算法,算得很快的问题。

比如说,给10个、20个、30个… 元素排序,复杂度是 x^2 ,这里的x^2 就是一个多项。
 

三、NP问题

能够在多项式时间内使用非确定性算法(non-deterministic)被解决的问题。

简单来说就是,必须以非常规方法才能在多项式时间内解决的问题,就叫做NP问题。

NP问题:算起来不确定快不快的问题,但是我们可以快速验证这个问题的解。

1. NP problem(Nondeterministic polynomial-time)不确定性问题(能给出解决方案)

什么是非确定性问题呢?

无法直接计算得到的,只能通过间接的“猜算”来得到结果。但可以告诉你,某个可能的结果是正确的答案还是错误的。

例:一个路径规划问题,有5个地:A,B,C,D,E,一个地去另外一个地距离不一样,花费也不一样,问遍历完这5个地最低花销的方案是怎么样。这个问题你能知道,我花多点时间一个一个枚举可以得出结果的,但是呢,我猜一个,然后那个就是最低花销的,我运气特别好,总能在一定时间内猜到最佳方案,这就是np问题。
 

NP是一类可以通过非确定性图灵机Non-deterministic Turing Machine)在多项式时间(Polynomial time)内解决的决策问题集合。

P是NP的子集,也就是说任何可以被图灵机在多项式时间内解决的问题都可以被非确定性的图灵机解决。

NP类:不确定是否存在多项式时间的求解算法,但可以在多项式时间内验证一个猜测解的正确性的问题。

已有指数时间算法的判定问题,包括P类.

2. NP-complete problem(Non-deterministic Polynomial complete problem)NP完全问题(无法解决,可以给出近似解)

只能通过非确定性算法,在多项式时间内解决的问题,叫做NP完全问题。

一般来说,非常规方法既可以解决P问题,也可以解决NP问题,所以,只有用非常规方法才能解决的问题,才能叫做NP完全问题。

这个问题是由多个np问题抽象而成,他具有多个np问题的基本性质,因此只要这个np-complete问题解决了,与他关联的np-complete问题也就能解决。要成为np-complete问题,第一步,他是np问题;第二步,其他所有np问题都能约化(抽象)成他。

如果一个决策问题 L 是 NP-complete的,那么L具备以下两个性质:

1) L  是 NP(给定一个解决NP-complete的方案(solution),可以很快验证是否可行,但不存在已知高效的方案 。)

2) NP里的任何问题可以在多项式时间内转为 L

NPC类:是NP的一个子集,且其中每一个问题均能由NP中的任何问题在多项式时间内转化成.

如果所有NP问题可在多项式时间内归约成某个NP问题(归约,意思是解决了后者也就相应的解决了前者),则该NP问题称为NP完全问题。

NPC包含了NP中最难的问题。

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

3. NP-Hard problem(Non-deterministic Polynomial hard problem(NPH))NP难问题,非多项式问题(无法解决,可以给出近似解)

如果说np-complete还是在多项式解决一个问题的范畴,np-hard问题会涉及到非多项式的问题。

NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP),即所有的NP问题都能约化到它,但是它不一定是一个NP问题。

而NP-Hard只需要具备NP-complete的第二个性质,因此NP-complete是NP-Hard的子集。

若问题A不属于NP类,已知某一NPC问题可在多项式时间内转化为问题A,则称A为NPH.

NPH:如果所有NP问题可在多项式时间内转化(归约,意思是解决了后者也就相应的解决了前者)成某个问题,则该问题称为NP难问题。

三、这四者的关系如下图(假设P!=NP):

在这里插入图片描述

 

在这里插入图片描述

https://www.cnblogs.com/sancyun/p/4250360.html

https://blog.csdn.net/wxdsdtc831/article/details/7942435

https://blog.csdn.net/sinat_21591675/article/details/86521190

https://blog.csdn.net/liusisi_/article/details/107160947

https://blog.csdn.net/weixin_39278265/article/details/115060817

这篇关于P problem、NP problem、NP-complete problem、NP-hard problem是什么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132566

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

11991 - Easy Problem from Rujia Liu?

题意: 输入一串整型数列,再输入两个数k,v,输出第k个v的序号。不存在则输出0,如第一个样例 8 41 3 2 2 4 3 2 11 3 //第1个3,序号为2,输出22 4 //第2个4,不存在,输出03 2 //第3个2,序号为7,输出74 2 思路: struct num {

HDU 1097 A hard puzzle(规律)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=1097 题意: 求a的b次方的最后一位。 题解: 直接从例子入手, 第一组数据 7 66,结果如下(只要最后一位所以模10) 7 9 3 1 7 9··· 循环节为4,即结果在4个数值内循环出现。 第二组数据 6 800,结果如下 6 6 6 6··· 循环节为1 ···

HDU 1016 Prime Ring Problem (深搜)

OJ题目 : click here ~~ 大概题意:n个数,形成一个环,使得相邻两个数的和为素数。以1开始,按字典序输出序列。 很简单的深搜。 AC_CODE int n;int visit[22];int num[22];int len;bool Is_prime(int x){for(int i = 2;i*i <= x;i++)if(x%i == 0) return

LVM 'Can’t open /dev/sdb1 exclusively. Mounted filesystem?' Problem

在将几块盘做LVM时,遇到一个之前都没遇到过的问题: root@ubuntu:~# pvcreate /dev/sdc1Can't open /dev/sdc1 exclusively. Mounted filesystem? 首先第一反应就是查看这个分区是否已经在使用了,但是没有。 查看硬盘的一些信息: root@ubuntu:~# cat /proc/partitionsmajo

【HDU】3861 The King’s Problem 强连通缩点+有向图最小路径覆盖

传送门:【HDU】3861 The King’s Problem 题目分析:首先强连通缩点,因为形成一个环的王国肯定在一条路径中,这样才能保证拆的少。 然后缩点后就是DAG图了,由于题目要求的是最小路径覆盖,那么二分匹配即可。 代码如下: #include <cstdio>#include <cstring>#include <algorithm>#includ

【ZOJ】3362 Beer Problem 最小费用流

传送门:【ZOJ】3362 Beer Problem 题目分析:这道题本来应该很快就AC的,但是!因为我以前犯的一个致命错误导致我这题一天了到现在才调出来!唉。。失策。。貌似给的模板也有这个错误。。。马上就去改。。但是这个错误竟然还能过掉那么多的题。。害我还要一题一题的改回去。。 本题就是赤裸裸的最小费用流。 新建汇点t(源点即1),将所有的n-1个城市和汇点建边,容量为无穷大,

【HDU】4975 A simple Gaussian elimination problem. 网络流——行列建边

传送门:【HDU】4975 A simple Gaussian elimination problem. 题目分析:这题和某一场的多校的题目出奇的像啊!重要的是我一开始还以为不可能会出一样的题。。结果迟迟没写啊。。。后来觉得实在想不出什么对策了,虽然觉得给的是0~9很特殊,但是利用不起来,果断还是敲了网络流了。。首先建图很简单,源点向行建边,容量为行和,列向汇点建边,容量为列和,然后所有的

Splay树(区间更新)—— POJ 3468 A Simple Problem with Integers

对应POJ 题目:点击打开链接 A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072KTotal Submissions: 72765 Accepted: 22465Case Time Limit: 2000MS Description You have N integers, A1