下载

下载

第1 6章 回 溯

寻找问题的解的一种可靠的方法是首先列出所有候选解,然后依次检查每一个,在检查完

所有或部分候选解后,即可找到所需要的解。理论上,当候选解数量有限并且通过检查所有或

部分候选解能够得到所需解时,上述方法是可行的。不过,在实际应用中,很少使用这种方法,

因为候选解的数量通常都非常大(比如指数级,甚至是大数阶乘),即便采用最快的计算机也

只能解决规模很小的问题。

对候选解进行系统检查的方法有多种,其中回溯和分枝定界法是比较常用的两种方法。按

照这两种方法对候选解进行系统检查通常会使问题的求解时间大大减少(无论对于最坏情形

还是对于一般情形)。事实上,这些方法可以使我们避免对很大的候选解集合进行检查,同时

能够保证算法运行结束时可以找到所需要的解。因此,这些方法通常能够用来求解规模很大

的问题。

本章集中阐述回溯方法,这种方法被用来设计货箱装船、背包、最大完备子图、旅行商和

电路板排列问题的求解算法。

16.1 算法思想

回溯(b a c k t r a c k i n g )是一种系统地搜索问题解答的方法。在 5 . 5 . 6节求解迷宫老鼠问题时

即采用了回溯技术。为了实现回溯,首先需要为问题定义一个解空间( solution space ),这个

空间必须至少包含问题的一个解(可能是最优的)。在迷宫老鼠问题中,我们可以定义一个包

含从入口到出口的所有路径的解空间;在具有 n 个对象的0 / 1背包问题中(见 1 3 . 4节和1 5 . 2节),

解空间的一个合理选择是 2n 个长度为n 的0 / 1 向量的集合,这个集合表示了将0或1分配给x 的所

有可能方法。当n= 3 时,解空间为 { ( 0 , 0 , 0 ),( 0 , 1 , 0 ) ,( 0 , 0 , 1 ),( 1 , 0 , 0 ) ,( 0 , 1 , 1 ) ,( 1 , 0 , 1 ) ,( 1 , 1 , 0 ),

( 1 , 1 , 1 ) } 。

下一步是组织解空间以便它能被容易地搜索。典型的组织方法是图或树。图 1 6 - 1用图的形

式给出了一个3 ×3迷宫的解空间。从( 1 , 1 )点到( 3 , 3 )点的每一条路径都定义了3 ×3迷宫解空间中

的一个元素,但由于障碍的设置,有些路

径是不可行的。

图1 6 - 2用树形结构给出了含三个对象的

0 / 1 背包问题的解空间。从 i 层节点到 i+ 1层

节点的一条边上的数字给出了向量 x 中第i

个分量的值x ,从根节点到叶节点的每一条

i

路径定义了解空间中的一个元素。从根节

点A 到叶节点H 的路径定义了解 x = [ 1 , 1 , 1 ] 。

根据w 和c 的值,从根到叶的路径中的一些

解或全部解可能是不可行的。

一旦定义了解空间的组织方法,这个

空间即可按深度优先的方法从开始节点进 图16-1 3 ×3迷宫的解空间

第 1 6章 回 溯 4 9 3

下载

行搜索。在迷宫老鼠问题中,开始节点为入口节点 ( 1 , 1 ) ;在0 / 1背包问题中,开始节点为根节

点A 。开始节点既是一个活节点又是一个E-节点(expansion node )。从E-节点可移动到一个新

节点。如果能从当前的 E-节点移动到一个新节点,那么这个新节点将变成一个活节点和新的

E-节点,旧的E-节点仍是一个活节点。如果不能移到一个新节点,当前的 E-节点就“死”了

(即不再是一个活节点),那么便只能返回到最近被考察的活节点(回溯),这个活节点变成了

新的E-节点。当我们已经找到了答案或者回溯尽了所有的活节点时,搜索过程结束。

图16-2 三个对象的背包问题的解空间

例16-1 [迷宫老鼠] 考察图16-3a 的矩阵中给出的3 ×3的“迷宫老鼠”问题。我们将利用图 1 6 -

1给出的解空间图来搜索迷宫。

