回溯法与分支限界法的分析与比较
回溯法和分支界限法的适用条件

回溯法和分支界限法的适用条件回溯法和分支界限法是两种常见的求解问题的算法。
它们在不同的场景下有着不同的适用条件。
本文将从理论和实践两个方面探讨回溯法和分支界限法的适用条件。
一、理论分析1. 回溯法的适用条件回溯法是一种通过不断回溯来寻找问题解的算法。
它的适用条件主要有以下几点:(1)问题的解是由若干个决策组成的,每个决策都有多个选项。
(2)问题的解可以表示为一棵树形结构,每个节点表示一个决策,每个节点的子节点表示该决策的选项。
(3)问题的解可以通过深度优先搜索的方式遍历整个决策树。
(4)问题的解可以通过剪枝来减少搜索的时间和空间复杂度。
回溯法的适用条件比较宽泛,适用于很多求解问题的场景,如八皇后问题、0/1背包问题、图的着色问题等。
2. 分支界限法的适用条件分支界限法是一种通过不断分支来寻找问题解的算法。
它的适用条件主要有以下几点:(1)问题的解可以表示为一棵树形结构,每个节点表示一个决策,每个节点的子节点表示该决策的选项。
(2)问题的解可以通过广度优先搜索的方式遍历整个决策树。
(3)问题的解可以通过剪枝来减少搜索的时间和空间复杂度。
(4)问题的解可以通过界限函数来判断当前节点的子节点是否需要继续搜索。
分支界限法的适用条件比较严格,适用于一些求解复杂问题的场景,如旅行商问题、装箱问题、车辆路径问题等。
二、实践分析1. 回溯法的实践应用回溯法在实践中有着广泛的应用。
以八皇后问题为例,该问题要求在一个8x8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击。
该问题可以通过回溯法来求解。
具体步骤如下:(1)从第一行开始,依次尝试在每个位置放置皇后。
(2)如果当前位置可以放置皇后,则继续向下一行搜索。
(3)如果当前位置不能放置皇后,则回溯到上一行,重新选择位置。
(4)如果所有行都已经放置了皇后,则找到了一个解。
该算法的时间复杂度为O(n^n),空间复杂度为O(n),其中n为棋盘的大小。
2. 分支界限法的实践应用分支界限法在实践中也有着广泛的应用。
回溯法和分支限界法解决背包题

0-1背包问题计科1班朱润华 32方法1:回溯法一、回溯法描述:用回溯法解问题时,应明确定义问题的解空间。
问题的解空间至少包含问题的一个(最优)解。
对于0-1背包问题,解空间由长度为n的0-1向量组成。
该解空间包含对变量的所有0-1赋值。
例如n=3时,解空间为:{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1),(1,1,0),(1,1,1)}然后可将解空间组织成树或图的形式,0-1背包则可用完全二叉树表示其解空间给定n种物品和一背包。
物品i的重量是wi,其价值为vi,背包的容量为C。
问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大形式化描述:给定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn,), xi∈{0,1}, ∑ wi xi≤c,且∑ vi xi达最大.即一个特殊的整数规划问题。
二、回溯法步骤思想描述:0-1背包问题是子集选取问题。
0-1 背包问题的解空间可以用子集树表示。
在搜索解空间树时,只要其左儿子节点是一个可行节点,搜索就进入左子树。
当右子树中有可能含有最优解时,才进入右子树搜索。
否则,将右子树剪去。
设r是当前剩余物品价值总和,cp是当前价值;bestp是当前最优价值。
当cp+r<=bestp时,可剪去右子树。
计算右子树上界的更好的方法是将剩余物品依次按其单位价值排序,然后依次装入物品,直至装不下时,再装入物品一部分而装满背包。
例如:对于0-1背包问题的一个实例,n=4,c=7,p=[9,10,7,4],w=[3,5,2,1]。
这4个物品的单位重量价值分别为[3,2,3,5,4]。
以物品单位重量价值的递减序装入物品。
先装入物品4,然后装入物品3和1.装入这3个物品后,剩余的背包容量为1,只能装的物品2。
由此得一个解为[1,,1,1],其相应价值为22。
尽管这不是一个可行解,但可以证明其价值是最优值的上界。
回溯法和限界剪枝法的异同

