P,NP,NPC(NP完备),NP-hard(NP难),时间复杂度

P是在多项式时间可以“解决”的一类问题。
NP(Non-deterministic Polynomial)是给我们一个解,在多项式时间可以“验证”解是否正确。
可以解决,必然可以验证解是否正确。因此P是NP。但NP不一定是P(可以验证正确与否,但是不一定能解决)。因此P=NP尚不确定。

NP完备(NP complete,NPC)有两个条件:第一是NP,第二必须所有NP都可以规约到它。

NP难(NP-hard)满足NPC第二条条件,即所有NP都可以规约到它,但是它本身并不一定是NP。NP-Hard问题要比 NPC问题的范围广。如TSP问题,调度问题等等。(也就是即使有一天发现了NPC问题的多项式算法,但NP-Hard问题仍然无法用多项式算法解决,因为它不是NP问题,对于答案的验证都很困难。)

注解:P一定是NP,NP不一定是P(当P!=NP时,见左图;当P=NP时,见右图)。一部分NP可以规约为NPC,一部分NP是NP-hard。NPC和NP-hard有交集。交集的部分就是NP。

注:

归约(Polynomial-time Reducibility):根据规约的传递性,对NP问题进行一层接一层地规约,最终可以得到一个足够泛化的NP问题,即NPC问题。

简单地说,问题A可以归约为问题B的意思是说:可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。

举例:现在有两个问题,求解一个一元一次方程和求解一个一元二次方程。那么我们说,前者可以归约为后者,因为知道怎样解一个一元二次方程,那么一定能解出一元一次方程,因为一元一次方程是一个二次项系数为零的一元二次方程。

“问题A可归约为问题B”,那么很容易理解问题B比问题A难,要解决问题B的时间复杂度也就应该大于或等于解决问题A的时间复杂度。而且归约有一项重要的性质:传递性。如果问题A可归约为问题B,问题B可归约为问题C,则问题A一定可归约为问题C,这应该很容易理解吧。现在再来说一下归约的标准概念:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可归约为问题B。

从归约的定义中我们看到,一个问题归约为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断归约,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。那么如果把一个NP问题不断地归约上去,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的NP问题的这样一个超级NP问题?答案居然是肯定的。也就是说,存在这样一个NP问题,所有的NP问题都可以归约成它,并且这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC问题,也就是NP-完全问题。

既然所有的NP问题都能归约成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,那么NP也就等于P了。目前NPC问题还没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的算法来解决,那么意思就是如果能够找到一个能用多项式时间复杂度解决的NPC问题就证明了P=NP了。

  1. 即使证明了P=NP,在计算机算力无敌到强大之前,NP难都是很难的。
  2. a规约到b,可以理解为a是b的特例。

时间复杂度

问题规模扩大后,运行程序时间长度增长得有多快。当n足够大时,我们只注重最高次方的那一项,其他各项可以忽略,另外,其常数系数也不重要,所以,n(n-1)/2我们只重视n的平方这一项了,记为O\left ( n^{^{2}} \right ),这就是该算法对该问题的时间复杂度的专业表示。

程序复杂度一般分为两种级别: 

  •  多项式级的复杂度:如O\left ( 1 \right )O\left ( log(n) \right ),O\left ( n^{a} \right )
  •  非多项式的复杂度:如O\left ( a^{n} \right )O\left ( n! \right )等,前者称为指数级,也就是我们经常说的爆炸性增长。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值