【计算理论,全面整理】P问题、NP问题、Sharp-P(#P)问题、Sharp-P-complete(#P-complete)问题、NP-complete问题和NP-hard问题

首先P问题、NP问题、NP-complete问题和NP-hard问题属于一条基础线上的几个问题,应该一起讲述(第一部分)。
Sharp-P(#P)问题常常与NP问题放到一起讨论,应该在第二部分讲述。

本博客旨在总结计算机研究中可能遇到的几类问题,以便已经学习过计算理论的同学在回顾知识的时候查阅。如果未学过计算理论,本博客对您的帮助可能不大。如果总结有错误,欢迎指出

一、P问题、NP问题、NP-complete问题和NP-hard问题

P类问题:

在多项式时间内可以解的问题。(可以找到多项式级复杂度的算法来解决的问题)

NP问题:

在多项式时间内可以验证的问题。(在多项式时间内验证得出一个正确解的问题)

P类问题是NP类问题的子集(存在多项式时间解法的问题,总能在多项式时间内验证它)

NP-complete问题:

一个问题是NP-complete问题,需要满足两个条件,当且仅当:

  1. 这个问题是NP问题。
  2. NP问题中任何一个问题都可以在多项式时间内归约成这个问题。(即规约算法的时间复杂度要在多项式时间之内)

NP-hard问题:

满足NPC问题的第二个条件的问题就是NP-hard问题,即NP问题中任何一个问题都可以多项式时间归约成这个问题,这个问题就是NP-hard问题。
即所有的NP问题都能约化到它,但是它不一定是一个NP问题。NP-Hard问题要比NP-complete问题的范围广。

二、Sharp-P(#P)问题与NP问题、Sharp-P-complete问题与NP-complete问题

NP问题的定义没有谈到任何关于求解的问题,只是所说:多项式时间内验证其解是否正确。比如: 我们给一个0-1背包的解,就可以在多项式时间内验证是否满足条件。至于是否能找到满足条件的解,这在NP复杂度里没有规定。

Sharp-P(#P)问题:

Sharp-P (#P)的定义主要指NP问题中对应的满足条件的实例或路径的个数的一类问题。 换言之,拿到一个NP问题后,我们不要问有没有,改问有多少,就会转化成一个Sharp-P (#P)的问题。 比如:0-1背包问有没有这样的方法让一个背包的获益大于某个参数,而负重小于一个参数;这是 NP问题。但是如果我问,有多少种方法让背包中的物品满足这个条件,那就是Sharp-P (#P)问题。
由此可见,Sharp-P (#P)问题比NP更加复杂。

Sharp-P-complete (#P-complete)问题:

NP-complete的问题首先是一个NP问题,其次所有的NP问题都能在多项式时间内与它完成归约。
Sharp-P-complete (#P-complete)的问题首先是一个#P问题, 然后所有的#P问题能在多项式时间内采用一个图灵机与它完成归约。

参考资料:
[1] https://www.cnblogs.com/longdouhzt/archive/2011/11/03/2235141.html

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值