回溯法和限界剪枝法的异同回溯法和限界剪枝法,这俩小家伙听起来像是数学界的两个高手,实际上,它们都是解决问题的好帮手。
咱们先说说回溯法,听名字就像是往回走,但其实它是个试错的过程。
想象一下,你在一个迷宫里,走着走着发现前面不对劲,哦,得退回来重新找路。
这种方法特别适合那些要穷举所有可能的情况,像是拼图、八皇后问题,甚至是找寻某个特定组合。
每一步都要考虑清楚,走错了就得掉头。
人们常说“无功不受禄”,回溯法可不怕吃亏,它每次回头都是在给自己一次机会。
遇到困难别灰心,反复尝试,努力不懈,这就像是在唱“只要功夫深,铁杵磨成针”嘛。
再说限界剪枝法,这个名字听起来有点复杂,但其实它的核心思想是聪明地减少不必要的探索。
你可以把它想象成一个聪明的商人,知道哪些路不值得走,直接跳过那些“没戏”的选项。
这样做的好处就是节省时间,提高效率,谁都想少走弯路,对吧?在解决一些最优化问题时,限界剪枝法就像是个精打细算的朋友,能帮助我们找到最优解。
举个例子,假设你在选购水果,你不可能一一尝试所有的苹果,聪明的做法是先看看外表、闻闻香气,直接挑选出几个最好的,其他的统统pass掉。
限界剪枝法就像是为你的人生选择提个醒,“别浪费时间,挑个好的就行!”它们俩其实有不少相似之处,都是为了找到解决方案,都是经过不断尝试,但又有着各自的特色。
回溯法走的是一条“试试看”的道路,而限界剪枝法则是“看情况再决定”。
回溯法像是在玩一个棋盘游戏,棋子每一步都得小心翼翼;而限界剪枝法就像是一个经验丰富的老玩家,知道什么样的局面不值得浪费时间,直接过滤掉那些没有希望的步骤。
这俩兄弟各有各的风格,结合起来用,简直是事半功倍,真是相辅相成。
不过,说到这里,咱们得提醒一下,回溯法虽然灵活,但在面对大规模问题时,它的效率就可能变得像乌龟一样慢。
而限界剪枝法虽然聪明,但它也得依赖一个好的界限,不然就可能会把一些潜在的好解给剪掉,真是难以平衡的艺术。
就像在生活中,你需要做选择的时候,总得考虑到长远利益,不能光看眼前的风光。
算法的设计(第7章回溯和分支限界)

未来发展趋势及挑战
算法优化与创新
随着问题规模的增大和复杂性的提高,对算法性能的要求也越来越高。未来,回溯和分支 限界算法的优化和创新将成为研究的重要方向,包括设计更高效的剪枝策略、改进限界函 数等。
人工智能与算法设计的融合
人工智能技术的快速发展为算法设计提供了新的思路和方法。未来,将人工智能技术应用 于回溯和分支限界算法的设计中,实现自动化或半自动化的算法设计和优化,将是一个具 有挑战性的研究方向。
旅行商问题(TSP)。该问题是一个典 型的分支限界法应用案例,通过估计 旅行路线的最小和最大长度,可以缩 小搜索范围,并提高求解效率。回溯 法也可以求解TSP问题,但通常需要结 合其他优化技术来提高效率。
案例三
图的着色问题。该问题既可以通过回 溯法求解,也可以通过分支限界法求 解。回溯法通过搜索所有可能的着色 方案,并判断每种方案是否满足条件 ;而分支限界法则可以通过估计着色 的最小和最大颜色数来缩小搜索范围 。在实际应用中,可以根据问题的具 体特点和要求选择合适的算法。
利用问题领域的启发式信息来指导搜索过程,通过评估当前状态的优劣来决定是否继续 搜索该分支。启发式剪枝能够显著减少搜索空间,提高算法效率。
04 分支限界法详解
队列式分支限界法原理及实现
• 原理:队列式分支限界法是一种广度优先搜索策略,通过维 护一个队列来存储待处理的节点。在搜索过程中,不断从队 列中取出节点进行处理,并将产生的子节点加入队列,直到 找到目标节点或队列为空。
特点
回溯算法通常采用深度优先搜索策略 ,在搜索过程中,当发现当前路径无 法满足问题要求时,会及时“回溯” 到上一步,尝试其他可能的路径。
适用场景及问题类型
适用场景
回溯算法适用于求解组合优化问题, 如排列组合、图的着色、旅行商问题 等。
算法设计中的回溯与分支限界

