回溯和分支算法

状态空间图

"图"------状态空间图

  • 例子:农夫过河问题------"图"=状态+操作
  • 例子:n后问题、0-1背包问题、货郎问题(TSP)

用向量表示解,"图"由解向量扩张得到的解空间树。 ------三种图:n叉树、子集树、排序树

剪枝 不满住条件的进行裁剪

优化 剪枝! 回溯:DFS+剪枝;分支限界:BFS+剪枝

实例

  • 0-1背包问题的一个实例

    • 给定n=3种物品和一背包。物品W=<16,15,15>,其价值为V=<45,25,25>, 背包的容量为B=30。问应如何选择装入背包的物品,使得装入背包中物品的 总价值最大?


每一层代表第几件物品装不装,来进行剪纸

  • 货郎问题(TSP)

    • 某售货员要到若干城市去推销商品,一直各城市之间的路程,他要选定一 条从驻地出发,经过每个城市一遍,最后回到住地的路线。目标是使总的 路程最短。
      * 解释:先1 2 3 4 得到BestV = 14 然后在选完2的时候可以选4 但其值加起来大于14 直接舍弃,同理1,3也一样
    • 可以用对称性来做
  • 回溯法小结

    • 1.针对所给问题,定义问题的状态空间图
    • 2.深度优先搜索,并用剪枝策略避免无效搜索

​ ------剪枝策略包括约束函数和限界函数。

​ ------对背包问题,左孩子结点扩张需要检查约束函数,右孩子扩张需要检 查限界函数

➢分支限界

  • 以0-1背包问题例
  • 广度优先,注意剪枝策略

步骤总结

  • 1.针对所给问题,定义问题的状态空间图
  • 2.广度优先搜索,并用剪枝策略避免无效搜索 ------扩展结点,一次性生成她的所有孩子结点。

------需要判断孩子结点是舍弃还是保留,舍弃不可行、不能能最优的孩子 结点,其余的结点进入队列中。这样可以避免不必要的搜索。 ------剪枝策略包括约束函数和限界函数

回溯与分支限界

  • 适用条件------多米诺性质 *
    • 必要条件:多米诺性质
      * 理解:**p(x1,x2,x3,...xn)满足>10 即p(x1,x2,x3,...xn-1)也满足>10 **
  • 主要步骤及递归和迭代的实现
  • 一种效率分析方法------Monte Calo方法
  • 剪枝的进一步细化------以0-1背包问题为例

主要步骤及递归和迭代的实现


  • 子集树

  • 排列树

    ➢ 0-1背包问题的一个实例

  • 给定n种物品的重量价值和一背包,背包的容量为B,每种物品只能装入一次。

  • 问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?

  • 记录:已有重量(约束)、已有价值(目标、界)

  • 现在的要点是,继续优化剪枝策略。

  • 还有没有其他的?

  • 引入界函数和代价函数。

➢ 界函数

  • 代表当时已经得到的可行解的目标函数的最大值
  • 界的设定初值可以设为 0
  • 可行解的目标函数值大于当时的界进行更新

➢ 代价函数

  • 函数值以该结点为根的搜索树中的所有可行解的目标函数值的上界
  • 父结点的代价不小于子结点的代价

➢ 搜索中停止分支的依据

  • 不满足约束条件或者其代价函数小于当时的界


  • 已有价值==已有界
  • 代价函数 === 可能的最大的已有价值 代价函数 得变

典型例子

  • 装载问题
    * 实例
  • 图的m着色问题
  • 背包问题
  • 最大团问题
  • 货郎问题(TSP)
  • 圆排列问题
  • 连续邮资问题

明天更新这些问题的解法和思路

相关推荐
幸运超级加倍~1 小时前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
yannan201903131 小时前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法1 小时前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR1 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
linsa_pursuer1 小时前
快乐数算法
算法·leetcode·职场和发展
小芒果_011 小时前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
qq_434085901 小时前
Day 52 || 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II
算法
Beau_Will1 小时前
ZISUOJ 2024算法基础公选课练习一(2)
算法
XuanRanDev1 小时前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
gkdpjj1 小时前
C++优选算法十 哈希表
c++·算法·散列表