解决NP完全问题只能依靠近似算法,所以下面介绍几种常用算法的设计思想,包括动态规划、贪心算法、回溯法等。
动态规划法是将求解的问题一层一层地分解成一级一级、规模逐步缩小的子问题,直到可以直接求出其解的子问题为止。分解成的所有子问题按层次关系构成一颗子问题树。树根是原问题。原问题的解依赖于子问题树中所有子问题的解。动态规划算法通常用于求一个问题在某种意义下的最优解。设计一个动态规划算法,通常可按以下几个步骤进行:
1. 分析最优解的性质,并刻划其结构特征。
2. 递归的定义最优解。
3. 以自底向上的方式计算出最优解。
4. 根据计算最优解时得到的信息,构造一个最优解。
步骤1~3是动态规划算法的基本步骤。在只需要求出最优解的情形,步骤4可以省去。若需要求出问题的一个最优解,则必须执行步骤4。此时,在步骤3中计算最优解时,通常需记录更多的信息,以便在步骤4中,根据所记录的信息,快速地构造出一个最优解。
(二)贪心算法
当一个问题具有最优子结构性质时,我们会想到用动态规划法去解它,但有时会有更简单、更有效的算法,即贪心算法。顾名思义,贪心算法总是做出在当前看来最好的选择。也就是说贪心算法并不是整体最优上加以考虑,他所作出的选择只是在某种意义上的局部最优的选择。虽然贪心算法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题它能产生整体最优解,如图的算法中单源最短路径问题,最小支撑树问题等。在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好的近似解。
在贪心算法中较为有名的算法是Dijkstra算法。它作为路由算法用来寻求两个节点间的最短路径。Dijkstra算法的思想是:假若G有n个顶点,于是我们总共需要求出n-1条最短路径,求解的方法是:初试,写出V0(始顶点)到各顶点(终顶点)的路径长度,或有路径,则令路径的长度为边上的权值;或无路经,则令为∞。再按长度的递增顺序生成每条最短路径。事实上生成最短路径的过程就是不断地在始顶点V何终顶点W间加入中间点的过程,因为在每生成了一条最短路径后,就有一个该路径的终顶点U,那么那些还未生成最短路径的路径就会由于经过U而比原来的路径短,于是就让它经过U。
(三)回溯法
回溯法有“通用的解题法”之称。用它可以求出问题的所有解或任一解。概括地说,回溯法是一个既带有系统性又带有跳跃性的搜索法。它在包含问题所有解的一颗状态空间树上,按照深度优先的策略,从根出发进行搜索。搜索每到达状态空间树的一个节点,总是先判断以该节点为根的子树是否肯定不包含问题的解。如果肯定不包含,则跳过对该子树的系统搜索,一层一层地向它的祖先节点继续搜索,直到遇到一个还有未被搜索过的儿子的节点,才转向该节点的一个未曾搜索过的儿子节点继续搜索;否则,进入子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根的所有儿子都已被搜索过才结束;而在用来求问题的任一解时,只要搜索到问题的一个解就可结束。
=============关于NP完全问题的定义
NP完全性问题
虽然是计算机系的学生,但自己对于什么是NP问题,什么是NPC问题也并不能很好的解答,就更不用说构造怎样的一种方式来证明一个问题是不是NP问题了。但算法中涉及了很多这样的问题,压力之下,尽我所能弄懂了,把自己的理解记录下来。
P(Polynomial问题)。在计算机里面,对一个问题寻求一种多项式的算法是一个很好的解答。从理论上来说,如果一个问题能够有多翔
实的解法的话,就算是一个很好的算法了。这种问题总可以找到一个DTM(Deterministic Turing Machine) NP(Nondeterministic Polynomial问题)。但是对于很多问题来说,他们找不到一个多项式的解决方法,他们只能对应一个NDTM (Nondeterministic Turing Machine)来解决。可以这样想想:对于下一步的动作,他们也不知道确切的应该怎么办,只能“尝试”很多种方案才能够得出一个答案,这显然是很费时的,这种问题未NP问题。
NPC(NP Complete)问题,可以这么认为,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP里面最难的问题,这种问题就是NPC问题。
一般说来,如果要证明一个问题是NPC问题的话,可以拿已经是NPC问题的一个问题经过多项式时间的变化变成所需要证明的问题,那么索要证明的问题就是一个NPC问题了。
NPC问题是一个问题族,如果里面任意一个问题有了多项式的解,那么所有的问题都可以有多项式的解。
分享到:
相关推荐
NP完全性理论是计算机科学中计算复杂性理论的一部分,它主要研究一类难以解决但可以通过验证答案的正确性在多项式时间内完成的问题。这些问题被称为NP(非确定性多项式时间)问题,而那些即使在非确定性计算模型下也...
NP完全性理论&近似算法
NP完全性理论与近似算法计算机算法设计与分析第PPT教案学习 NP完全性理论是计算机科学中的一個重要概念,它关乎于计算机算法的设计与分析。在这篇教案中,我们将学习NP完全性理论的基础概念,包括RAM、RASP和图灵...
NP完全性理论与近似算法PPT教案学习 NP完全性理论是计算机科学中一个重要的理论概念,它描述了计算机科学中问题的计算复杂性。计算模型是研究 NP 完全性理论的基础,计算模型包括随机存取机(RAM)、随机存取存储...
NP完全性理论与近似算法讲义.ppt
NP完全性理论 - **NP完全问题**:是指一类特殊的NP问题,它们满足两个条件: - 可以在多项式时间内被验证。 - 如果能找到一个多项式时间的算法来解决任意一个NP完全问题,那么所有NP类问题都可以在多项式时间内...
NP完全性理论与近似算法计算机算法设计与分析件PPT教案学习.pptx
《计算机与难解性:NP完全性理论指南》是一本由Michael R. Garey和David S. Johnson共同编写的经典著作,深入探讨了计算复杂性理论中的NP完全性问题。该书是理解NP完全性概念及其在算法设计、优化问题解决以及计算...
本自学材料聚焦于计算复杂性理论的核心概念,包括Turing机和NP完全性理论。 Turing机是由数学家阿兰·图灵提出的抽象计算模型,它模拟了机械过程,能够表示任何可计算的函数。Turing机的基本模型包括一个双向无限长...
在计算机科学领域,算法设计是核心研究之一,而NP完全性理论是算法设计中的一个关键概念,它涉及到复杂性理论和问题求解的难度评估。本章“Chapter 8 The THEORY OF NP_COMPLETENESS”主要探讨了NP类、P类、NP难问题...
NP完全性理论在计算复杂性理论中占有极其重要的地位,原因在于它提供了一种有效的手段来识别哪些问题是真正难以解决的。通过证明一个问题为NP完全,实际上是在说该问题与所有其他已知的NP问题都同等困难。因此,如果...
算法设计与分析:NP完全问题 NP完全问题是计算机科学中一个非常重要的概念,它是指在多项式时间内无法解决的问题,这类问题的...NP完全问题是计算机科学中一个非常重要的概念,它有广泛的应用前景和深远的理论价值。
NP完全问题在计算机科学中是复杂性理论的一个重要概念,主要涉及算法的效率和问题的解法。在处理这些问题时,我们关注的是能否在合理的时间内找到解决方案。本课件聚焦于理解NP完全问题的原理及其对实际问题的影响。...
在计算机科学领域,NP完全性是计算复杂性理论中的一个重要概念,它涉及到能否在多项式时间内解决一类困难的问题。NP完全性证明是确定一个问题是NP完全的关键步骤,这对于理解和判断问题的可解性至关重要。本篇文章将...
### NP完全问题证明 #### 一、NP完全问题概述 NP完全问题,作为现代计算机...综上所述,NP完全问题不仅是理论计算机科学研究的重点,也是连接理论与实践的桥梁,对于推动计算机科学技术的发展具有不可估量的价值。
书中的后半部分更多地涉及NP完全性理论。与传统依赖图灵机理论的阐述不同,本书在N P-完全性的概念定义上采用了更为直观的"合格"概念,使得理解更为容易。书中还采用了新的归结方法来清晰地展示NP-完备性问题的证明...
10. **NP完全性理论的应用** - NP完全性理论不仅在理论上具有重要意义,还在实际问题中有很多应用,如旅行商问题、图着色问题等。了解这些问题的NP完全性有助于我们判断是否有有效算法找到精确解。 以上这些内容...
《图论(第2版)》系统阐述图论与算法图论的基本概念、理论、算法及其应用,建立图的重要矩阵与线性空间,论述计算复杂度理论中的NP完全性理论和著名的一些NPC问题等。《图论(第2版)》概念明确,立论严谨,语言...
NP完全性理论研究的是那些在多项式时间内难以验证但易于检查的复杂问题。这类问题的解通常是无法在多项式时间内找到的。近似算法则是在无法找到精确解时,寻找一个接近最优解的方案,如Karp近似算法。 以上这些...