- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 算法的复杂性分析 2.1 常用的函数和公式(略) 2.2 算法的时间复杂性分析 2.3 最好情况、最坏情况和平均情况分析 2.4 用生成函数求解递归方程 2.5 用特征方程求解递归方程 2.6 用递推方法求解递归方程 2.7 算法的空间复杂性 2.8 最优算法 2.2 算法的时间复杂性分析 一 循环次数的统计 二 基本操作频率的统计 三 计算步的统计 一 循环次数的统计 循环次数表示乘以一个常数因子的运行时间 例:计算多项式: Horner 法则改写: 输入:存放多项式系数的数组 A[ ], 实数 x, 多项式的阶 n 输出:多项式的值 1. float polynomial(float A[ ],float x,int n) 2. { int i; 循环控制变量 i 赋初值所花 4. float value; 费的单位时间数 5. for (i=n;i0;i--) 循环体的平均执行时间 6. value = A[i] * x + A[i-1]; 7. return value; 8. } 例:冒泡排序算法的执行时间 1. template class T 13. void swap(Type x,Type y) 2. void bubble(Type A[],int n) 14. { Type temp; 3. { int i,k; 16. temp = x; 5. for (k=n-1;k0;k--) 17. x = y; 6. for (i=0;ik;i++) 18. y = temp; 7. if (A[i] A[i+1]) 19. } 8. swap(A[i],A[i+1]); 9. } :辅助操作的执行时间 c:循环体的平均执行时间 算法总的执行时间 T(n) 为 例:选手的竞技淘汰比赛 有 位选手进行竞技淘汰比赛,最后决出冠军。 用如下的函数: BOOL comp(Type mem1,Type mem2) 模拟两位选手的比赛,胜则返回 TRUE,否则返回 FALSE 假定可以在常数时间内完成函数 comp 的执行。 例:选手的竞技淘汰比赛(续 1) 输入:选手成员 group[ ], 选手个数 n 输出:冠军的选手 1. Type game(Type group[ ],int n) 2. { 3. int j,i = n; while 循环体共执行 k 次 4. while (i1) { for 循环体的执行次数分别为 5. i = i / 2; n/2,n/4,?,1 6. for (j=0;ji;j++) 7. if (comp(group[ j+i ],group[ j ]); 8. group[ j ] = group[ j+i ]; 9. } 10. return group[0]; 11. } 例:选手的竞技淘汰比赛(续 2) 函数 comp 可以在常数时间内完成 算法的执行时间为: 例:洗牌 对 n 张牌进行 n 次洗牌 规则如下: 在第 k 次洗牌时( k = 1,?n ), 对第 i 张牌( i = 1, ? n/k )随机地产生一个小于 n 的正整数 d,互换第 i 张牌和第 d 张牌的位置 例:洗牌(续 1) 1. template class Type 2. void shuffle(Ty
文档评论(0)