网站大量收购独家精品文档,联系QQ:2885784924

新概念c语言程序策画4.ppt

  1. 1、本文档共125页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计策略 4.1 分治策略 4.2 回溯策略 4.3 贪心策略 4.4 分枝界定策略 4.5 动态规划 4.1 分治策略 4.1.1 二分查找 4.1.2 快速排序 4.1.3 自行车带人问题 4.1.1 二分查找 一、问题描述 在N个已排序(设为从小到大)的数据(数或字符串),查询某一个数据:如果找到了,就指出其在N个数据中的位置;否则给出无该数据的信息,如给出“-1”。 二、算法分析 三、程序 三、程序(续) 四、说明 五、编程练习 4.1.2 快速排序 一、快速排序的基本思想: 二、算法框架 基本思路 划分函数 三、程序 三、程序(续) 三、程序(续) 四、运行结果 五、编程练习 4.1.3 自行车带人问题 一、问题描述 二、算法分析 1. 基本思路 2. 用二分法试探确定C 函数框架 3. 使用优选法代替二分法 三、程序 四、运行结果 五、编程练习 五、编程练习(续) 五、编程练习(续) 4.2 回溯算法 经常玩象棋的人,最不愿意对手悔棋。所谓悔棋,就是下棋下到感觉情况不妙时,要退回到前一步的状态上重新考虑。有时,退一步不行,还可能要退回几步。这种不良的棋风,用到解题上却倒是一种非常有用的方法,称之为回溯(back tracking)。它是一种系统的地穷举问题解答的方法。 使用回溯策略一般有如下的过程: 回溯策略的过程: (1)为问题定义一个解空间( solution space),这个空间必须至少包含问题的一个解(可能是最优的); (2)以某个已知解(输入)为根,把解空间组织成树结构; (3)从树根出发,按照深度优先方法,对解空间的每个状态进行搜寻,直到找到需要的解或最终得到没解的结论为止; (4)在搜寻过程中,发现在所在的支路上无法再向前推进时,即返回到前一个节点,找没有搜寻过的支路进行搜寻。 回溯过程可以用递归方法实现,也可以用迭代方法实现。 4.2.1 迷宫问题 一、问题 二、克里特方法 1. 基本思路 2. 迷宫的表示——数据结构设计 3. 算法 4. 程序 4. 程序(续) 4. 程序(续) 5. 执行结果 三、使用堆栈组织搜索过程 1. 基于堆栈的回溯 与克里特算法相比 2. 定义数据结构 3. 算法设计初步 程序框架 4. 程序设计 (1)push操作和pop操作 (1)push操作和pop操作(续) (2)栈顶节点扩展函数设计 (2)栈顶节点扩展函数设计(续) (2)栈顶节点扩展函数设计(续) (2)栈顶节点扩展函数设计(续) (2)栈顶节点扩展函数设计(续) (3)输出函数 四、测试程序 五、编程练习 五、编程练习(续) 五、编程练习(续) 五、编程练习(续) 4.3 贪心策略 贪心策略(greedy method)是一种企图通过局部最优达到全局最优的策略,犹如登山,并非一开始就选择出一条到达山顶的最佳路线,而是首先在视力能及的范围内,看中一个高处目标,选择一条最佳路径;然后在新的起点上,再选择一条往上爬的最佳路径;……;企图通过每一阶段的最佳路径,构造全局的最佳路径。也就是说,贪心策略总是不断地将原问题变成一个相似、而规模更小的问题,然后做出当前看似最好的——局部意义上的最优选择。 显然,贪心策略不能保证对所有的问题求得的最后解都是最优的,特别是不能用来求最大或最小解问题。但是许多情况下,用贪心策略可以得到最优解的接近结果。因此,初学者应当通过分析和经验积累,了解哪些问题适合用贪心策略,并掌握如何选择合适的贪心策略。 4.3.1 旅行费用问题 一、问题描述 二、解题策略 程序框架 1. 数据结构 2. 贪心过程 三、程序的实现 三、程序的实现(续) 四、程序测试 五、编程练习 五、编程练习(续) 4.3.2 删数问题 一、问题描述 二、解题策略 1. 长整数表示 2. 选择贪心策略 三、算法设计 删除第i个数字的函数 四、说明 五、程序及其测试 1. 程序 程序(续) 2. 测试结果 六、编程练习 六、编程练习(续) 4.4 分枝界定策略 分枝定界(branch and bound)是一种缩小搜索解空间、加速搜索进程的方法。在搜索问题的解空间树时,它给每一个活节点只有一次机会成为扩展节点。活节点一旦成为扩展节点就一次性产生其所有的儿子节点。但是,并不把所有儿子节点都加入活节点表中,要把导致不可行解或非最优解的儿子节点舍弃(剪枝),把剩下的儿子节点加入活节点表中。然后,从活节点表中取下一个节点进行上述扩展操作。如此继续,直到找到要求的解或活节点表为空。 使用分枝定界法的关键点 4.4.1 最小耗费问题 一、问题 二、FIFO分枝定界算法框架 三、程序描述 1. 费用单源矩阵的描述 2. 节点的

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档