趣学算法系列-分支限界法

本文介绍了分支限界法这一算法,它是一种以广度优先搜索解空间的策略。文章详细阐述了分支限界法的基本思想、算法步骤,并通过旅行商问题的实际案例进行解析,展示了如何利用分支限界法解决实际问题。同时,讨论了在解决旅行商问题时如何设置限界条件和优先级,以优化搜索效率。
摘要由CSDN通过智能技术生成

趣学算法系列-分支限界法

声明:本系列为趣学算法一书学习总结内容,在此推荐大家看这本算法书籍作为算法入门,
原作者博客链接,本书暂无免费电子版资源,请大家支持正版

第六章 分支限界法

在树搜索法中,从上到下为纵,从左向右为横,纵向搜索是深度优先,而横向搜索是广
度优先。前面讲的回溯法就是一种深度优先的算法。分支限界法就是以广(宽)度优先的树搜索方法
- 分支限界法的算法思想
*从根开始,常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
首先将根结点加入活结点表(用于存放活结点的数据结构)
*接着从活结点表中取出根结点,使其成为当前扩展结点,一次性生成其所有孩子结点,判断孩子结点是舍 弃还是保留,舍弃那些导致不可行解或导致非最优解的孩子结点,其余的被保留在活结点表中。
*再从活结点表中取出一个活结点作为当前扩展结点,重复上述扩展过程,直到找到所需的解或活结点表为
空时为止。由此可见,每一个活结点最多只有一次机会成为扩展结点。
*活结点表的实现通常有两种形式:一是普通的队列,即先进先出队列;一种是优先级队
列,按照某种优先级决定哪个结点为当前扩展结点
- 分支限界法算法步骤
(1)定义解空间 确定解空间包括解的组织形式和显约束(范围限定)
(2)确定解空间的组织结构 通常用解空间树形象的表达(只是辅助理解并不是真的树)
(3)搜索解空间 按照广度优先搜索,根据限制条件,搜索问题的解
- 分支限界法解题秘籍
(1)定义解空间 确定解空间包括解的组织形式和显约束(范围限定)
(2)确定解空间的组织结构 通常用解空间树形象的表达(只是辅助理解并不是真的树)
(3)搜索解空间 按照深度优先搜索,根据限制条件,搜索问题的解
- 回溯法的典型应用
        树的广度优先遍历
        旅行商问题


  • 实际案例分析-旅行商问题

  • 问题描述

    终于有一个盼望已久的假期!立马拿出地图,标出最想去的 n 个
    景点,以及两个景点之间的距离 dij,为了节省时间,我们希望在最短
    的时间内看遍所有的景点,而且同一个景点只经过一次。怎么计划行
    程,才能在最短的时间内不重复地旅游完所有景点回到家呢?
    这里写图片描述

  • 问题分析

    现在我们从 1 号景点出发, 游览其他 3 个景点, 先给景点编号 1~4,每个景点用一个结点表示,可以直接到达的景点有连线,连线上的数字代表两个景点之间的路程(时间)。那么要去的景点地图就转化成了一个无向带权图,如图 6-34 所示。
    这里写图片描述
    在无向带权图 G=( V, E)中,结点代表景点,连线上的数字代表景点之间的路径长度

  • 算法设计

    (1)定义问题的解空间
    奇妙之旅问题解的形式为 n 元组: {x1, x2,…, xi,…, xn},分量 xi 表示第 i 个要去的旅
    游景点编号,景点的集合为 S={1, 2,…, n}。景点不可重复走,xi 的取值为 S−{x1, x2,…, xi−1}, i=1, 2,…, n。
    (2)解空间的组织结构
    问题解空间是一棵排列树,树的深度为n=4,如图 6-35 所示。
    这里写图片描述
    (3)搜索解空间
    约束条件
    用二维数组 g[][]存储无向带权图的邻接矩阵,如果 g[i][j]≠∞表示城市 i 和城市 j 有边相连,能走通
    限界条件
    cl这里写图片描述bestl, cl 的初始值为 0, bestl 始值为+∞。
    cl:当前已走过的城市所用的路径长度。
    bestl:表示当前找到的最短路径的路径长度。
    搜索过程
    如果采用普通队列(先进先出)式的分支限界法,那么除了最后一层外,所有的结点都
    会生成,这显然不是我们想要的
    可以使用优先队列式分支限界法,加速算法的搜索速度
    设置优先级:当前已走过的城市所用的路径长度 cl。 cl 越小,优先级越高

  • 完美图解

    (1)数据结构
    设置地图的带权邻接矩阵为 g[][],即如果从顶点 i 到顶点 j 有边,就让 g[i][j]等于这里写图片描述i, j>
    的权值,否则 g[i][j]=∞(无穷大),如图 6-37 所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值