排序 np_P问题、NP问题、NP完全问题和NP难问题理解

f9f25d0d4bae89e1e98de34094fe6a3d.png

P 问题

P类问题(P:polynominal,多项式):存在多项式时间算法的问题。以排序为例,在排序这个大问题里,是可以找到一种时间复杂度为多项式o(n^2),o(nlogn)的算法(如冒泡排序法,快速排序)来求解排序问题的,所以我们说排序问题是一个有多项式时间算法的问题。所以我们称,P类问题就是存在多项式时间算法的问题。

时间复杂度:o(1)<o(n)<o(nlgn)<o(n^2)<o(n^a)<o(e^n)<o(n!)

多项式级别:o(1)<o(n)<o(nlgn)<o(n^2)<o(n^a)

非多项式级别:o(e^n)<o(n!),计算机难以承受

NP 问题

NP类问题(NP:Nondeterministic polynominal,非确定性多项式):能在多项式时间内验证得出一个正确解的问题。P类问题是NP问题的子集,因为存在多项式时间解法的问题,总能在多项式时间内验证他。

著名的NP类问题举例:

旅行家推销问题:即有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的环路,这个环路路径小于a。我们知道这个问题如果单纯的用枚举法来列举的话会有(n-1)! 种,已经不是多项式时间的算法了,(注:阶乘算法比多项式的复杂)。那怎么办呢?我们可以用猜的,假设我人品好,猜几次就猜中了一条小于长度a的路径,我画画,好的,我得到了一条路径小于a的环路,问题解决了,皆大欢喜。可是,我不可能每次都猜的那么准,也许我要猜完所有种呢?所以我们说,这是一个NP类问题。也就是,我们能在多项式的时间内验证并得出问题的正确解,可是我们却不知道该问题是否存在一个多项式时间的算法,每次都能解决他(注意,这里是不知道,不是不存在)。

NPC 问题

NPC类问题(Nondeterminism Polynomial complete):存在这样一个NP问题,所有的`NP`问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。其定义要满足2个条件:

  • 它得是一个NP问题;
  • 所有的NP问题都可以约化到它。

要证明NPC问题的思路就是: 先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它。

NPH 问题

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

NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。

7b9b078b1ef7559088c7f0f23b72a96e.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值