NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。证明一个问题是 NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足;至于第一个NPC问题是怎么来的,下文将介绍),这样就可以说它是NPC问题了。
既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P 了。因此,给NPC找一个多项式算法太不可思议了。因此,前文才说,“正是NPC问题的存在,使人们相信P≠NP”。我们可以就此直观地理解,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。
顺便讲一下NP-Hard问题。NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广)。NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。
不要以为NPC问题是一纸空谈。NPC问题是存在的。确实有这么一个非常具体的问题属于NPC问题。下文即将介绍它。
下文即将介绍逻辑电路问题。这是第一个NPC问题。其它的NPC问题都是由这个问题约化而来的。因此,逻辑电路问题是NPC类问题的“鼻祖”。
逻辑电路问题是指的这样一个问题:给定一个逻辑电路,问是否存在一种输入使输出为True。
什么叫做逻辑电路呢?一个逻辑电路由若干个输入,一个输出,若干“逻辑门”和密密麻麻的线组成。看下面一例,不需要解释你马上就明白了。
┌───┐
│ 输入1├─→┐ ┌──┐
└───┘ └─→┤ │
│ or ├→─┐
┌───┐ ┌─→┤ │ │ ┌──┐
│ 输入2├─→┤ └──┘ └─→┤ │
└───┘ │ ┌─→┤AND ├──→输出
└────────┘┌→┤ │
┌───┐ ┌──┐ │ └──┘
│ 输入3├─→┤ NOT├─→────┘
└───┘ └──┘
这是个较简单的逻辑电路,当输入1、输入2、输入3分别为True、True、False或False、True、False时,输出为True。
有输出无论如何都不可能为True的逻辑电路吗?有。下面就是一个简单的例子。
┌───┐
│输入1 ├→─┐ ┌──┐
└───┘ └─→┤ │
│AND ├─→┐
┌─→┤ │ │
│ └──┘ │ ┌──┐
│ └→┤ │
┌───┐ │ │AND ├─→输出
│输入2 ├→─┤ ┌──┐ ┌→┤ │
└───┘ └→┤NOT ├→──┘ └──┘
└──┘
上面这个逻辑电路中,无论输入是什么,输出都是False。我们就说,这个逻辑电路不存在使输出为True的一组输入。
回到上文,给定一个逻辑电路,问是否存在一种输入使输出为True,这即逻辑电路问题。
逻辑电路问题属于NPC问题。这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它(不要以为NP问题有无穷多个将给证明造成不可逾越的困难)。证明过程相当复杂,其大概意思是说任意一个NP问题的输入和输出都可以转换成逻辑电路的输入和输出(想想计算机内部也不过是一些 0和1的运算),因此对于一个NP问题来说,问题转化为了求出满足结果为True的一个输入(即一个可行解)。
有了第一个NPC问题后,一大堆NPC问题就出现了,因为再证明一个新的NPC问题只需要将一个已知的NPC问题约化到它就行了。后来,Hamilton 回路成了NPC问题,TSP问题也成了NPC问题。现在被证明是NPC问题的有很多,任何一个找到了多项式算法的话所有的NP问题都可以完美解决了。因此说,正是因为NPC问题的存在,P=NP变得难以置信。P=NP问题还有许多有趣的东西,有待大家自己进一步的挖掘。攀登这个信息学的巅峰是我们这一代的终极目标。现在我们需要做的,至少是不要把概念弄混淆了。
相关推荐
### P、NP与NPC概念详解 ...P问题代表了那些可以通过高效算法解决的问题,NP问题则涉及到了解的验证,而NPC问题则是NP问题中最困难的一类。理解这些概念有助于我们在算法设计和分析时做出更加合理的决策。
在算法设计中,NP问题可以分为两类:NP完全问题和NP-hard问题。NP完全问题是指可以在多项式时间内解决的NP问题,而NP-hard问题是指无法在多项式时间内解决的NP问题。 判定问题和最优化问题是NP问题的两种基本类型。...
本文研究了基于遗传算法求解NP完全问题(NPC)的方法,其中包括0-1背包问题(0-1K P)和满足性问题(SAT)。首先,我们建立了这两个问题的数学模型,然后分别使用遗传算法(GA)与贪心策略相结合,提出了解决0-1KP...
NP难问题的存在引发了关于P(多项式时间可解问题)和NP是否相等的著名猜想,即P=NP问题。如果P=NP,意味着存在一种有效的方法可以解决所有的NP问题。然而,大多数科学家认为P≠NP,这表明可能存在一些问题,尽管其解...
这些问题之所以被认为是NP完全的,是因为它们满足两个条件:NP完整性和多项式时间可约性。 #### 五、NP完整性证明 论文中还详细介绍了如何证明一个问题是NP完整的步骤: 1. **验证问题属于NP**:给出一个解,能够...
《算法分析与设计》课程中的NP问题简介主要探讨了计算复杂性理论中两类重要的问题——P类问题和NP类问题。这些概念对于理解和评估不同算法的效率至关重要。 首先,P类问题指的是那些可以在确定性图灵机上以多项式...
存在一些问题,如大数分解和图同构问题,它们既不能被证明为P问题也不能被证明为NP-完全问题;以及存在定理表明,如果NP不等于P,那么NP中存在非NP-完全问题。 #### 六、结论 P vs NP问题不仅是理论计算机科学的...
在这一领域中,NP完全问题占据着举足轻重的地位,它是理论计算机科学和算法研究中一个难以逾越的难题。通过深入研究NP完全问题,算法设计者不仅可以更加精准地评估算法的效率,还能掌握在面对复杂问题时可能采取的...
基于遗传算法的Matlab TSP算法求解,针对NP完全问题的近似最优解探索,通过调整参数优化算法性能。,Matlab基于遗传算法的TSP算法。 TSP是典型的NP完全问题。 该算法的局限性:问题规模较小时,得到的一般都是最优解...
第6章到第9章分别给出了几个领域的算法,如序列和集合的算法(排序、序列比较、匹配等)、几何算法(凸包和交集问题等)、代数和数值算法(矩阵乘法、快速傅里叶变换等);第10章涉及归约或约简,也是第11章的序幕,...
求解凸包问题:输入是平面上 n 个点的集合 Q,凸包问题是要输出一个 Q 的 凸包。其中,Q 的凸包是一个凸多边形 P,Q 中的点或者在 P 上或者在 P 中。 实现基于枚举方法的凸包求解算法 实现基于 Graham-Scan 的凸包...
基于遗传算法的Matlab TSP求解:针对大规模问题的近似最优解探索与改进,Matlab遗传算法解决TSP问题的性能挑战与实现优化,Matlab基于遗传算法的TSP算法。 TSP是典型的NP完全问题。 该算法的局限性:问题规模较小时,...
最后,根据被推荐的情况来看,书籍还可能包含了大量实例和案例,这些实例不仅可能涵盖了经典算法的高效实现,也可能包含了解决现实世界问题时的创新算法应用。通过对这些实例的分析,读者可以学习到如何针对不同问题...
NP完全问题在计算机科学中是复杂性理论的一个重要概念,主要涉及算法的效率和问题的解法。在处理这些问题时,我们关注的是能否在合理的时间内找到解决方案。本课件聚焦于理解NP完全问题的原理及其对实际问题的影响。...
1.P(polynominal)问题–多项式问题 存在多项式时间算法的问题。 2.NP(Nondeterministic Polynominal)问题–非确定多项式问题 能在多项式时间内验证得出一个正确解的问题。 关于P是否等于NP是一个存在了很久的...
【算法10_NP完全问题1】主要探讨的是计算机科学中的一个重要理论领域——NP完全问题。NP完全问题涉及的是在多项式时间内难以解决的一类决策和优化问题,这些问题的复杂性在于,虽然验证一个解决方案可以在多项式时间...
这意味着,如果找到了解决一个NPC问题的多项式时间算法,那么所有NP问题都能在多项式时间内解决,即NP=P。然而,至今为止,尚未找到这样的算法,因此通常认为NP≠P。 NPC问题目前没有多项式时间的有效算法,只能...
“新型同步DPWM算法在NPC三电平逆变器相电压优化中的应用:避免两电平跳变,简化计算与实现”,解决NPC三电平逆变器相电压两电平跳变的优化DPWM算法仿真:同步调制策略与简易计算实现,避免NPC三电平逆变器相电压两...
在计算复杂性理论中,旅行商问题是NP类中的典型问题。 借助一种名为“最大删除法”的全新方法,为其构造了一... 由于这个问题也是NP完全的,因此必然证明P = NP是正确的。 它表明了著名的“ P vs NP”开放问题的破解。
这个问题是NP完全问题,没有已知的多项式时间算法能够解决所有实例。然而,可以通过贪心算法和最小路径算法等启发式方法来寻找近似解。 贪心算法是一种简单的解决问题的方法,它在每一步选择局部最优解,期望这些...