这部分其实才是期末考的重点
回溯法
1、回溯法基本思想:
搜索:从根结点出发,按深度优先策略遍历解空间树,搜索满足约束条件的解。
剪枝:在搜索至树中任一结点时,先判断该结点对应的部分解是否满足条件(用约束函数在扩展节点处减去不满足约束的子树、用限界函数剪去找不到最优解的子树),也即判断该结点是否包含问题的解,如果肯定不包含,则跳过对以该结点为根的子树的搜索,即剪枝(Pruning);否则,进入以该结点为根的子树,继续按照深度优先的策略搜索。
2、算法步骤:
一般来讲,回溯法求解问题的基本步骤如下:
(1) 针对所给问题,定义问题的解空间;
(2) 确定易于搜索的解空间结构;
(3) 以深度优先方式搜索解空间,并在搜索过程中利用Pruning函数剪去无效的搜索。
3、解空间
子集树:当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间称为子集树。例如, 0-1背包问题所相应的解空间树就是一颗子集树。这类子集问题通常有2n个叶节点,其节点总个数为2(n+1)-1。遍历子集树的任何算法均需要O(2n)的计算时间。
排列树 :当所给问题是确定n个元素满足某种性质的排列时,相应的解空间树称为 排列树 。排列树通常有n!个叶子节点。因此遍历排列树需要O(n!)的计算时间。
4、解决01背包问题可以使用动态规划,不需要对接点进行排序;采用回溯法和分支限界法需要通过单位质量进行排序
分支限界法