`

基础算法系列总结:分支限界算法

阅读更多
今天,我一反常态,其他的算法系列文章都是先介绍算法的理论,然后再讲到具体的问题,后来有人给我反应,对于那些随便看看的人,看到那些我贴了别的地方的理论文字就特别的反感,然后就不想继续往下面看了,对于分支限界算法,我采用问题先行的总结方法。首先我们来关注一个问题:

问题描述:

布线问题:印刷电路板将布线区域划分成n×m个方格阵列,要求确定连接方格阵列中的方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿直线或直角布线,为了避免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。如下图所示:

image                         image

问题                                                                             求解结果

算法思路:

布线问题的解空间是一个图,则从起始位置a开始将它作为第一个扩展结点。与该扩展结点相邻并可达的方格成为可行结点被加入到活结点队列中,并且将这些方格标记为1,即从起始方格a到这些方格的距离为1。接着,从活结点队列中取出队首结点作为下一个扩展结点,并将与当前扩展结点相邻且未标记过的方格标记为2,并存入活结点队列。这个过程一直继续到算法搜索到目标方格b或活结点队列为空时为止。

在实现上述算法时,

(1) 定义一个表示电路板上方格位置的类Position。

它的2个成员row和col分别表示方格所在的行和列。在方格处,布线可沿右、下、左、上4个方向进行。沿这4个方向的移动分别记为0,1,2,3。下表中,offset[i].row和offset[i].col(i= 0,1,2,3)分别给出沿这4个方向前进1步相对于当前方格的相对位移。

image

(2) 用二维数组grid表示所给的方格阵列。

初始时,grid[i][j] = 0, 表示该方格允许布线,而grid[i][j] = 1表示该方格被封锁,不允许布线。

算法图解:

image

代码贴出来:
View Code



好了,问题解出来了。咦,我们用的是什么方法呢?呵呵,对,这就是分支限界算法。

算法总结:

分支限界法基本思想:

• 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。

• 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。

• 在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。

• 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

分支限界法与回溯法的不同:

关于回溯法的文章请见算法系列总结:回溯算法(解火力网问题)一文

(1)求解目标不同:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。

(2)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。
分享到:
评论

相关推荐

    学习电脑信息五大常用算法之五:分支限界法.docx

    学习电脑信息五大常用算法之五:分支限界法 分支限界法是一种常用的搜索算法,...但是,为了更好地应用分支限界法,需要具备扎实的数学基础和算法设计能力,不断学习和实践新的算法和技术,并将其应用于实际问题中。

    算法与分析实验五:分枝限界法

    **算法与分析实验五:分枝限界法** 在计算机科学中,算法是解决问题的关键工具。本实验旨在应用分枝限界法(Branch and Bound)的算法设计思想解决单源最短路径问题。分枝限界法是一种全局优化方法,常用于约束满足...

    最大团问题---分支限界算法

    解决这一问题的一个有效方法是使用分支限界算法。 分支限界法是一种全局搜索策略,它通过构建一棵搜索树来探索所有可能的解决方案,并在搜索过程中逐步剪枝,以避免无效的计算。在最大团问题中,分支限界通常结合...

    用分支限界法解决旅行商问题

    总结来说,旅行商问题的分支限界法通过系统地探索可能的解空间,结合启发式策略减少无效计算,逐步逼近最优解。尽管这种方法不能保证在所有情况下找到全局最优解,但它在实际应用中能够找到相当接近最优的解,并且比...

    分支限界法的相关资料

    分支限界法是一种在计算机科学和算法设计中广泛使用的搜索策略,主要应用于解决最优化问题。这种方法通过系统地扩展一棵包含所有可能解的搜索树,同时限制搜索的范围,以避免无效的路径并找到最优解。它结合了深度...

    基于深度优先算法、广度优先算法、动态规划、分支限界法、回溯法、贪心算法解决TSP问题python源码.zip

    基于深度优先算法、广度优先算法、动态规划、分支限界法、回溯法、贪心算法解决TSP问题python源码.zip基于深度优先算法、广度优先算法、动态规划、分支限界法、回溯法、贪心算法解决TSP问题python源码.zip基于深度...

    分支限界法实现0-1背包

    ### 分支限界法实现0-1背包问题 #### 一、基础知识介绍 **0-1背包问题**是一种经典的组合优化问题,在计算机科学与运筹学领域有着广泛的应用。问题可以表述为:给定一系列物品,每个物品都有一个重量和一个价值;...

    分支限界法之旅行售货员问题

    分支限界法是一种在计算机科学中用于解决优化问题的有效算法,尤其在图论和组合优化领域有着广泛应用。它与回溯法类似,都是通过搜索问题的解空间来找到最优解,但分支限界法通常更加高效,因为它使用了剪枝策略来...

    算法 回溯 动态递归 分支限界 图 etc.

    本资料包涵盖了几个重要的算法类别,包括回溯、动态规划、递归、分支限界以及图算法,同时也涉及了链表操作等基础数据结构知识。接下来,我们将详细讨论这些主题。 1. **回溯**:回溯是一种试探性的解决问题的方法...

    分支限界算法解析思路

    分支限界算法是求解各类优化问题的有力工具,它结合了搜索与剪枝策略,通过构建待解决的问题空间树,逐一检查每个节点,排除不符合条件的解,并对可能的解空间进行有效限制,从而逐步逼近最优解。本文将围绕分支限界...

    算法分析与设计 分支限界法

    分支限界法是一种用于求解优化问题的有效算法,它通过广度优先或深度优先的方式遍历问题的解空间树,并在搜索过程中应用限界函数来排除不可能产生最优解的子树,从而避免无效的计算。这种方法常用于解决最优化问题,...

    算法之分支限界法实现.doc

    《算法之分支限界法实现》 在计算机科学中,解决优化问题的一种有效方法是分支限界法(Branch and Bound)。这种方法结合了回溯法的深度优先搜索特性,并通过一个限界函数来避免无效的搜索分支,从而提高求解效率。...

    实验三 分支限界法1

    实验包括基础题和补充题,旨在帮助学生通过实际操作来理解和掌握分支限界法。 **基本题 - 0-1 背包问题:** 这是一个经典的优化问题,目标是在不超过背包容量的情况下,选择物品以最大化总价值。每种物品都有重量和...

    n个工人作业分配问题分支限界法python实现

    只有一版,使用分支限界法实现的n个工人作业分配问题。18级学姐自主完成的算法作业,呕心沥血,基于四舍五入等于0基础的python实现,如果在语言规范上存在不足,那就。就憋着!哈哈哈哈哈,代码仅供参考,自己亲自码...

    数据结构算法与应用:C++语言描述的书本及习题答案.zip )

    在算法部分,书中会涵盖排序(如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)和查找(线性查找、二分查找、哈希查找)等基础算法。此外,还会涉及图算法,如最短路径问题(Dijkstra算法、Floyd...

    分支限界法求解过程.pptx

    分支限界法是一种在问题求解过程中采用广度优先搜索或最小耗费(最大效益)优先搜索策略的算法。它主要应用于组合优化问题,即在有限个可能解的集合中寻找最优解的问题。这种算法的核心思想是通过逐步构建解空间树来...

    实验三 分支限界法(修改)1

    【实验三 分支限界法(修改)1】实验主要关注的是理解和应用分支限界法这一重要的算法思想,以及将其与回溯法进行对比。分支限界法是一种用于求解最优化问题的有效方法,它通过广度优先或深度优先地搜索问题的解空间...

    五大常用算法总结,算法数据结构

    本文将对五种常见的算法进行总结,分别是贪婪算法、动态规划、分治算法、回溯算法和分支限界算法。 1. **贪婪算法**: 贪婪算法是一种以局部最优解为目标的策略,它在每一步选择中都采取当前看起来最好的选择。...

    算法设计与分析复习总结

    5. **分支限界法**:分支限界法通过广度优先或最小耗费优先搜索解空间,每个节点只扩展一次,丢弃非最优或不可行的子节点。常见的形式有队列式和优先队列式分支限界法。 6. **算法复杂性**:衡量算法效率的重要指标...

Global site tag (gtag.js) - Google Analytics