- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 分治策略(Divide and Conquer);2.1.1 两个熟悉的例子;时间复杂度分析;2.1.2 分治算法的一般性描述;分治策略的算法分析工具:递推方程
两类递推方程
求解方法
第一类方程:迭代法、换元法、递归树、尝试法
第二类方程:迭代法、递归树、主定理
;递推方程的解;A 报告;分治算法;伪码描述;例2.2 幂乘计算;计算 Fibonacci 数;2.3 改进分治算法的途径;例2.4 A,B 为两个n 阶矩阵,n =2k, 计算 C = AB.
传统算法 W(n)= O(n3)
分治法 将矩阵分块,得
其中
递推方程 W(n) = 8 W(n/2) + cn2
W(1) = 1
解 W(n) = O(n3).;Strassen 矩阵乘法;;;右边每个小方格至多1个点,每个点至多比较对面的6个点,
距离??的2个点(左右各1个)其纵坐标位置相差不超过12,
检查1个点是常数时间,O(n) 个点需要O(n)时间;;预排序的处理方法 ;实例:递归中的拆分;典型实例分析;算法Partition(A,p,r)
输入:数组A[p,r]
输出?:j,A的首元素在排好序的数组中的位置
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
7. repeat i ? i +1
8. until A[ i ] x
9. if i j
10. then A[ i ] ? A[ j ]
11. if i=j?1 then return j
12. else return j ;划分实例;最坏情况
;均衡划分;假设输入数组首元素排好序后的正确位置处在1,2,…,n 各种
情况是等可能的,概率为1/n.
利用差消法求得 T(n)=O(nlogn); 问题:从给定的集合 L 中选择第 i 小的元素
不妨设 L 为 n 个不等的实数
i=1, 称为最小元素;
i=n,称为最大元素;
i=n-1,称为第二大元素;
位置处在中间的元素,称为中位元素
当n为奇数时,中位数只有1个,i=(n+1)/2;
当n为偶数时,中位数有2个,i=n/2, n/2+1. 也可以规
定其中的一个
;算法 Findmax
输入:n 个数的数组 L
输出:max, k
1. max?L[1];k?1
2. for i?2 to n do
3. if max L[i]
4. then max?L[i]
5. k?i
5. return max, k
算法最坏情况下的时间复杂度 W(n)=n?1;选最大和最小;找第二大;算法 FindSecond
输入:n个数的数组L
输出:Second
1.k ?n
2.将 k 个元素两两一组,分成 ?k/2? 组
3.每组的2个数比较,找到较大的数
4.将被淘汰的较小的数在淘汰它的数所指向的链表中
做记录
5.if k 为奇数 then k ? ?k/2? +1
6.else k ? ?k/2?
7.if k1 then goto 2
8.max ?最大数
9.Second ? max 的链表中的最大;命题2.2 max在第一阶段的分组比较中总计进行了?logn?次比较.
证 设本轮参与比较的有 t 个元素,经过分组淘汰后进入下一轮的元素数至多是 ?t/2? . 假设 k 轮淘汰后只剩下一个元素 max,利用
? ?t/2? /2? = ?t/22?
的结果并对 k 归纳,可得到 ?n/2k?=1.
若 n=2d,那么有 k=d=logn=?logn?
若 2dn2d+1, 那么 k=d+1=?logn?
算法时间复杂度是
W(n)=n
文档评论(0)