算法设计中的回溯与分支限界在算法设计中,回溯(backtracking)和分支限界(branch and bound)是两个重要的技术手段。
它们在解决一些求解最优化问题或搜索问题时具有广泛的应用。
本文将介绍回溯和分支限界的基本概念、原理和应用,并探讨它们在算法设计中的意义和作用。
一、回溯算法回溯算法是一种穷举搜索算法,通过遍历问题的解空间来求解问题。
其基本思想是从初始解开始,逐步地扩展解的空间,直到找到满足问题要求的解。
如果扩展到某一步时发现无法继续扩展,那么就回溯到上一步,并继续向其他可能的解空间进行扩展。
回溯算法通常使用递归的方式实现。
回溯算法的应用非常广泛,适用于求解组合优化、满足约束条件的问题,例如八皇后问题、0-1背包问题、图的哈密顿路径等。
回溯算法虽然简单直观,但由于其穷举搜索的性质,时间复杂度较高,因此在面对问题规模较大时不一定是最优的选择。
二、分支限界算法分支限界算法是一种在解空间中搜索最优解的算法。
它通过在搜索过程中设定上、下界限制来避免对无效解的搜索,从而提高搜索效率。
分支限界算法通常使用优先队列(priority queue)来存储待扩展的节点,并按照一定的优先级进行扩展,每次选择优先级最高的节点进行扩展。
在扩展过程中,通过修剪(pruning)无效解的策略,可以进一步提高搜索效率。
分支限界算法的应用范围广泛,适用于求解组合优化问题、图论问题等。
通过合理的界限设定和剪枝策略,分支限界算法能够大幅减少搜索空间,提高求解效率。
但需要注意的是,分支限界算法并不能保证一定能够找到最优解,只能保证找到满足要求的解。
三、回溯与分支限界的比较回溯算法和分支限界算法都是基于搜索的算法,二者都可以求解组合优化问题和搜索问题。
回溯算法在搜索过程中对解空间进行穷举,而分支限界算法通过设定界限和剪枝策略来减少搜索空间。
因此,相较于回溯算法,分支限界算法具有更高的搜索效率。
然而,回溯算法也有其优点。
回溯法和分支限界法

