分治算法讲解.pdf

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
. 分治算法 一:基本概念(分而治之) 分治就是把一个复杂的问题分成两个或更多的相同或相似的子问题, 再把子问题分成 更小的子问题 ……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 比如:二分查找,归并排序,快速排序,树的遍历等等 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小, 越容易直接求解,解题所需的计算时间也越少。例如,对于 n 个元素的排序问题,当 n=1 时,不需任何计算。 n=2 时,只要作一次比较即可排好序。 n=3 时只要作 3 次比较即可, …。 而当 n 较大时, 问题就不那么容易处理了。 要想直接解决一个规模较大的问题, 有时是相当 困难的。 二:基本思想 分治设计思想: 将一个大的问题,分解成一个个小的,相同类型的问题,然后逐个 击破各个小问题,最后将小问题逐步合并,得到最终的解。 (可能会用到递归,大问题里包 含小问题,找到规律然后解决) 分治基本策略: 对于一个规模为 n 的问题,若该问题可以容易地解决(比如说规模 n 较小) 则直接解决, 否则将其分解为 k 个规模较小的子问题, 这些子问题互相独立且与原问 题形式相同, 递归 地解这些子问题,然后将各子问题的解合并得到原问题的解。 三:分治使用情况 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为相同类型的小问题(前提) 3) 利用该问题分解出的子问题的解可以合并为该问题的解;(关键) 4) 该问题所分解出的各个子问题是相互独立的, 即子问题之间不包含公共的子子问题。 第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了 第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。 四:基本步骤 (1)划分:把问题的实例划分成子问题 (2 )求解:若是子问题比较简单,就直接解决,否则递归求解子问题 (3)合并:合并子问题的解得到原问题的解 课前引导: 一:分段函数 例如:高中数学中的分段函数也是类似分治思想的体现,如看图求 y 关于 x 的表达式。一个分段函数,反映的是 x 与 y 的关系,简单来说,就是在 R 的范 围内将 y 的表达式表示出来, 那么这时候利用分治的思想, 将 R区间划分为小区 间,然后分别求出各个小区间的表达式, 最后合并起来, 完成 y 关于 x 的表达式 的求解 二:大整数乘法 123 345 678 * 3 = 370 037 034 在这里我们可以这样写: . . 123 * 3 = 369 345 * 3 = 1035 678 * 3=2034 组合在一起是 369 1035 2034 。 对比发现,当使用千进制的时候结果变成了 370037034 首先他满足: 第一条件:分解到一定小规模的时候可以解决 第二条件:每个小规模都具有最佳子结构(在变量范围内,可以用来表示) 第三条件:每个小问题可以通过合并在一起形成

文档评论(0)

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

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

1亿VIP精品文档

相关文档