- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 归纳法
第5章 归 纳 法 上海第二工业大学 温敬和 jhwen@it.sspu.cn 2008年3月31日 5.1 引言 5.2 两个简单的例子 5.2.1 选择排序 5.2.2 插入排序 5.3 基数排序 5.4 整数幂 5.5 多项式求值(Horner规则) 5.6 生成排列 5.6.1 第一种算法 5.6.2 第二种算法(略) 5.7 寻换多数元素(略) 5.1 引言 5.3 基数排序㈠基数排序算法 5.4 整数幂 ㈠概述 求实数x的n次幂的直接方法是: 5.5 多项式求值(Horner规则) 若直接对多项式 P3(x) = a3x3+a2x2+a1x+a0 求值,则需3+2+1=6次乘法和3次加法。 * 考虑一个带有参数n的问题,在问题的实例中n通常表示事物的数目。 当我们寻找这类问题解时,可从求解一个带有小一点参数的相同问题开始,例如参数为n-1,n/2等。然后再把解推广到包含n个物体的实例。这样,问题的解决就比较容易,这种方法是基于众所周知的数学归纳法。 在本章的算法中,递归调用仅书写一次,这样的递归称为尾递归。在大多数情况下,尾递归可以方便地转换为非递归过程(迭代过程)。 5.2 二个简单的例子 5.2.1 选择排序法 对数组A[1..n]中n个元素的排序,可视为在n个元素中选择一个最小的数,将其和A[1]交换,然后对A[2..n]中n-1个元素排序。 Selection(1) //A[1..n] SelectionSortRec(2) //A[2..n] 对数组A[2..n]中n-1个元素的排序,可视为在n-1个元素中选择一个最小的数,将其和A[2]交换,然后对A[3..n]中n-2个元素排序。 Selection(2) //A[2..n] SelectionSortRec(3) //A[3..n] …… 对数组A[n-1..n]中2个元素的排序,可视为在2个元素中选择一个最小的数,将其和A[n-1]交换。 Selection(n-1) //A[n-1..n] SelectionSortRec(n) //A[n..n] 因余下元素仅为1个,排序终止。 这样,由归纳法得到选择排序法递归形式的算法SelectionSortRec。 算法5.1 SelectionSortRec(参见 91) 输入:n个元素的数组A[1..n] 输出:按升序排列的数组A[1..n] 1. SelectionSortRec(1) 过程 0. procedure SelectionSortRec(i) 1. if in then 2. Selection(i) 3. SelectionSortRec(i+1) 4. end if 5. end procedure 1. SelectionSortRec(1) 过程 0. procedure SelectionSortRec(i) 1. if in then 2. Selection(i) //过程执行后,A[1..i]有序。 3. SelectionSortRec(i+1) //对A[i+1..n]中的元素进行排序 4. end if 5. end procedure 过程Selection (参见 Page 8) 输入:A[i..n] 输出:A[i..n](A[i]为A[i..n]中的最小的数) 0. procedure Selection(i) 1. k←i 2. for j←i+1 to n 3. if A[j]A[k] then k←j 4. end for 5. if k≠i then 交换A[i]和A[k] 6. end procedure 这个递推式的解为: 由此可得下列递推式 令n表示数组元素的个数,C(n)表示元素比较次数,显然C(1)=0。 过程Selection第一次被调用时i=1。因数组有n个元素,故元素总的比较次数为:n-1次加上对子数组A[2..n]排序比较次数。 过程Selection第二次被调用时i=2,因子数组有n-1个元素,故元素总的比较次数为:n-2次加上对子数组A[3..n]排序比较次数。 5.2.2 插入排序 令子数组A[1..2]为算法的输入。若A[2]较A[1]为小,则将A[1]移入A[2],A[2]插入A[1];否则不进行任何操作。 令数组A[1..n]为算法的输入,可归纳假设子数组A[1..n-1]中的n-1个元素已经有序。 我们只要把A[n]插入到
原创力文档


文档评论(0)