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问题还有许多有趣的东西,有待大家自己进一步的挖掘。攀登这个信息学的巅峰是我们这一代的终极目标。现在我们需要做的,至少是不要把概念弄混淆了。
相关推荐
在算法设计中,NP问题可以分为两类:NP完全问题和NP-hard问题。NP完全问题是指可以在多项式时间内解决的NP问题,而NP-hard问题是指无法在多项式时间内解决的NP问题。 判定问题和最优化问题是NP问题的两种基本类型。...
### P、NP与NPC概念详解 ...P问题代表了那些可以通过高效算法解决的问题,NP问题则涉及到了解的验证,而NPC问题则是NP问题中最困难的一类。理解这些概念有助于我们在算法设计和分析时做出更加合理的决策。
本文研究了基于遗传算法求解NP完全问题(NPC)的方法,其中包括0-1背包问题(0-1K P)和满足性问题(SAT)。首先,我们建立了这两个问题的数学模型,然后分别使用遗传算法(GA)与贪心策略相结合,提出了解决0-1KP...
NP难问题的存在引发了关于P(多项式时间可解问题)和NP是否相等的著名猜想,即P=NP问题。如果P=NP,意味着存在一种有效的方法可以解决所有的NP问题。然而,大多数科学家认为P≠NP,这表明可能存在一些问题,尽管其解...
NP 问题可以分为两类:P 问题和 NPC 问题。P 问题是指可以在多项式时间内解决的问题,如 O(1)、O(log(n))、O(n^a) 等。NPC 问题是指 NP 问题中可能性最小的或许可以被计算机在多项式时间内解决或验证的问题。 NPC ...
《算法分析与设计》课程中的NP问题简介主要探讨了计算复杂性理论中两类重要的问题——P类问题和NP类问题。这些概念对于理解和评估不同算法的效率至关重要。 首先,P类问题指的是那些可以在确定性图灵机上以多项式...
在这个理论中,NP、P和NPC(Non-deterministic Polynomial-time Complete)是三个关键的概念,它们描述了不同类型的问题及其解决难度。接下来,我们将深入探讨这三个概念以及它们之间的关系。 首先,我们从P问题...
例如,如果一个近似算法保证每次找到的解至少是问题最优解的80%,那么它的近似比就是1/0.8=1.25。 3. **NP完全问题介绍**:书中会详细介绍一些典型的NP完全问题,如旅行商问题、顶点覆盖问题、独立集问题等,这些...
求解凸包问题:输入是平面上 n 个点的集合 Q,凸包问题是要输出一个 Q 的 凸包。其中,Q 的凸包是一个凸多边形 P,Q 中的点或者在 P 上或者在 P 中。 实现基于枚举方法的凸包求解算法 实现基于 Graham-Scan 的凸包...
4. **图论算法**:包括最短路径算法(如Dijkstra算法和Floyd-Warshall算法)、拓扑排序和最小生成树算法(如Prim和Kruskal算法),这些都是解决复杂网络问题的关键工具。 5. **动态规划**:通过构建状态转移方程,...
NP完全问题在计算机科学中是复杂性理论的一个重要概念,主要涉及算法的效率和问题的解法。在处理这些问题时,我们关注的是能否在合理的时间内找到解决方案。本课件聚焦于理解NP完全问题的原理及其对实际问题的影响。...
【算法10_NP完全问题1】主要探讨的是计算机科学中的一个重要理论领域——NP完全问题。NP完全问题涉及的是在多项式时间内难以解决的一类决策和优化问题,这些问题的复杂性在于,虽然验证一个解决方案可以在多项式时间...
3. 在线算法:这种算法在处理问题时,对问题的输入不完全了解,需要在收到输入的过程中作出决策。在线算法常用于资源分配等问题,例如,在线拍卖或在线调度问题。 4. 顶点覆盖问题(Vertex Cover Problem):这是一...
这意味着,如果找到了解决一个NPC问题的多项式时间算法,那么所有NP问题都能在多项式时间内解决,即NP=P。然而,至今为止,尚未找到这样的算法,因此通常认为NP≠P。 NPC问题目前没有多项式时间的有效算法,只能...
其简洁性和高效性使得它成为学习和理解算法的理想工具。 1. **基础算法概念**: - 算法是一组解决问题或执行任务的明确指令,它们可以是数学或逻辑计算,也可以是计算机程序中的操作。 - 在C语言中,我们通常使用...
标题中的“各种优化算法解决TSP问题”是指利用多种高级计算方法来求解著名的旅行商问题(Traveling Salesman Problem,简称TSP)。TSP是一个经典的组合优化问题,目标是找到一个最短的路径,使得旅行商能够访问给定...
这本书的核心目标是教会读者如何创造性地思考和构建算法,从而解决实际问题。算法是计算机科学的基石,理解和掌握算法对于任何IT从业者来说都至关重要。下面将详细阐述这本书中涉及的关键知识点。 1. **算法基础**...
网络优化问题的近似算法:网络优化问题在计算机科学和运筹学中是一个关键的研究领域,特别是在设计有效的算法以解决大规模网络中的问题时。近似算法作为解决优化问题的一种有效手段,能够在多项式时间内给出问题的...
这个主题涵盖了一系列高级概念,如计算复杂性理论、NP完全问题、背包问题和最短路径问题。 首先,计算复杂性理论是研究算法效率的数学框架,主要关注计算问题的资源需求,如时间复杂性和空间复杂性。通过分析这些...
1. **NPC问题定义**:NPC问题是指那些既是NP类问题(非确定性多项式时间可解的问题),又是NP类问题的难解代表。证明一个问题是NPC意味着如果这个问题能在多项式时间内解决,那么所有NP问题都能在多项式时间内解决。...