- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2022-8-31
1
本章要点
5.1 概 述
5.2 递 归
5.3 排序问题中的分治法
5.4 组合问题中的分治法
5.5 几何问题中的分治法
5.6 实验项目——最近对问题
第1页/共97页
2022-8-31
2
5.1.1 分治法的设计思想
5.1.2 分治法的求解过程
概 述
第2页/共97页
2022-8-31
3
将一个难以直接解决的大问题,划分成一些规模较小的子问题,以各个击破,分而治之。更一般地说,将要求解的原问题划分成k个较小规模的子问题,对这k个子问题分别求解。如果子问题的规模仍然不够小,则再将每个子问题划分为k个规模更小的子问题,如此分解下去,直到问题规模足够小,很容易求出其解为止,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解。
分治法的设计思想:
概述-分治法思想
第3页/共97页
2022-8-31
4
2. 独立子问题:各子问题之间相互独立,这涉及到分治法的效率,如果各子问题不是独立的,则分治法需要重复地解公共的子问题。
1. 平衡子问题:最好使子问题的规模大致相同。也就是将一个问题划分成大小相等的k个子问题(通常k=2、4,…),这种使子问题规模大致相等的做法是出自一种平衡(Balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。
启发式规则:
概述-分治法思想
第4页/共97页
2022-8-31
5
分治法的典型情况
概述-分治法思想
第5页/共97页
2022-8-31
6
5.1.1 分治法的设计思想
5.1.2 分治法的求解过程
概 述
第6页/共97页
2022-8-31
7
一般来说,分治法的求解过程由以下三个阶段组成:
(1)划分:既然是分治,当然要把规模为n 的原问题划分为 k 个规模较小的子问题,并尽量使这 k 个子问题的规模大致相同。
(2)求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。
(3)合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。
概述-分治法的求解过程
第7页/共97页
2022-8-31
8
概述-分治法的求解过程
第8页/共97页
2022-8-31
9
例:计算an,应用分治技术得到如下计算方法
分析时
间性能
第9页/共97页
2022-8-31
10
讨论
a^n的蛮力法计算复杂度为O(n),因为:
……
a=1;
For (i=1; i=n;i++)
{a=a*a;}
……
A^n的通用分治递推式主定理(第一章中),其复杂度为O(nlog2n)
概述-分治法的求解过程
结论:不是所有的分治法都比简单的蛮力法更有效。
第10页/共97页
2022-8-31
11
本章要点
5.1 概 述
5.2 递 归
5.3 排序问题中的分治法
5.4 组合问题中的分治法
5.5 几何问题中的分治法
5.6 实验项目——最近对问题
第11页/共97页
2022-8-31
12
4.2 递归
5.2.1 递归的概念
5.2.2 递归函数的运行轨迹
5.2.3 递归函数的内部执行过程
第12页/共97页
2022-8-31
13
递归的概念
直接或间接地调用自身的算法称为递归算法(Recursion)。用函数自身给出定义的函数称为递归函数。是一种描述问题和解决问题的基本方法。
由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。
第13页/共97页
2022-8-31
14
递归的概念
分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。
递归有两个基本要素:
⑴ 边界条件:确定递归到何时终止;
⑵ 递归模式:大问题是如何分解为小问题的。
递归的几个实例
第14页/共97页
2022-8-31
15
例1 阶乘( Factorial )函数
阶乘函数可递归地定义为:
边界条件
递归方程
递归的概念
第15页/共97页
2022-8-31
16
递归的概念
第16页/共97页
2022-8-31
17
例2 Fibonacci斐波纳契兔子数列
无穷数列1,1,2,3,5,8,13,21,34,55,…,被称为Fibonacci数列。它可以递归地定义为:
边界条件
递归方程
第n个Fibonacci数可递归地计算如下:
public static int fibonac
文档评论(0)