从迷宫的入口到出口的每一条路径都与图 1 6 - 1中从( 1 , 1 )到( 3

数据结构 算法与应用C 语言描述答案,数据结构算法与应用-C语言描述.pdf相关推荐

  1. 标题 错误票据c语言,内含答案的 -- 2013蓝桥杯C语言本科组B.doc

    内含答案的 -- 2013蓝桥杯C语言本科组B.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们 ...

  2. c语言作业答案N个公约数公倍数,c语言程序题,输入两个正整数m和n,求其最大公约数和最小公倍数。...

    输入两个正整数m和n,求其最大公约数和最小公倍数,可以参考下面的代码: #include void main () { int m, n, p, q; printf ("请输入整数m,n的值 ...

  3. 2019浙江C语言二级答案,2019年下半年二级C语言试题及答案

    机遇总是有的,如果把握不住,不要怨天忧人,原因只是自己不够优秀:不要把时间当垃圾处理,唯有珍惜光阴.努力刷二级C语言试题,才能提升生命的质量. 1)若有以下语句:typedef struct S{ i ...

  4. 北理乐学c语言基础答案晕,北理乐学C语言答案.doc

    北理乐学C语言答案.doc 7.入门 计算圆柱的侧面积及体积 include void main double a,b; scanf"lfnlf", printf"s.2 ...

  5. zzulioj1096c语言版答案,郑州轻工业大学oj题解(c语言)1096:水仙花数(函数专题)...

    今天给大家介绍一道函数题.水仙花数的进阶函数专题. 水仙花数在OJ的题目里也算的上是趣味性比较强,相对难度比较简单的题目了.大家在看本文之前也可以先回顾一下1027:水仙花数的题解. 本题相对难度较高 ...

  6. 搜索c语言作业答案的软件,吉林大学软件学院C语言作业参考答案.doc

    吉林大学软件学院C语言作业参考答案 软件学院 高级语言程序设计作业参考答案 2010年12月 目录 第二章 简单程序1 第三章 分支程序设计3 第四章 循环程序设计9 第五章 模块化程序设计――函数1 ...

  7. 安徽继续教育c语言作业答案,安徽继续教育在线 C语言程序设计作业题及答案.docx...

    安徽继续教育在线 C语言程序设计?作业题库 单选题? 1(4分).C语言源程序文件的缺省扩展名为( ? ). A.cpp B.exe C.obj D.C 参考答案:?D 2(4分).字符常量'\n'和 ...

  8. 奥鹏19春学期c语言作业答案,中石油(华东)《C语言》2013年春学期在线作业(三)...

    <C语言>2013年春学期在线作业(三) g1W奥鹏作业学习网(aopeng123.cn) 试卷总分:100g1W奥鹏作业学习网(aopeng123.cn) 单选题g1W奥鹏作业学习网(a ...

  9. e会学安庆师范大学c语言程序设计答案,宜春学院期末考试试卷C语言程序设计(4份,有答案)...

    内容简介: 宜春学院2006-2007学年第二学期期末考试试卷 C语言程序设计 试卷类型: A 一.单项选择题(每个小题2分,共40分) (1)对于一个正常运行的C程序,以下叙述中正确的是( ) A) ...

最新文章

  1. ubuntu黑屏解决办法
  2. 用fpda 写一个risc-v
  3. Redis监控技巧总结
  4. 推荐一款非常好用的java反编译工具(转)
  5. 在串口通信开发中实现自动查找串口端口的方法
  6. 美团数据库运维自动化系统构建之路
  7. 5 随窗口改变大小_C4D默认界面两个关于坐标轴的窗口有什么区别
  8. python如何安装第三方库
  9. 数据科学和人工智能技术笔记 十六、朴素贝叶斯
  10. ajax常见特效,用ajax实现正在载入的特效-Ajax编程
  11. oracle使用all关键字过滤,选择要进行过滤的抽样、线程、LWP 和 CPU
  12. netsuite和java_Netsuite - 如何根据项目和位置搜索填充子列表
  13. conda恢复默认源_误删文件?试试微软免费数据恢复软件「Windows File Recovery」
  14. Linux的磁盘系统和文件系统显示的文件大小为什么不一样(du指令和ls指令的区别)...
  15. Mysql + keepalived 实现双主热备读写分离
  16. python与机械教育初探_《Python与机器人程序设计》
  17. ceb怎么转换成word_如何将ceb文件转成word_ceb文件转成word的详细步骤-系统城
  18. uniapp获取当前城市编号和信息
  19. Vue3.0 + pdf.js 实现pdf预览
  20. 为什么要学习鸿蒙,HarmonyOS不只是操作系统

热门文章

  1. LIS(Longest Increasing Subsequence)最长上升(不下降)子序列
  2. Android面试题Service,Android面试题-IntentService源码分析
  3. CSDN Chrome插件来啦,听说可以提升开发者效率,我们先来研究一波
  4. NodeJS学习笔记—1.CommonJS规范
  5. 学习笔记-AngularJs(四)
  6. 课时85.层叠性(掌握)
  7. WEB页面的生命周期,DOMContentLoaded,load,beforeunload,unload
  8. Vue style里面使用@import引入外部css, 作用域是全局的解决方案
  9. css3制作广告栏效果的疑问?
  10. 文档声明和HTML样式表