【简述】【图】P类问题、NP类问题、NP完全问题和NP难问题

1. P类问题(Polynomial Problem)

        P类问题是指一类能够用确定性算法在多项式时间内求解的判定问题。其实,在非正式的定义中,我们可以把那些在多项式时间内求解的问题当作P类问题。

2. NP类问题(Non-deterministic Polynomial Problem)

        NP类问题不是非P类问题,他把问题分为猜测和验证。NP问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可在多项式的时间里猜出一个解的问题。在某个题中,找一个解很困难 ,但验证一个解很容易。

        NP类问题是指一类可以用不确定性多项式算法求解的判定问题。例如,旅行商问题(TSP,Traveling Salesman Problem)的判定版本就是一个NP类问题。我们虽然还不能找到一个多项式的确定性算法求解最小的周游路线,但是可以在一个多项式 时间内对任意生成的一条“路线”判定是否是合法(经过每个城市一 次且仅仅一次)。比较P类问题和NP类问题的定义,我们很容易得到 一个结论:P\subseteqNP。

3. NP完全问题(NP Complete Problem)

        我们称一个判定问题D是NP完全问题,条件是:

(1)D属于NP类;

(2)NP中的任何问题都能够在多项式时间内转化为D。

4. NP难问题(NP-hard Problem )

        另外,一个满足条件(2)但不满足条件(1)的问题被称为NP难问题。也就是说,NP难问题不一定是NP类问题, 正式地说,一个NP难问题至少跟NP完全问题一样难,也许更难!

        例如在某些任意大的棋盘游戏走出必胜的下法, 就是一个NP难的问题,这个问题甚至比那些NP完全问题还难。

  • 13
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
装载问题(Knapsack Problem)是指有一个容量为C的背包和n个物品,第i个物品的重量为wi,价值为vi,现在要从这n个物品中选取若干个放入背包中,使得所选物品的重量不超过C,且所选物品的价值之和最大。这是一个经典的NP完全问题,可以使用分支界限算法求解。 分支界限算法的步骤如下: 1. 将背包问题转化为线性规划问题,即将背包容量和物品重量、价值分别表示为x0、x1、x2、...、xn的线性组合形式,目标函数为价值最大化。 2. 初始化最大价值为0,将根节点入队。 3. 从队列头部取出一个节点,计算该节点的上界价值。如果该节点的上界价值小于等于当前最大价值,则剪枝,否则继续执行。 4. 如果该节点代表的状态是一个可行解,则更新最大价值,并记录该可行解的物品选择情况。 5. 否则,对该节点进行分支,生成两个子节点,分别表示选择当前物品和不选择当前物品两种情况,并计算其上界价值。将两个子节点加入队列中。 6. 重复步骤3~5,直到队列为空。 分支界限算法的时间复杂度取决于队列的长度,即搜索树的大小。由于每个节点最多只有两个子节点,因此搜索树的大小为O(2^n),时间复杂度为指数级别,无法解决大规模问题。因此,分支界限算法一般用于小规模问题的求解,或者用于求解特殊结构的问题,如0/1背包问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值