- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Chapter_7回溯法
7 回溯法Backtracking;引例;几个概念;回溯法的工作原理;a;输入:无向图G=(V,E)
输出:G的顶点的3着色c[1…n],其中每个c[j]为1,2或3.
1. for k ←1 to n
2. c[k] ←0 //no color
3. end for
4. flag ←false
graphcolor(1)
if flag then output c
7. else output “no solution”;输入:无向图G=(V,E)
输出:G的顶点的3着色c[1…n],其中每个c[j]为1,2或3.
1. for k ←1 to n
2. c[k] ←0
3. end for
4. flag ←false
5. k ←1 //start from v1
6. while k≥1
7. while c[k]≤2 //为第k个顶点着色
8. c[k] ←c[k]+1
9. if c为合法着色then flag ←true and exit
10. else if c为部分着色then k ←k+1 //准备为下一顶点着色,→7
11. end while //假设着色既不合法也非部分的,即死结点,试其他色
12. c[k] ←0 //vk试验了所有颜色均失败, 当前顶点颜色只好归0,回溯
13. k ←k-1 //回溯到上一个顶点 (配合第6句的k≥1来理解)
14.end while //注意:回溯到上一个顶点后,c[k]+1,即尝试下一种颜色; 皇后问题 ;考察n皇后问题n=4的情形:解空间有44(可减少至4!)种布局, 可用一棵高度为4的完全4叉树表示:树的根对应于没有放置皇后的布局,第一层结点对应于皇后在第一行(列)可能放置列(行)的情况,依此类推。
合法布局:一个不互相攻击的4 皇后布局
部分布局:一个不互相攻击的少于4个皇后的布局
下图表示一个部分布局,用向量(3,1,0,0)表示;;x1;
;再扩展B到达E(续)
E可行,此时A、B、E是活结点,E成为新的扩展结点
扩展E,先到达J
Crw3,J导致一个不可行解,尝试E的下一个元素
再次扩展E到达K
由于K是叶结点,即得到一个可行解x=(1,0,0),V=45
K不可扩展,成为死结点,返回到E
E没有可扩展结点,成为死结点,返回到B
B没有可扩展结点,成为死结点,返回到A (回溯到A);A再次成为扩展结点,扩展A到达C (尝试A的下一元素)
Cr=30,V=0,活结点为A、C,C为当前扩展结点
扩展C,先到达F
Cr=Cr-w2=15,V=V+v2=25,此时活结点为A、C、F,F成为当前扩展结点
扩展F,先到达L
Cr=Cr-w3=0,V=V+v3=50
L是叶结点,且5045,皆得到一个可行解x=(0,1,1),V=50
L不可扩展,成为死结点,返回到F
再扩展F到达M
M是叶结点,且2550,不是最优解
M不可扩展,成为死结点,返回到F
F没有可扩展结点,成为死结点,返回到C
;
再扩展C到达G
Cr=30,V=0,活结点为A、C、G,G为当前扩展结点
扩展G,先到达N,N是叶结点,且2550,不是最优解,又N不可扩展,返回到G
再扩展G到达O,O是叶结点,且050,不是最优解,又O不可扩展,返回到G
G没有可扩展结点,成为死结点,返回到C
C没有可扩展结点,成为死结点,返回到A
A没有可扩展结点,成为死结点,算法结束,最优解X=(0,1,1),最优值V=50
;给定一个问题的实例,如果该问题实例的解可以表示成定长的向量形式,那么就可以考虑使用回溯法来解决。
如果一个问题的实例,其解是一个变长的向量形式,是否可以使用回溯法?;一个例子;y1;通用回溯方法框架 ; 在回溯法中,每个xi 均是属于某个有限集合的,不妨称之为Xi,那么回溯法实质上是按照词典顺序考虑笛卡儿积:
X1×X2×…×Xn
中的元素。
算法最初从空向量开始,先选择X1中的最小元素作为x1;
如果(x1)是部分解,那么选择X2中的最小元素作为x2;
如果(x1, x2)是部分解,则继续考虑X3中的最小元素作为x3 ;
否则,考虑X2中的第二个元素作为x2。依此类推。 ;一般说来, 当算法已经检测到部分解(x1, x2,…, xj), 需要继续考虑 v = (x1, x2,…, xj, xj+1)时,有以下几种情形:;递归回溯;迭代回溯;小结;分支限界法(Branch and Bounds);基本思想 ;常见的两种分支限界法;0-1背包问题, 应用优先队列式分支限界法;为搜索结点设置一个上界ub (u
文档评论(0)