通过例子讲解回溯法、分枝限界法

1.写在前面

        这学期上算法课,对分枝限界法这一章听的似懂非懂。后来复习备考时,参考了王晓东老师的《计算机算法设计与分析》,把这部分的原理彻底整明白了,在此与大家分析心得。我将结合自己的理解和书上的几个例子,来具体说明回溯法和分枝限界法原理,实现代码网上比比皆是,故不再赘述。

        算法整体而言,大致可以分为3类,基于规模、基于搜索、随机化。基于规模的算法主要有分治、动态规划、贪心算法;基于搜索的有回溯分枝限界法;随机化严格来说是一种策略,能优化算法的性能,主要有舍伍德算法、拉斯维加斯算法和蒙特卡洛。以上是“算法设计与分析”这门课的体系,分枝限界法是基于搜索的一种算法,下面也会通过实例和回溯法进行对比,以说明二者的区别和联系。


2.例子一(0-1背包问题)

        对于n=3的0-1背包问题,考虑以下实例:3个商品的重量weight=[16, 15, 15],对应的价值为value=[45, 25, 25],背包允许装入的总重量为c=30,优化目标是在背包中装入商品的重量不超过c的情况下,最大化装入商品的价值。

        先不考虑背包重量的限制c,则每个商品有选择装入和不装两种可能,所以一共有2^3=8种选择,即{(0, 0, 0), (0, 0, 1), …… ,(1, 1, 1)}。大括号{}整体称为解空间,其中每一个小括号()为解向量,表示一种选择,里面有3个数,代表这种选择中3个商品是否装入背包。0表示装入,1表示不装入。如(0, 0, 1)表示的情况是商品1、2均不装入背包,商品3装入背包,此时背包装入商品的总重量为15,总价值为25,且未超过背包的重量限制值30。显然(0, 1, 1)是本例中最优的选择,即把商品2、3装入背包,商品1不装,此时背包装入商品的总重量为30,总价值为50,且满足重量限制的条件。

        基于搜索的算法解决时,都要先写出解空间和解向量,并以此生成解空间树,如图1所示。树分枝上方的1表示选择该商品放入背包,0表示不选该商品。除了根节点,树一共有3层,表示3个商品的选择与否。当遍历完所有叶节点,即得到了所有的结果。但是搜索的顺序如何确定呢?这就是回溯法和分枝限界的第一点区别。回溯法是以深度优先方式搜索整棵树,而分枝限界法是以广度优先或以最小耗费来搜索的。具体来说,分枝限界分为两种:队列式分枝限界优先队列式分枝限界。这一点很重要

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值