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

第2章 递归与分治策略-wyg [自动保存的].pptx

第2章 递归与分治策略-wyg [自动保存的].pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共76页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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?个

文档评论(0)

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

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

1亿VIP精品文档

相关文档