对于许多问题而言,在搜索试探时选取x[i]的值顺序是任意的。 在其他条件相当的前提下,让可取值最少的x[i]优先。从图中 关于同一问题的2棵不同解空间树,可以体会到这种策略的潜 力。
(a)
重排原理
(b) 图(a)中,从第1层剪去1棵子树,则从所有应当考虑的3元组中 一次消去12个3元组。对于图(b),虽然同样从第1层剪去1棵子 树,却只从应当考虑的3元组中消去8个3元组。前者的效果明 15 显比后者好。
13
回溯法效率分析
通过前面具体实例的讨论容易看出,回溯算法的 效率在很大程度上依赖于以下因素: (1)产生x[k]的时间; (2)满足显约束的x[k]值的个数; (3)计算约束函数constraint的时间; (4)计算上界函数bound的时间; (5)满足约束函数和上界函数约束的所有x[k]的个 数。 好的约束函数能显著地减少所生成的结点数。但 这样的约束函数往往计算量较大。因此,在选 择约束函数时通常存在生成结点数与约束函数 计算量之间的折衷。
•解空间:子集树 n wi xi c1 •可行性约束函数: i 1 •上界函数:
private static double bound(int i) {// 计算上界 double cleft = c - cw; // 剩余容量 double bound = cp; // 以物品单位重量价值递减序装入物品 while (i <= n && w[i] <= cleft) { cleft -= w[i]; bound += p[i]; i++; } // 装满背包 if (i <= n) bound += p[i] / w[i] * cleft; return bound; }
算法分析及设计分支限界法
a 21
b 32
c 43
• 将结点8作为扩展结点0-1-5-8-12-10
路径长度小于0-2-6-9-10,选择路径02-6-9-10
u
ed
g
f
h
作为最短路径。 • 从s到T的最短路为0-2-6-9-10,长度
Hale Waihona Puke 524 5 9 4 5 6 12 5 6 6
为8。
q
km
l
5 6 78 6 9
o
r
8 10 p
2021/6/18
2
6.1
分支限界法的基本思想
2. 分支限界法基本思想 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩 展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导 致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
12 10 8 8 8 10
2021/6/18
21
第6章 分支限界法
本章主要知识点:
6.1
分支限界法的基本思想
6.2
单源最短路径问题
6.3 0-1背包问题
2021/6/18
22
6.2
单源最短路径问题
1. 问题描述
给定带权有向图G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点, 称为源。现在要计算从源到所有其它各顶点的最短路长度。这里路的长度是指路上各边权 之和。这个问题通常称为单源最短路径 问题。
2021/6/18
4
6.1
分支限界法的基本思想
• 例如:考虑n=3时0-1背包问题,其中w=[16,15,15], p=[45,25,25],c=30。
回溯法与分支限界法
回溯法与分支限界法
回溯法和分支限界法是两种常见的搜索算法,它们被广泛应用于解决优化问题、约束满足问题以及决策问题等。
1. 回溯法:
回溯法是一种基于试错的搜索算法。
它通过搜索解空间树来寻找问题的解。
在搜索过程中,回溯法会尝试不同的分支,也就是不同的可能解,直到找到解或者确定无解。
如果一条路径上无法得到解,回溯法就会回溯到上一步,尝试其他的分支。
回溯法的优点是它可以找到问题的所有解,而且对于一些问题,它能够找到最优解。
然而,它的缺点是如果问题的解空间树太大,那么回溯法可能会需要大量的时间和空间。
2. 分支限界法:
分支限界法是一种有约束的深度优先搜索算法。
它也是一种用于求解优化问题的算法。
在分支限界法中,搜索过程被分为两个阶段:扩展阶段和限界阶段。
在扩展阶段,算法会生成所有可能的候选解,并将它们加入到候选解集中。
在限界阶段,算法会根据一些启发式信息对候选解进行排序,并只考虑排在最前面的候选解。
这样可以大大减少搜索的时间和空间复杂度。
分支限界法的优点是它可以找到问题的最优解,而且它的时间复杂度是可以控制的。
然而,它的缺点是如果问题的解空间树太大,那么它可能需要大量的内存来存储候选解。
总的来说,回溯法和分支限界法都是非常重要的搜索算法,它们在不同的场景下都有各自的优势和适用性。
回溯法和分支限界法解决0-1背包题要点教学内容
回溯法和分支限界法解决0-1背包题要点0-1背包问题计科1班朱润华 2012040732方法1:回溯法一、回溯法描述:用回溯法解问题时,应明确定义问题的解空间。
问题的解空间至少包含问题的一个(最优)解。
对于0-1背包问题,解空间由长度为n的0-1向量组成。
该解空间包含对变量的所有0-1赋值。
例如n=3时,解空间为:{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1),(1,1,0),(1,1,1)}然后可将解空间组织成树或图的形式,0-1背包则可用完全二叉树表示其解空间给定n种物品和一背包。
物品i的重量是wi,其价值为vi,背包的容量为C。
问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大?形式化描述:给定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn,), xi∈{0,1}, ? ∑ wi xi≤c,且∑ vi xi达最大.即一个特殊的整数规划问题。
二、回溯法步骤思想描述:0-1背包问题是子集选取问题。
0-1 背包问题的解空间可以用子集树表示。
在搜索解空间树时,只要其左儿子节点是一个可行节点,搜索就进入左子树。
当右子树中有可能含有最优解时,才进入右子树搜索。
否则,将右子树剪去。
设r是当前剩余物品价值总和,cp是当前价值;bestp是当前最优价值。
当cp+r<=bestp时,可剪去右子树。
计算右子树上界的更好的方法是将剩余物品依次按其单位价值排序,然后依次装入物品,直至装不下时,再装入物品一部分而装满背包。
例如:对于0-1背包问题的一个实例,n=4,c=7,p=[9,10,7,4],w=[3,5,2,1]。
这4个物品的单位重量价值分别为[3,2,3,5,4]。
以物品单位重量价值的递减序装入物品。
先装入物品4,然后装入物品3和1.装入这3个物品后,剩余的背包容量为1,只能装0.2的物品2。
简述回溯法和分支限界法的异同
回溯法和分支限界法是解决问题时常用的两种算法。
它们都是一种搜索算法,用于在问题空间中寻找问题的解。
虽然它们有着相似的目的,但它们在实现过程和特点上有着不同之处。
下面将对回溯法和分支限界法进行简要的比较,以便更好地理解它们的异同点。
一、回溯法回溯法,又称试探法,是一种通过深度优先搜索的方式来解决问题的算法。
其基本思想是从问题的解空间树根节点出发,按深度优先的方式搜索整个解空间树。
在搜索过程中,当发现到达某个节点时,如果这个节点不满足约束条件,那么就进行回溯,返回到上一层节点继续搜索。
回溯法在寻找解的过程中,常常使用递归进行实现。
回溯法的特点:1. 深度优先搜索:回溯法使用深度优先搜索的方式遍历解空间树,这意味着它会尽可能深地探索每一个节点,直到找到问题的解或者发现无解。
2. 适用范围广:回溯法可以解决非常多种类的问题,比如八皇后问题、0-1背包问题等等。
只要问题可以建模成解空间树的形式,就可以使用回溯法进行解决。
3. 隐式的剪枝:在回溯法的搜索过程中,由于采用了深度优先搜索的方式,所以会自带一定的隐式剪枝效果。
即在搜索到某一节点时,如果发现不满足约束条件,就会立即回溯,从而避免继续搜索无效的节点。
二、分支限界法分支限界法也是一种搜索算法,它与回溯法有相似之处,但在实现细节上有所不同。
分支限界法通过不断将解空间树中的节点分支并进行评估,然后根据当前状态的下界限定来减少搜索范围,从而达到快速寻找最优解的目的。
分支限界法的特点:1. 显式的剪枝:与回溯法不同,分支限界法会显式地在搜索过程中对节点进行剪枝。
这是因为分支限界法在每次分支后都会对节点进行评估,并根据评估结果进行剪枝操作,从而避免不必要的搜索。
2. 寻找最优解:相比于回溯法,分支限界法更适合寻找最优解。
由于它能够通过不断地削减搜索空间来加速搜索过程,因此更适合解决那些需要找到最优解的问题。
3. 需要维护优先队列:在分支限界法的实现过程中,通常需要维护一个优先队列,用于存储待扩展的节点,并根据评估函数的结果进行排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回溯法与分支限界法的分析与比较
摘要:通过对回溯法与分支限界法的简要介绍,进一步分析和比较这两种算法在求解问题时的差异,并通过具体的应用来说明两种算法的应用场景及侧重点。
关键词:回溯法分支限界法n后问题布线问题
1、引言
1.1回溯法
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。
算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。
如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
这种以深度优先方式系统搜索问题解的算法称为回溯法。
1.2分支限界法
分支限界法是以广度优先或以最小耗费优先的方式搜索解空间树,在每一个活结点处,计算一个函数值,并根据函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间上有最优解的分支推进,以便尽快地找出一个最优解,这种方法称为分支限界法。
2、回溯法的基本思想
用回溯法解问题时,应明确定义问题的解空间。
问题的解空间至少应包含问题的一个解。
之后还应将解空间很好的组织起来,使得能用回溯法方便的搜索整个解空间。
在组织解空间时常用到两种典型的解空间树,即子集树和排列树。
确定了解空间的组织结构后,回溯法从开始结点出发,以深度优先方式搜索整个解空间。
这个开始结点成为活结点,同时也成为当前的扩展结点。
在当前的扩展结点处,搜索向纵深方向移至一个新结点。
这个新结点就成为新的活结点,并成为当前扩展结点。
如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。
此时,应往回移动至最近的一个活结点处,并使这个活结点成为当前的扩展结点。
回溯法以这种工作方式递归的在解空间中搜索,直至找到所要求的解或解空间中已无活结点时为止。
3、分支限界法的基本思想
用分支限界法解问题时,同样也应明确定义问题的解空间。
之后还应将解空间很好的组织起来。
分支限界法也有两种组织解空间的方法,即队列式分支限界法和优先队列式分支限界法。
两者的区别在于:队列式分支限界法按照队列先进先出的原则选取下一个节点为扩展节点,而优先队列式分支限界法按照优先队列
中规定的优先级选取优先级最高的节点成为当前扩展节点。
分支限界法常以广度优先或以最小耗费优先的方式搜索问题的解空间树。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。
活结点一旦成为扩展结点,就一次性产生其所有儿子结点。
在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。
这个过程一直持续到找到所需的解或活结点表为空时为止。
4、回溯法的设计原理
在设计一个回溯算法时,通常按照以下步骤进行:
(1)针对所给问题,定义问题的解空间;
(2)确定易于搜索的解空间结构;
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
在一般情况下用递归方法实现回溯法的基本框架如下:
void backtrack (int t)
{
if (t>n)output(x);
else
for (int i=f(n,t);i<=g(n,t);i++){
x[t]=h(i);
if (constraint(t)&&bound(t))backtrack(t+1);
}
}
其中:t表示递归深度,output(x)记录或输出得到的可行解x,f(n,t)和g(n,t)分别表示在当前扩展结点处未搜索过的子树的起始编号和终止编号,h(i)表示当前扩展结点处的第i个可选值,constraint(t)和bound(t)表示当前扩展结点的约束函数和限界函数。
5、分支限界法的设计原理
在设计一个分支限界算法时,通常按照以下步骤进行:
(1)针对所给问题,定义问题的解空间;
(2)确定易于搜索的解空间结构;
(3)以广度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
6、回溯法与分支限界法的差异及应用
回溯法与分支定界法都是在问题的解空间上搜索问题解的算法。
但是两者是有区别的:
首先,求解目标不同:
一般而言,回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是尽快地找出满足约束条件的一个解。
其次,搜索方法不同:
由于求解目标不同,导致分支限界法与回溯法对解空间的搜索方式也不同,回溯法采用深度优先方法搜索解空间,而分支限界法一般采用用广度优先或以最小耗费优先的方式搜索解空间。
再次,对扩展结点的扩展方式不同:
在搜索解空间书中两者的主要区别在于它们对当前扩展结点所采用的扩展方式不同。
在回溯法中,如果当前的扩展结点不能够再向纵深方向移动,则当前扩展结点就成为死结点,此时应回溯到最近的一个活结点处,并使此活结点成为扩展结点。
而在分支限界法中,每一个活结点只有一次机会成为扩展结点。
活结点一旦成为扩展结点,就一次性产生其所有儿子结点。
最后,存储空间的要求不同:
分支限界法的存储空间比回溯法大得多,因此当内存容量有限时,回溯法成功的可能性更大。
下面结合具体的实例来说明何种情况下比较适合采用回溯法,何种情况下比较适合采用分支限界法:
适合采用回溯法的问题:最典型的代表如n后问题,即在n*n个格的棋盘上
放置彼此不受攻击的n个皇后。
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。
对于n后问题,解与解之间不存在优劣的区别。
必须要搜索到叶节点时才能确定出一组解。
这种情况下,我们采用回溯法来解决时,采用排列树的解空间结构,在最坏的情况下,其堆栈的深度不会超过n。
而采用分支限界法时,由于解之间不存在优劣关系,故不可能用限界函数剪枝,需要较大的存储空间。
适合采用分支限界法的问题:最典型的代表如布线问题,即印刷电路板将布线区域划分成n*m个方格阵列。
要求确定连接方格a的中点到方格b的中点的最短布线方案。
在布线时,电路只能沿直线或直角布线。
为了避免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。
此问题,如果采用回溯法来解决时,为了找到最短路径,必须把整个区域的所有路径逐一搜索后才能得到最优解,这使得算法效率较低。
而如果用分支限界法来解决,则可以保证找到的解是最短的布线方案,因为如果存在一条由a至b的更短的路径,b 结点一定会更早地被加入到活结点队列中并得到处理。
参考文献:
[1]Levitin.算法设计与分析基础(第二版)[M].北京:清华大学出版社,2007.
[2]王晓东.算法设计与分析[M].北京:清华大学出版社,2003.
[3]维斯.数据结构与算法分析C++描述(第三版)[M].北京:人民邮电出版社,2007
[4]宋文,吴晟,杜亚军.算法设计与分析[M].重庆:重庆大学出版社,2002.。