回溯法递归回溯算法步骤符号约定

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算复杂性
n个集装箱要建立深度为n个子集树,叶结点的数目
为2n,因此T(n)=O(2n)
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
装载问题的回溯算法II(1)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
用剪枝函数改进递归回溯
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
回溯法,古来有之
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
诗经· 秦风· 蒹葭
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
回溯法的基本思想
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
概述 n ì ï ï n 装载问题 xi wi £ c1 ï ï max xi wi s.t. í i= 1 批处理作业调度 ï i= 1 ï n后问题 xi 危 0,1 1 i ? n ï ï î 0-1背包问题 最大团问题 建立解空间树:以n=3为例 该树称为子集树 图的着色问题
min 邋ç t1ni + t2 nk ÷ ç ÷ ç ÷ 桫 k = 1 i= 1
上式的定义存在局限 , 要求任意作业经过机器 1 处
理后不需等待即可被机器2处理
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
批处理作业调度的回溯解法(1)
回溯法
基本思想 : 建立一棵排列树 , 并在解空间树上回溯
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
回溯法框架:以旅行售货员问题为例(4)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题Biblioteka Baidu最大团问题 图的着色问题
具体算法
bestx 表示当前最优解 ,bestc 表示当前最优值 ,cc 表
示当前费用,x表示当前解
计算机科学与技术专业课程
Algorithm Design and Analysis
算法设计与分析
宋传鸣
chmsong@lnnu.edu.cn
辽宁师范大学计算机与信息技术学院
回溯法,古来有之
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
诗经· 秦风· 蒹葭
å
n
F2i
i= 1
称为该作业调度的完成时间和
目标:对于给定的 n个作业,制定最佳作业调度方案 ,
使其完成时间和达到最小
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
批处理作业调度问题的描述(2)
回溯法
简单结论:存在最佳作业调度使得在机器1和机器2
概述 上作业以相同次序完成 装载问题 形式化描述 批处理作业调度 给定n个正整数N={1,2,…,n}和tji(i=1,2,…,n,j=1,2,…, n后问题 0-1背包问题 n).批处理作业调度是要求 N的一个序 {n1,n2,…,nn}, 最大团问题 使得 n 骣 k 图的着色问题 ÷
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
迭代回溯:用树的非递归深度优先遍历实现回溯
IterativeBacktrack(int n) 1. t← 1 2. do while t>0 3. if f(n,t)<=g(n,t) then 4. for i← f(n,t) to g(n,t) 5. x[t]← h(i) 6. if Constraint(t) && Bound(t) then 7. if Solution(t) then 8. Output(x) 9. else 10. t← t+1 11. end if 12. end if 13. end for 14. else 15. t← t-1 16. end if 17. end while
计算复杂性
子集树共有2n个结点,因此T(n)=O(2n)
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
批处理作业调度问题的描述(1)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
问题描述
给定n个作业的集合J={J1,J2,…,Jn}.每一个作业Ji都
f(n,t)和g(n,t)表示在当前扩展结点处未搜索过的子
树的起始和终止编号
h(i)表示在当前扩展结点处x[i]的第i个可选值
Constraint(t)表示约束函数 Bound(t)表示限界函数
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
回溯法框架:以旅行售货员问题为例(3)
设Z是解空间树第i层上的当前扩展结点,令
r=
j = i+ 1
å
n
wj
表示剩余集装箱的重量和
上界函数:
Bound (i) = cw + r
剪枝规则:当Bound(i)<=bestw时,可将Z的右子树剪

辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
装载问题的回溯算法II(2)
å
要确定是否存在W的一个划分,使得W1∪W2=W,W1 wi c2 ∩W2=φ,且 邋 wi #c1 ,
基本思想
wi 挝 W1 wi W2
首先将第一艘轮船尽可能装满
将剩余的集装箱装上第二艘轮船
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
装载问题的回溯算法I(1)
回溯法
装载问题可转化为一个特殊的0-1背包问题
有2项任务要分别在 2台机器上完成 .每一个作业必 须先由机器 1处理,然后再由机器 2处理 .作业 Ji需要 机器j的处理时间为tji,i=1,2,…,n,j=1,2.对于一个确 定的作业调度 , 设是 Fji 是作业 i 在机器 j 上完成处理 的时间.则所有作业在机器2上完成处理的时间和
f =
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
装载问题的描述
回溯法
问题描述
概述 有一批n个集装箱要装上2艘载重量为c1和c2的轮船, n 装载问题 其中集装箱i的重量为wi,且 wi ? c1 c2 批处理作业调度 i= 1 n后问题 目标:确定一个合理的方案,将n个集装箱装上2艘船 0-1背包问题 形式化描述 最大团问题 图的着色问题 给定一个集合 W={w1,w2,…,wn}, 装载问题的目标是
《算法设计与分析》
辽宁师范大学计算机与信息技术学院 宋传鸣
回溯法框架:以旅行售货员问题为例(5)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
计算复杂度分析
若解空间树的高度为n,则树叶结点的数目有(n-1)! 若采用全搜索,T(n)=O((n-1)!)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
递归回溯
输入 : 集装箱的重量 w[],轮船载重量 c[],集装箱的数目 n 输出 : 最优值 bestw MaxLoading(w,c,n) 1. bestw← 0 {初始化最大载重量 } 2. cw← 0 {初始化目前的载重量 } 3. Initialize( ) 4. Backtrack(1) Initialize() 1. r← 0 2. for i← 1 to n 3. r← r+w[i] 4. end for
概述 搜索最优解 , 从而确定 n 个作业的一个序 , 即 n 个作 装载问题 业的一个排列 批处理作业调度 符号约定 n后问题 0-1背包问题 二维数组M表示作业的处理时间 最大团问题 bestf表示当前最小完成时间和 图的着色问题 bestx表示当前的最优解
x表示当前的作业调度 f1表示机器1完成处理的时间 f2表示机器2完成处理的时间
回溯法求解过程
定义解空间,并将其组织成树或图的形式 以深度优先方式搜索解空间 ,在搜索过程中用剪枝
函数避免无效搜索

