- 1、本文档共76页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第2章递归与分治策略;学习要点:
理解递归的概念。
掌握设计有效算法的分治策略。
通过下面的范例学习分治策略设计技巧。
(1)二分搜索技术;
(2)大整数乘法;
(3)Strassen矩阵乘法;
(4)棋盘覆盖;
(5)合并排序和快速排序;
(6)线性时间选择;
(7)最接近点对问题;
(8)循环赛日程表。
;分治法概述;分治算法总体思想;算法总体思想;算法总体思想;算法总体思想;2.1递归的概念;2.1递归的概念;2.1递归的概念;2.1递归的概念;2.1递归的概念;2.1递归的概念;;2.1递归的概念;2.1递归的概念;例3Ackerman函数;例3Ackerman函数;例3Ackerman函数;例3Ackerman函数;2.1递归的概念;2.1递归的概念;2.1递归的概念;2.1递归的概念;2.1递归的概念;2.1递归的概念;(2)q(n,m)=q(n,n),m?n;
最大加数n1实际上不能大于n。因此,q(1,m)=1。
;(2)q(n,m)=q(n,n)m=n;m不能大于n。;2.1递归的概念;2.1递归的概念;在问题规模较大时,较难找到一般的方法,因此我们尝试用递归技术来解决这个问题。
;递归小结;解决方法:
在递归算法中消除递归调用,使其转化为非递归算法。
1.采用一个用户定义的栈来模拟系统的递归调用工作栈。该方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。
2.用递推来实现递归函数。
3.通过变换能将一些递归转化为尾递归,从而迭代求出结果。
后两种方法在时空复杂度上均有较大改善,但其适用范围有限。;尾递归:
尾递归是指一个函数的最后一个操作是递归调用自身。在尾递归中,递归调用是函数的最后一条语句,不会再有其他的操作。
尾递归的特点是,每次递归调用时不需要保存其他状态信息,因为在递归返回时不再需要这些信息。这意味着尾递归函数可以被优化为迭代形式,而不会导致堆栈溢出。
例:阶乘递归;2.2分治法的基本思想
分治法的适用条件;divide-and-conquer(P)
{
if(|P|=n0)adhoc(P);//解决小规模的问题
dividePintosmallersubinstancesP1,P2,...,Pk;//分解问题
for(i=1,i=k,i++)
yi=divide-and-conquer(Pi);//递归的解各子问题
returnmerge(y1,...,yk);//将各子问题的解合并为原问题的解
};2.2分治法的基本思想
分治法的复杂性分析;2.3二分搜索技术;分析:如果n=1即只有一个元素,则只要比较这个元素和x就可以确定x是否在表中。因此这个问题满足分治法的第一个适用条件;分析:比较x和a的中间元素a[mid],若x=a[mid],则x在L中的位置就是mid;如果xa[mid],由于a是递增排序的,因此假如x在a中的话,x必然排在a[mid]的前面,所以我们只要在a[mid]的前面查找x即可;如果xa[i],同理我们只要在a[mid]的后面查找x即可。无论是在前面还是后面查找x,其方法都和在a中查找x一样,只不过是查找的规模缩小了。这就说明了此问题满足分治法的第二个和第三个适用条件。;2.3二分搜索技术;2.4大整数的乘法;2.4大整数的乘法;2.4大整数的乘法;2.4大整数的乘法;2.5Strassen矩阵乘法;2.5Strassen矩阵乘法;2.5Strassen矩阵乘法;2.5Strassen矩阵乘法;2.5Strassen矩阵乘法;2.6棋盘覆盖;2.6棋盘覆盖;2.6棋盘覆盖;2.6棋盘覆盖;2.7合并排序;2.7合并排序;2.7合并排序;2.7合并排序;2.8快速排序;2.8快速排序;templateclassType
intRandomizedPartition(Typea[],intp,intr)
{
inti=Random(p,r);
Swap(a[i],a[p]);
returnPartition(a,p,r);
};2.8快速排序;2.9线性时间选择;2.9线性时间选择;2.9线性时间选择;将n个输入元素划分成?n/5?个组,每组5个元素,只可能有一个组不是5个元素。用任意一种排序算法,将每组中的元素排好序,并取出每组的中位数,共?n/5?个。
递归调用select来找出这?n/5?个
您可能关注的文档
- 20-Diffie-Hellman密钥交换的中间人攻击实现.doc
- 课程设计说明书模板参考-2017711-y.doc
- 1-古典密码演示工具的实现.doc
- 2-古典密码破解的实现 .doc
- 3-PKCS5填充算法的实现.doc
- 4-分组密码工作模式的实现.doc
- 5-文件哈希计算器的实现.doc
- 6-基于HMAC算法的消息认证实现.doc
- 7-个人密码管理系统的实现.doc
- 8-用户密码管理系统的实现.doc
- 辽宁省大连市甘井子区2023-2024学年八年级下学期5月期中物理试题【含答案,解析】.pdf
- 2025年江西电力职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年江西科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
- 辽宁省大连市金普新区2022-2023学年八年级下学期期中物理试题【含答案,解析】.pdf
- 2025年江西环境工程职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年江西环境工程职业学院高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年江西环境工程职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年江西洪州职业学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
- 2025年江西现代职业技术学院高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年江西现代职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
文档评论(0)