- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lecture归纳与递归.ppt
ACM程序设计第四讲 归纳与递归 归纳法 1 引言 如果我们知道如何求解规模为n-1的问题,那么我们的任务就化为如何把解法扩展到规模为n的问题 2 选择排序 对数组a[1…n]按从小到大顺序排序 用归纳法:假设我们已经知道如何对n-1个数排序,则: 要对a[1…n]排序 (1)求a[1…n]的最小值a[j]; 2 a[1] a[j]; 3 对a[2…n]排序 算法1 selectionSort int a[ ],int n sort a,1,n ;//对a[1...n]排序 sort int a[ ],int i,int n (1)j min a,i,n ; //求a[i…n]中最小值的下标j; 2 a[i] a[j]; 3 if i+1 n sort a, i+1, n ; 以上函数中,数组a的首地址,和数组元素个数n,从何而来? 方法一: 用参数传递,如算法5.1 Sort int a[],int i,int n 方法二: 把数组a和n定义为全局变量,则在函数Sort int i 中可以使用。 方法三:定义类,把a和n作为类的成员变量,函数Sort int i 做为类的成员函数。 3 插入排序 问题:如何在一个已有序的序列a[1...n]中插入一个新元素x,使其仍然有序? 简单! 首先检查是否有足够空间,然后,用一个for循环实现新元素的插入 ,....... 用归纳法思想:假设我们已经知道如何对n-1个元素排序,则 要对a[1…n]排序 (1)对a[1...n-1]排序; (2)将a[n]插入a[1...n-1]的适当位置上,使其仍然有序。 要对a[1…i]排序 (1)对a[1...i-1]排序; (2)将a[i]插入a[1...i-1]的适当位置上,使其仍然有序。 算法2 sort int a[], int i //本函数对a[1...i]排序 if i 1 sort a, i-1 ; //对a[1...i-1]排序 insert a, i-1, a[i] ; ;//将a[i]插入已排好序的a[1...i-1]中 4 整数幂 设计一个求x的n次幂的算法 方法一:对x用迭代自乘n次 for i 1,fact 1;i n;i++ fact fact*x; 其时间复杂度为Θ n 能否设计一个更高效的算法? 用归纳法分析: 假设已经知道如何求xn/2 令 如果n 是偶数,那么xn xm 2; 否则 xn xm 2x 算法3 Exp float x, int n //求 xn Power x,n ; Power float x,int m (1) 如果m 0 则返回y 1; 否则 (2)y Power x,m/2 3 y y*y; 4 如果m为奇数,则y xy; (5)返回y; 算法3a power float x,int m if m 0 return 1; else y power x,m/2 y y*y; if m%2! 0 y xy; return y; 方法二:重复平方法 1 令n的二进制数是dkdk-1...d0。 2 y赋初值1, 3 从左到右扫描二进制数字: 如果当前的二进制数字为0,则y y*y; 否则,y y*y*x 13 1 1 0 1 2 d3 1, d2 1 , d1 0 , d0 1 13 1 ×23+ 1 × 22+ 0 × 21 + 1 X13 x23 × x22 × x1 (需8次乘法) x 2 x 2 2x (需5次乘法) 算法4 Exp float x,int n y 1; 将n 用二进制数dkdk-1...d0表示。 for j k ; j 0;j-- y y*y; if dj 1 y y*x; return y; 6 生成排列 先讲一个故事,三个小孩玩“毛毛虫游戏”,为了公平,她们要不停的换次序,要尝试完所有的排列,有多少种排列,四个人呢?五个人呢? 方法一:指定排头法 问题:对于数1,2,...,n生成所有的排列 分析:可用数组存储这n个元素。 初始状态下,a[i] i, i 1…n 若n 3,则有(1)1为排头的所有排列:1 2 3、1 3 2 (2)2为排头:2 1 3、2 3 1 (3)3为排头:2 1 3、2 3 1 对n个数的情况,归纳分析如下: 假定可以生成n-1个数的所有排列,那么就可以扩展生成n个数的排列。方法如下: (1)生成数2,3,...,n的所有排列,并在每个排列前加上数1; (2)生成数1,3,...,n的所有排列,并在每个排列前加上数2; ....
您可能关注的文档
最近下载
- 高中生跨学科项目学习的实践研究教学研究课题报告.docx
- 钢轨探伤水平裂纹和斜裂纹波形及图像识读.pptx VIP
- 外文资料Medicare andMedicaid at 50 Years Perspectives of Beneficiaries, Health Care Professionals and Institutions, and Policy Makers.pdf VIP
- 机电安全管理常识培训课件(ppt 86页).ppt
- DB37_T 5232-2022城镇道路添加剂型抗车辙沥青混合料技术标准.pdf
- 民族团结铸牢中华民族共同体意识.pptx VIP
- 知到智慧树网课:大学美育(长春工业大学)章节测试满分答案.doc VIP
- 胸椎骨骨折术后健康宣教ppt.pptx
- (应该是终稿)斜道施工方案.doc
- 2022年风电项目合作开发协议.doc VIP
文档评论(0)