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

下载

下载

第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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server

【阿里云ECS】(一)云服务器上安装RStudio-server最近注册了阿里云个人版,打算研究研究shiny部署问题。进了阿里云ECS因为是Ubuntu16.04的对于安装R和RStudio还是要学习实践一下的。第一步,安装R语言。我们使用apt的方式进行安装,步…

H5前期知识点总结 9月12日

知识点补充: 属性继承例子,color、font(font-size/style/family/weight) 1、浏览器的默认字体大小是16px,谷歌浏览器的最小字体是10px,其他浏览器的最小字体是12px。 2、通配符选择器 “*”,即选中body里所有的标签。 …

由原型模式引出的关于Cloneable接口和Object的clone()方法的一些问题

为什么要克隆快速到底 示例代码 1 class Resume2 {3 private String name;4 private String age;5 private String university;6 private String specialSkills;7 8 public Resume(String name, String age, String university, String specialSkills)…

Spring MVC:Ajax和JQuery

今天,我想演示如何将AJAX集成到Spring MVC应用程序中。 我将在客户端使用JQuery来发送请求和接收响应。 本教程将基于我以前关于Spring MVC和REST服务的教程之一。 在本文中,您将了解如何在异步请求的帮助下使Web应用程序更具交互性。 准备工作 我需要通…

C语言程序设计孙家啸第一版,广东年月自考各专业课程使用教材.doc

广东年月自考各专业课程使用教材附件2:广东2013年4月自考各专业课程使用教材序号课程代码课程名称使用教材作者出版社版次100009政治经济学(财经类)政治经济学(财经类)张雷声外语教学与研究出版社2012年版200012英语(一)大学英语自学教程(上册)高远高等教育出版社19…

手把手带你写一个JavaScript类型判断小工具

业务写了很多,依然不是前端大神,我相信这是很多‘入坑’前端开发同学的迷茫之处,个人觉得前端职业发展是有路径可寻的,前期写业务是一个积累过程,后期提炼总结,比如编程思想,父子类的原型继承&a…

【目录】《剑指Offer》Java实现

如题: 1) 找出数组中重复的数字 2) 不修改数组找出重复的数字 3) 二维数组中的查找 4) 替换空格 5) 从尾到头打印链表 6) 重建二叉树 7) 二叉树的下一个结点 8) 用两个栈实现队列 9) 斐波那契数列及青蛙跳台阶问题 10) 旋转数组的最小数字 11) 矩阵中的路…

yolov3之pytorch源码解析_springmvc源码架构解析之view

说在前面前期回顾sharding-jdbc源码解析 更新完毕spring源码解析 更新完毕spring-mvc源码解析 更新完毕spring-tx源码解析 更新完毕spring-boot源码解析 更新完毕rocketmq源码解析 更新完毕dubbbo源码解析 更新完毕netty源码解析 更新完毕spring源码架构更新完毕springmvc源码架…

Xstream将XML转换为javabean的问题

1.问题:Xstream is not security 解决方法:加上 2.问题:如果没有第二行代码,会出现xstream forbiddenclassexception 解决方法:加上第二行,其中参数是要进行解析的对象! 调用该方法:…

蚂蚁属性细微差别

每隔一段时间,我会想起Ant属性的一些细微差别 ,一旦忘记它们,在与Ant交互时会引起混乱。 特别是, Ant属性 通常是不可变的 (不包括Ant 1.8版本的 局部属性 ),并且在其首次设置时“永久”设置&am…

c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题 N个人围成一圈 - phpStudy...

详解约瑟夫环问题及其相关的C语言算法实现约瑟夫环问题N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。请按退出顺序输出每个退出人…

《从零构建前后分离的web项目》准备 - 前端了解过关了吗?

前端基础架构和硬核介绍 技术栈的选择 首先我们构建前端架构需要对前端生态圈有一切了解,并且最好带有一定的技术前瞻性,好的技术架构可能日后会方便的扩展,减少重构的次数,即使重构也不需要大动干戈,我通常选型技术栈…

联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...

前言&#xff1a;笔记本电脑&#xff0c;主要分为三种&#xff1a;轻薄本<全能本<游戏本。轻薄本&#xff0c;又称办公笔记本电脑&#xff0c;因为轻薄方便携带&#xff0c;通常用于移动办公使用。全能本&#xff0c;就是把轻薄本的集显变成了小独显&#xff0c;增加了独…

【BZOJ 1098】办公楼(补图连通块个数,Bfs)

补图连通块个数这大概是一个套路吧&#xff0c;我之前没有见到过&#xff0c;想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法&#xff0c;但进行巧妙的实现&#xff0c;就可以分析出它的上界不会超过 $O(n m)$。 接下来介绍一下这个技巧&#xff1a; 很显然一个…

Spring MVC:资源

我从博客读者那里收到的最常见的问题之一是如何在Spring MVC的应用程序中使用CSS和javascript文件。 因此&#xff0c;这是撰写有关Spring MVC中资源使用情况的文章的好机会。 通常&#xff0c;我将使用基于Java的配置方法。 如今&#xff0c;很难想象没有CSS和JavaScript文件…

map

头文件 首先要引入头文件 #include <map> . 并使用命名空间 using namespace std; 1、插入元素 用pair 或者 make_pair 均可&#xff0c;map键值不能重复。 map1.insert(pair<int,string>(123,"aaaaa")); //pair map1.insert(make_pair<int,string&…

c语言读文件空格间隔,c语言文件流实现按单个词读取(以空格、分号等作间隔)...

c语言文件流实现按词读取(以空格、分号等作间隔)1.基本描述在之前的作业中&#xff0c;认真编写代码&#xff0c;从中发现不少知识积累上的欠缺。编程中使用到的c语言文件读取&#xff0c;要求是按照获取到一个完整的词&#xff0c;并对其进行处理。写有java或c语言源程序的.tx…

山东专升本access知识点_全国各省份每年的专升本考试大纲啥时候公布?考纲公布之前你该做什么?...

?星标/置顶专升本招考下一个上岸的就是你最近小编在专升本招考后台收到很多同学的留言&#xff0c;大多同学都是看到好多省都公布了专升本考试政策和大纲&#xff0c;却迟迟不见自己所在的省份出&#xff0c;于是火急火燎地找到小编来问&#xff1a;XX省的考试大纲到底啥时候出…

2018091-2 博客作业

此作业的要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2101 1.建博客 在 cnblogs.com (博客园)建账号。博客地址&#xff1a;https://www.cnblogs.com/LY0503/ 2. 博客作业 &#xff08;1&#xff09;回想一下你曾经对计算机专业的畅想 当初你是如何做出选择…

观点|蚂蚁金服玉伯:我们是如何从前端技术进化到体验科技的?

小蚂蚁说&#xff1a;王保平&#xff0c;花名玉伯。熟悉前端和SeaJS的人一定对这个名字不陌生。作为前端领域的一枚大大大牛&#xff0c;他现在担任蚂蚁金服体验技术部负责人。本文&#xff0c;他分享了他从前端一路进阶升级到体验科技的个人思考&#xff0c;并详细介绍了体验科…