算法设计与分析基础(十五):回溯法与分支界限法
要求了解即可!
它对于求解问题的全部解或某些优化问题,往往是比较有效,其基本策略不同于穷举法的搜索。这种方法适用于解一些组合数相当大的问题。
回溯法
八皇后问题
在一个 88 的国际象棋棋盘上放八个皇后,要求没有两个皇后被放在同一行,同一列,或同一对角线上。
第一级顶点(1, X,X, X ),(2, X,X, X),(3,X,X, X ),(4, X,X, X)分别表示第一个皇后放在第一列、第二列、第三列、第四列,他们都表示棋盘上已有了一个皇后。 依次类推,第二级顶点表示棋盘上已有了两个皇后,…,树的叶结点表示四个皇后均已放在棋盘上。
回溯法的一般框架:
例题
分支界限法
分派问题
对每一种分派可估算其目标函数值的下界
根节点对应还没有进行分派, 其下界自然是: 每个人都在做最省时的工作, 而不考虑是否满足约束条件。 下界为 2+3+1+4=10
- 对每一个节点, 计算其对应的下界。
第一层: 考察 a 被安排做每一项工作的情况
分枝界限法总结
与回溯法类似,分枝界限法是用向量(x1, x2,…, xn)表示解的形式,其求解过程是相应地生成一颗状态树,树中每个分枝代表部分向量(x1, x2,…, xk, …), 解由树叶表示。
在树中每个内点上给出一个值,它表示由部分解出发导出的全部可行解的目标函数值的一个下界,从树根开始,逐步生成状态树,并从中选取具有最小界限函数值的一个子节点进行扩展,同时计算界限函数值。
重复上述过程,直到到达某片树叶(x1, x2,…, xn) ,得到一个可行解;依据可行解的值,更新活节点集合,删除没有必要再进行扩展的点;
在活节点集中, 每次选择下界值最小的节点进行扩展;当活节点集合为空时, 算法终止。此时求得的一个可行解,其目标函数值已小于所有“活”顶点上的界限函数值时,则该可行解便是最优解。