- 1、本文档共112页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五讲数组与广义表
回溯法是一种“穷举”方法。其基本思想为: 假设问题的解为 n 元组 (x1, x2, …, xn), 其中 xi 取值于集合 Si。 n 元组的子组 (x1, x2, …, xi) (in) 称为部分解,应满足一定的约束条件。 对于已求得的部分解 (x1, x2, …, xi) , 若在添加 xi+1?Si+1 之后仍然满足约束条件, 则得到一个新的部分解 (x1, x2, …, xi+1) , 之后继续添加 xi+2?Si+2 并检查之。 例一、皇后问题求解 设四皇后问题的解为 (x1, x2, x3, x4), 其中: xi (i=1,2,3,4) ? Si={1, 2, 3, 4} 约束条件为:其中任意两个xi 和xj不能位于棋盘的同行、同列及同对角线。 按回溯法的定义,皇后问题求解过程为: 解的初始值为空;首先添加 x1=1, 之后添加满足条件的 x2=3,由于对所有的 x3?{1,2, 3, 4}都不能找到满足约束条件的部分解(x1, x2, x3), 则回溯到部分解(x1), 重新添加满足约束条件的x2=4, 依次类推。 void Trial(int i, int n) { // 进入本函数时,在n×n棋盘前i-1行已放置了互不攻 // 击的i-1个棋子。现从第 i 行起继续为后续棋子选择 // 满足约束条件的位置。当求得(in)的一个合法布局 // 时,输出之。 if (in) 输出棋盘的当前布局; else for (j=1; j=n; ++j) { 在第 i 行第 j 列放置一个棋子; if (当前布局合法) Trial(i+1, n); 移去第 i 行第 j 列的棋子; } } // trial 回溯法求解的算法一般形式: void B(int i, int n) { // 假设已求得满足约束条件的部分解(x1,..., xi-1),本函 //数从 xi 起继续搜索,直到求得整个解(x1, x2, … xn)。 if (in) else while ( ! Empty(Si)) { 从 Si 中取 xi 的一个值 vi?Si; if (x1, x2, …, xi) 满足约束条件 B( i+1, n); // 继续求下一个部分解 从 Si 中删除值 vi; } } // B 综合几点: 1. 对于含有递归特性的问题,最好设计递归形式的算法。但也不要单纯追求形式,应在算法设计的分析过程中“就事论事”。例如,在利用分割求解设计算法时,子问题和原问题的性质相同;或者,问题的当前一步解决之后,余下的问题和原问题性质相同,则自然导致递归求解。 2. 实现递归函数,目前必须利用“栈”。一个递归函数必定能改写为利用栈实现的非递归函数;反之,一个用栈实现的非递归函数可以改写为递归函数。需要注意的是递归函数递归层次的深度决定所需存储量的大小。 3. 分析递归算法的工具是递归树,从递归树上可以得到递归函数的各种相关信息。例如:递归树的深度即为递归函数的递归深度;递归树上的结点数目恰为函数中的主要操作重复进行的次数;若递归树蜕化为单支树或者递归树中含有很多相同的结点,则表明该递归函数不适用。 例如: n=3的梵塔算法中主要操作move的执行次数可以利用下列递归树进行分析: move(3, a, b, c) move(2, a, c, b) move(2, b, a, c) move(1, a, b, c) move(1, c, a, b) move(1, b, c, a) move(1, a, b, c) 上图递归树的中序序列即为圆盘的移动操作序列。 又如: 求n!的递归函数的递归树已退化为一个单枝树;而计算斐波那契递归函数的递归树中有很多重复出现的结点。 n n-1 1 0 。。。 F5 F4 F3 F3 F2 F2 F1 F1 F0 F1 F0 。。。 4. 递归函数中的尾递归容易消除。 例如:先序遍历二叉树可以改写为: void PreOrderTraverse( BiTree T) { While (T) { Visit(T-data); PreOrderTraverse(T-lchild); T = T-rchild; }
您可能关注的文档
- 第二节欧洲主要旅游客源国与目的地国.ppt
- 第二节 生物对环境的适应与影响.ppt
- 第二节来自石油与煤的两种基本化工原料1.ppt
- 第二章认识世界与改造世界-cmn.ppt
- 第二讲 国共合作的形成与国民革命的开展.ppt
- 第二节定价方法与技巧策划.ppt
- 第二节牙髓变性与坏死.ppt
- 第二讲 图形设备与硬件.ppt
- 第二讲 心理咨询的对象与原则.ppt
- 第二节北方地区与南方地区-2.ppt
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
最近下载
- 2023-2024学年七年级上册语文期末专项热点必刷100题专题11记叙文阅读(含答案).docx VIP
- 《隧道施工质量监理要点》.docx VIP
- 《Java语言程序设计基础教程》习题解答26752指导.doc
- 医务管理系统建设方案.doc VIP
- 小学英语二年级上册英语课件-UNIT FOUR THERE ARE MANY ANIMALS lesson 15 北京版.pptx VIP
- 苏教版数学五年级上册小数除以小数(课件).pptx
- 病房(医嘱)管理系统.doc
- 学前儿童急症救助与突发事件应对 22 模块四任务4 火灾的应急处理与预防.pptx VIP
- 光伏项目高处坠落的风险点及控制措施(A).pptx VIP
- 急性脊髓炎的护理ppt课件.pptx
文档评论(0)