递归回溯 迭代回溯
《算法设计与分析》
辽宁师范大学计算机与信息技术学院 宋传鸣
回溯法框架:以旅行售货员问题为例(2)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
回溯法框架:以旅行售货员问题为例(1)
回溯法
问题描述 : 某个售货员要到若干城市推销商品 , 已
概述 知各个城市之间的路程,他要选定一条从驻地出发, 装载问题 经过每个城市一遍,最后回到驻地的路线 批处理作业调度 目标:使总的路线最短 n后问题 0-1背包问题 形式化描述 : 给定一个带权图 G=(V,E), 寻找 G 的一 最大团问题 条包含V中所有顶点的回路,使其总代价最小 图的着色问题
å
å
{ }(
)
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
装载问题的回溯算法I(2)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
递归回溯
输入 : 集装箱的重量 w[],轮船载重量 c[],集装箱的数目 n 输出 : 最优值 bestw MaxLoading(w,c,n) 1. bestw← 0 {初始化最大载重量 } 2. cw← 0 {初始化目前的载重量 } 3. Backtrack(1) Backtrack(w,c,n,i) 1. if i>n then {到达叶结点 } 2. if cw>bestw then 3. bestw← cw 4. return 5. end if 6. end if
辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
批处理作业调度的回溯解法(2)
回溯法
概述 装载问题 批处理作业调度 n后问题 0-1背包问题 最大团问题 图的着色问题
算法步骤
输入 : 数组 M,遍历层数 L 输出 : 最优值 bestw Flowshop(M,L) 1. if L>n then {遍历到了叶结点 } 2. bestx← x 3. bestf← f 4. return 5. end if 6. for j← L to n {从第 L层遍历至第 n层 } 7. f1← f1+M[x[j]][1] 8. f2[L]← max{f2[L-1],f1}+M[x[j]][2] 9. f← f+f2[L] 10. if f<bestf then {计算当前解对应的值 ,并剪枝 } 11. exchange x[L] and x[j] {生成排列树 } 12. Flowshop(M,L+1) 13. exchange x[L] and x[j] 14. end if
输入 : 结点数目 n,源点 j,距离矩阵 a 输出 : 巡游路线 Backtrack(j,n) 1. if j=n then 2. if (a[x[n-1]][x[n]]!=NULL && a[x[n]][1]!=NULL && cc+a[x[n-1]][x[n]]+a[x[n]][1]<bestc) then 3. bestx← x 4. bestc← cc+a[x[n-1]][x[n]]+a[x[n]][1] 5. end if 6. end if 7. for i← j to n 8. if a[x[j-1]][x[i]]!=NULL && cc+a[x[j-1]][x[i]]<bestc 9. exchange x[i] and x[j] //用于生成排列树 10. cc← cc+a[x[j-1]][x[j]] 11. Backtrack(j+1,n) 12. cc← cc-a[x[j-1]][x[j]] 13. exchange x[i] and x[j]
递归回溯:用递归函数实现回溯
Backtrack(int t) 1. if t>n then 2. Output(x) 3. else 4. for i← f(n,t) to g(n,t) 5. x[i]← h(i) {x用来记录可行解的各个结点 } 6. if Constraint(t) && Bound(t) 7. Backtrack(t+1) 8. end if 9. end for 10. end if
在问题的解空间树中按深度优先策略 ,从根结点出
发搜索解空间树 . 当遍历至某一结点时 , 先判断该 结点是否包含问题的解
如果肯定不包含 ,则跳过对其子树的搜索 ,逐层向其
祖先结点回溯
否则 ,继续以深度优先顺序遍历以该结点为根的子

辽宁师范大学计算机与信息技术学院 宋传鸣
《算法设计与分析》
相关文档
最新文档