第2章 分治策略.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 分治策略 第2章 分治策略 问题:有16枚硬币,其中有一枚是伪造的,并且那枚伪造硬币的重量和真硬币的重量不同(假设比真币轻)。你能不能用最少的比较次数找出这枚伪造的硬币? 提供一台可用来比较两组硬币重量的仪器 解决问题: 1、两两比较 2、硬币分成两组,一次比较两组。一次比较后,可以舍弃完全是真币的那一组,只对另一组进行下一步的比较。 关键:将大问题分割成若干小问题,小问题与原有问题是完全类似的。 分治法(“分而治之”)。分治法在设计查找、排序等算法时很有效,最常用的分治法有二分法、归并法、快速排序等。 2.1 分治法的基本思想 分治法的基本思想 大问题分解为子问题,这些子问题互相独立且与原问题相同。 分别求解子问题。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。 合并解,自底向上逐步求出原来问题的解。 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 2.1 分治法的基本思想 分治法的适用条件 分治法所能解决的问题一般具有以下几个特征: 该问题的规模缩小到一定的程度就可以容易地解决; 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质(当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。 ) 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好。 2.1 分治法的基本思想 分治法的基本步骤 divide-and-conquer(P) {  if ( | P | = n0) adhoc(P); //解决小规模的问题  divide P into smaller subinstances P1,P2,...,Pk;//分解问题  for (i=1,i=k,i++)  yi=divide-and-conquer(Pi); //递归的解各子问题  return merge(y1,...,yk); //将各子问题的解合并为原问题的解 } 人们从大量实践中发现,在用分治法设计算法时,最好使子问题的规模大致相同。即将一个问题分成大小相等的k个子问题的处理方法是行之有效的。这种使子问题规模大致相等的做法是出自一种平衡(balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。 2.1 分治法的基本思想 分治法的复杂性分析 分治法将规模为n的问题分成k个规模为n/m的子问题去解。设分解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,则有(右上)。 通过迭代法求得方程解(右下) 。 补充:递归方程求解 常用方法: 代入法 迭代法 套用公式法 差分方程法 母函数法 补充:递归方程求解 1、代入法 先推测递归方程的显式解,然后用数学归纳法证明这一推测的正确性。那么,显式解的渐近阶即为所求。 例如: 补充:递归方程求解 2、迭代法 通过反复迭代,将递归方程的右端变换成一个级数,然后求级数的和,再估计和的渐近阶 。 另外可画递归树。 递归树

文档评论(0)

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

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

1亿VIP精品文档

相关文档