- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
离散完整103
10.3 递推方程的求解与应用 Hanoi 塔问题 递推方程的定义 二分归并排序算法的分析 快速排序算法的分析 递归树 分治算法分析的一般公式 Hanoi塔问题 算法设计与分析 算法 Hanoi (A,C,n) //*把n个盘子从A移到C 1. Hanoi (A,B,n-1) 2. move (A,C) //*把1个盘子从A移到C 3. Hanoi (B,C,n-1) 递推方程的定义 二分归并排序算法 算法Mergesort(A,s,t) //*排序数组A[s..t] 1. m?(t-s)/2 2. A?Mergesort(A,s,m) //*排序前半数组 3. B?Mergesort(A,s+1,t) //*排序后半数组 4. Merge(A,B) //*将排好序的A,B归并 实例 输入:[5, 1, 7, 8, 2, 4, 6, 3] 划分:[5, 1, 7, 8], [2, 4, 6, 3] 递归排序前半个数组: [5, 1, 7, 8] ? [1, 5, 7, 8] 递归排序后半个数组: [2 ,4, 6, 3] ? [2, 3, 4, 6] 归并: [1, 5, 7, 8] 和 [2, 3, 4, 6] 输出:[1, 2, 3, 4, 5, 6, 7, 8] 归并过程 求解递推方程 归纳法验证解 n=1代入上述公式得 W(1)=1 log1?1+1=0, 符合初始条件. 假设对于任何小于n的正整数t,W(t)都是正确的,将结果代入原递推方程的右边得 2W(n/2)+n?1 =2(2k?1 log2k?1?2k?1+1)+2k?1 =2k(k?1)?2k+2+2k?1=k2k?2k+1 = nlogn?n+1=W(n) 快速排序算法 算法 Quicksort(A,p,r) //*排序数组A[p..r] 输入:数组A[p..r] 输出:排好序的数组A 1. if p r 2. then q?Partition(A, p, r) //*以A[p]为准划分A 3. A[p]?A[q] //*A[p]与A[q]交换 4. Quicksort(A,p,q-1) //*对子数组递归排序 5. Quicksort(A,q+1,r) 划分过程 Partition(A,p,r) 1. x ? A[p] 2. i ? p 3. j ? r+1 4. while true do 5. repeat j ? j ?1 6. until A[ j ]x //*右边第1个比A[p]小的A[j] 7. repeat i ?i +1 8. until A[ i ]x //*左边第1个比A[p]大的A[i] 9. if i j 10. then A[ i ] ? A[ j ] //*交换A[j]与A[i] 11. else return j 27 99 0 8 13 64 86 16 7 10 88 25 90 平均时间复杂度 T(n)为对数组的各种输入平均做的比较次数 将输入按照A[p]在排好序后的位置分别为1, 2, …, n进行分类. 假设每类输入出现的概率相等 A[p]处位置1,划分后子问题规模分别为0和n-1 … A[p]处位置n,划分后子问题规模分别为n-1和0 n 种输入的平均复杂度为 递推方程求解 迭代 递归树 分治算法的常用递推公式 迭代 Case2 d(n)=cn 应用实例 二分归并 二分查找 * * Hanoi塔问题: 从A柱将这些圆盘移到C柱上去. 如果把一个圆盘从 一个柱子移到另一个柱子称作 1 次移动,在移动和放置 时允许使用B柱,但不允许大圆盘放到小圆盘的上面. 问 把所有的圆盘的从A移到C总计需要多少次移动? 移动n个盘子的总次数为T(n) ,得到递推方程 T(n) = 2T(n?1) +1. T(1)=1. 可以求得 T(n)=2n ? 1 1秒钟移动1次,64个盘子大约需要5000亿年 定义10.5 设序列a0, a1, …, an, …
您可能关注的文档
最近下载
- 青少年趣味编程(Python)第十一节多分支选择if-elif 课后服务.pptx VIP
- 金蝶云星空+V7.6产品培训_财务_税务管理.pptx VIP
- 药品生产质量管理题库(附答案).docx VIP
- 山东省青岛市李沧区九年级(上)期末化学试卷 (2).doc VIP
- 办公楼保洁项目重点难点及解决方案.pdf VIP
- 卫生院职能部门对药物临床应用进行监测与评价,有持续改进的成效.docx VIP
- 满足顾客需求培训(ppt 39页).ppt VIP
- 22S702 室外排水设施设计与施工-钢筋混凝土化粪池图集.pdf VIP
- 青少年趣味编程(Python)第十节 if-else条件语句 课后服务.ppt VIP
- 教学课件24 稀硝酸生产.ppt VIP
原创力文档


文档评论(0)