P问题、NP问题、NPC和NPhard问题

前言

P问题是指的存在多项式时间复杂度算法去求解的问题,那么什么是多项式时间复杂度呢?

一个多项式:在这里插入图片描述

我们知道冒泡排序的时间复杂度是O(n^2),这就是一个多项式时间复杂度的算法。

一、P类问题

P问题是指的存在多项式时间复杂度算法去求解的问题,当然这都是对于计算机来说的。通常对于普通的问题,我们力求时间复杂度能控制在O(n^2)这样类似的多项式时间复杂度内,若是一个问题求解的时间复杂度比多项式时间复杂度还要大,那么求解起来非常困难,例如时间复杂度是O(e ^ n),求解起来十分困难。

二、NP问题

NP问题是比较复杂的问题,我们不知道这个问题能否在多项式时间内求得最优解,但是可以在多项式时间内验证一个可能解的正确性。没错,所以求解NP问题的算法重要性是如何根据当前解以最快速度得到最优解。

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

既然是不知道,那么到底有没有呢?如果有那么NP问题就可以在多项式时间复杂度内解决,如果没有,那么。。。
这就是 NP=?P

即,是否所有能在多项式时间内验证得出正确解的问题,都是具有多项式时间算法的问题呢?

三、NPC问题

对于NP问题有的是有的存在,有的不存在多项式时间复杂度。
那么怎么证明的呢?

对于同一类的所有的NP类问题,若他们都可以在多项式时间内约化成最难的一个NP类问题,当我们针对这个时间复杂度最高的超级NP问题要是能找到他的多项式时间算法的话,那就等于变向的证明了其下的所有问题都是存在多项式算法的。

定义:
1、得是一个NP问题;2、所有的NP问题都可以约化到它。
即他是某类NP问题中最复杂的问题。

四、NP hard问题

NP-Hard问题满足NPC问题定义的第二条但不一定要满足第一条,即所有的NP问题都能约化到它,但是他不一定是一个NP问题。

NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP.
其实类似于TSP,哈密尔顿哈密尔顿回路就是NP-Hard问题。我们已经有了遗传算法、模拟退火等来优化这种问题的解,但是我们无法知道得到的解就是最优的。

证明该问题是NP-hard问题:
我们要证明一个问题是NP-hard的时候,我们通常要做的是找到一个已被证明了的NPC问题,并把这个NPC问题归约到该问题上去(即NPC<=NP-hard)
下图就是四种的关系:

在这里插入图片描述

参考:
https://blog.csdn.net/qq_21768483/article/details/80430590

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值