算法时间复杂度及P、NP、NP-Complete、NP-Hard问题

本文探讨了算法的时间复杂度,包括多项式时间复杂度和指数型时间复杂度的区别,以及P、NP、NP-Complete和NP-Hard问题的概念。详细解释了这些问题在计算机科学中的地位和相互关系,特别提到了旅行商问题(TSP)作为NP-Hard问题的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法的时间复杂度

如果某个算法的复杂度可以表示为 O ( n k ) O(n^k) O(nk),即问题规模n出现在底数的位置,这种复杂度称为多项式时间复杂度

如果某个算法的复杂度表示为 O ( k n ) O(k^n) O(kn) O ( n ! ) O(n!) O(n!),这种复杂度称为指数型时间复杂度

相同问题规模下(同时这个问题规模不是太小),指数型时间复杂度远远大于多项式时间复杂度。

当我们在解决一个问题时,我们选择的算法通常都需要是多项式时间复杂度的,指数型时间复杂度的算法是计算机所不能承受的(除非问题规模很小)。

P、NP、NP-Complete、NP-Hard问题

如果一个问题可以找到一个只有多项式复杂度的算法(这个算法可以在多项式时间内求得解),那这个问题就属于P(Polynomial)问题(即多项式问题)

无法找到任何多项式复杂度算法的可解问题,则称为指数型(Exponential)问题

没有任何可解算法的问题,则称为不可解问题

此外,我们关注多项式时间内是否可以验证一个解,如果可以,这个问题就被称为NP(Non-Deterministic Polynomial )问题(即非决定性多项式问题)

由此可知,所有的P问题都是NP问题

之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。

在NP问题中,有这么一类问题,所有的NP问题在多项式时间内都可以归约成这类问题【注:“问题A可归约为问题B”有一个重要的直观意义:B的时间复杂度高于或者等于A的时间复杂度。】,这类问题被称为NPC(NP-Complete)问题【所以说,NPC问题的时间复杂度大于等于NP问题的时间复杂度,NP问题不比NPC问题难。 】。

如果能够证明任何一个NPC问题可以在多项式时间内求得解,就可以证明**P=NP?**这个困扰信息学的重要问题了。

而无论是不是NP问题,又有这么一类问题,所有的NP问题在多项式时间内都可以归约成这类问题,这类问题就被称为NPH(NP-Hard)问题

NPC和NPH两者的区别是: 验证一个问题A是否为NP-Hard无须判断A是否属于NP,但是NPC问题必须首先是NP问题. 根据定义可知NPC ∈ NPH。

由于P=NP?并没有得到证明,因此,目前可以对问题作出这样的分类:

典型的NP-Hard问题

旅行商问题,即TSP问题(Traveling Salesman Problem),又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 若有 20 个城,则排法就有 19 ! 19! 19!种。在排列组合里 n ! n! n! 写起来轻松,但 19 ! = 1.21 ∗ 1 0 17 19! = 1.21*10^{17} 19!=1.211017是一个大得不得了的数字。若每秒钟排一次,要排 3.84 ∗ 1 0 9 3.84∗10^{9} 3.84109 年。旅行商问题可以归约到NPC问题。

参考文献

算法的时间复杂度和空间复杂度-总结
什么是P问题、NP问题和NPC问题
P/NP/NPC/NP-hard
NP-Hard问题浅谈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值