P、NP、NPC

计算机求解问题中有两类基础的问题:判定问题和优化问题。

判定问题是那些回答“是”或“否”的问题;

优化问题通常有一个目标函数,问题的解的值是此目标函数的最优值。

很多优化问题可以归结为一系列的判定问题。

比如我们以团问题为例:

它是一个最优化问题——我们想要求解一个图中最大的团,大小为k;

转换为判定问题可以是:

是否存在一个大小为1的团?

是否存在一个大小为2的团?

……

是否存在一个大小为k的团?

…… 

是否存在一个大小为|V|的团?

因此,判定问题是最基础的一个问题。P和NP都是判定问题的集合。

在讨论计算复杂性类时,“语言”和“问题”两个概念可以互换使用。

P类是多项式时间内可解的判定问题的集合。

图是否连通、判断一个数是否为素数均为P类问题。

NP类是可在多项式时间内用不确定算法求解的判定问题

也可以说是能在多项式时间内可验证的判定问题。

P类问题\subseteqNP类问题

但P是不是NP的真子集,或者说P是否能=NP就不得而知了。

大部分人认为P不等于NP。

约化:

满足两个特征,我们可以说Q1能够约化至Q2:

1.实例对应:Q1的任意一个实例,都能找到Q2中的一个实例与之对应,并且能够在多项式时间内转换为Q2中的实例

2.输出一致:Q1实例的解=对应的Q2实例的解

Q1,Q2为两个问题,若Q1能够约化至Q2,那么只要Q2存在多项式算法,Q1就能在多项式时间求解。

Q2难于Q1。

比如一元二次方程可以约化为二元二次方程x^2+x=6可以约化为x^2+x+xy=6,只需要y=0.

如何证明Q1能够归约至Q2?

        1.Q1实例能够转换为Q2实例

        2.转换可以在多项式时间完成

        3.Q1实例解=>Q2实例解

        4.Q1实例解<=Q2实例解

NPC问题

满足:

1.是NP问题

2.所有NP问题都能约化至它

可以简单理解成NP类问题中最难解决的问题。且它是一类问题。

如何证明一个问题是NPC问题?

我们当然可以通过定义来证明:

        1.首先证明它是个NP问题——可在多项式时间内验证

        2.接着证明任意NP问题都能约化至它。

很显然,第二步并不简单。

因此,我们常常通过下面这种方法来证明:

        1.首先证明它是个NP问题

        2.证明一个已知的NPC问题能够约化至它

这个证明方法显然是正确的:NP类问题\le_p一个已知的NPC问题\le_p该问题,而该问题本身又属于NP问题。

NP-Hard

满足:任意NP类问题,都能约化至它

它是一类比NP问题都难的问题。

相较于NPC问题而言,少了一个限定条件。

因此NPC问题包含于NP-Hard问题。

这样,我们可以给出NPC问题的另一种定义方式:即是NP问题,又是NP-Hard问题的一类判定问题的集合。

P & NP & NPC & NP-Hard

在认为P\not=NP的条件下,四者的关系为

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边懵懵'.ㅅ'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值