基本思想:先定义问题的解空间,然后在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。
三个问题:
两种求解的可能
- 求最优解
- 求所有可能的解
当所给的问题是从n哥元素的集合S中找出满足某种性质的子集时,相应的解空间树称为子集树
当所给问题是确定n哥元素满足某种性质的排列时,相应的解空间树称为排列树
在遍历过程中,为减少无效搜索,应用约束条件、目标函数等剪枝函数进行剪枝。
两种剪枝函数:约束函数和限界函数
同时使用约束条件和目标函数的界进行裁剪的是0/1背包问题
只使用约束条件进行裁剪的是N皇后问题
回溯法的算法框架按照问题的解空间一般分为子集树算法框架和排列树算法框架。
- 用回溯法解0-1背包问题时,该问题的解空间结构为子集树结构 最坏情况2的n次方
- 旅行商问题的解空间树是排列树
- 求解子集和问题是子集树 最坏情况2的n次方
- N皇后问题的解空间树是子集树 n的n次方
- 图的m着色问题的解空间树是子集树 m的n次方
- 求解任务分配问题时子集树 n的n次方
- 活动安排问题时排列数 n的阶乘
- 流水作业调度问题是排列数 n的阶乘
回溯法的效率依赖于满足显式约束的值的个数、计算约束函数的时间、计算限界函数的时间,不依赖于确定解空间的时间。
算法 | 解空间树搜索方式 | 存储结点的常用数据结构 | 结点存储特性 | 常用应用 |
---|---|---|---|---|
回溯法 | 深度优先搜索 | 栈 | 活结点的所有可行子节结点 | 找出满足约束条件的所有解 |
分支限界法 | 广度优先或最小耗费优先搜索 | 队列、优先队列 | 每个结点只有一次成为活结点的机会 | 找出满足约束条件的一个解或特定意义下的最优解 |