版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法复杂度分析 背景 大 O记号 目录 为什么讨论算法的复杂度? 算法两个主要方面: 正确:算法功能与问题要求一致? 成本:运行时间 + 所需存储空间 = 如何度量? + 如何比较? 算法复杂度分析的动机 如何度量: 设计的这个算法如何?跑得是不是足够快? 随着问题规模的增长会怎样变化了? 如何比较? 同一个问题有多种不同的算法,如何判断其优劣了? 为什么讨论算法的复杂度? 直接想法 实验测试 把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大 小 实验测试难以准备反映算法的效率 - 测试环境和测试数据各异 不同的算法可能适应不同的输入规模 不同的算法可能适应不同类型的输入 同
2、一个算法,可能由不同的程序员、用不同的语言、由不同的编译器编译 同一个算法,可能被运行在不同的OS、不同体系结构的计算机上 为了给出一个客观的评判断,需要抽象出一个理解的计算模型 不依赖于上述各种具体因素,准确测量和评价算法 RAM(Random Access Model) 1. 指令一条接着一条执行(串行) 2. 指令包含了真实计算机的常见指令,例如: 算术指令(加法,减法,乘法,除法,取余,向下取整,向上取整) 数据移动指令(装入,存储,复制) 控制命令(条件与无条件转移、子程序调用与返回) 3. 上述每条指令所用的时间均为常数 在RAM模型中,算法的运行时间就与算法需要执行的指令操作次数
3、成正 比,记为T(n),即算法为求解规模为n的问题,所需要执行的指令操作次 数。 RAM(Random Access Model) int hello() System.out.println(Hello, World!n); / 需要执行 1 次 return 0; / 需要执行 1 次 T(n) = 2 int hello(int n) for(int i=0; in; i+) / 需要执行 (n + 1) 次 System.out.println(Hello, World!n); / 需要执行 n 次 return 0; / 需要执行 1 次 int hello(int n) for(i
4、nt i=0; in; i+) / 需要执行 (n + 1) 次 System.out.println(Hello, World!n); / 需要执行 n 次 for(int i=0; in; i+) / 需要执行 (n + 1) 次 for(int j=0; j= c 时 T(n) b 0 如果一个算法的执行次数是如果一个算法的执行次数是 T(n),那么只保留最高次项,同时,那么只保留最高次项,同时 忽略最高项的系数后得到函数忽略最高项的系数后得到函数 f(n),此时算法的时间复杂度就,此时算法的时间复杂度就 是是 O(f(n) T(n) = n + 1 + n + n+ 1+(2n+1)*
5、n + n*n = 3n*n + 4n + 2 O(f(n)= O(n*n) 其他记号 Big O void aFunc(int n) for(int i = 0; i n; i+) printf(Hello, World!n); void aFunc(int n) for(int i = 0; i n; i+) for(int j = 0; j n; j+) printf(Hello, World!n); T(n) = n+1+1 = n+2 O(n) T(n) = n +n2 + n2= 2n2+2 O(n2) Big O void aFunc(int n) for(int i = 0;
6、i n; i+) for(int j = 0; j n; j+) printf(Hello, World!n); for(int j = 0; j = 0) for(int i = 0; i n; i+) for(int j = 0; j n; j+) printf(输入数据大于等于零n); else for(int j = 0; j n; j+) printf(输入数据小于零n); O(n2) Big O void aFunc(int n) for (int i = 2; i n; i+) i *= 2; printf(%in, i); T(n) = 2lgn O(lgn) 16 *16 *
7、4 Big O long aFunc(int n) /Fab if (n = 1) return 1; else return aFunc(n - 1) + aFunc(n - 2); T(N) = T(N-1) + T(N-2) (复杂度是多少?) 复杂度分析-递归与主定理 主定理示例 快速排序: Tn = 2Tn/2 + O(n) 对比主定理, T n = aTn/b + f (n) 快速排序中:a = 2, b = 2, f(n) = O(n) 故其复杂度为:平均的复杂度O(nlogn) 最坏:o(n2) n O(n) n/2n/2 常数阶O(1) Int sum(int n) Int
8、sum = 0; For(int i=1; i=n; i+) O(n) sum+=I; Return sum; Int sum(int n) return n*(n+1)/2; O(1) 对数阶O(logn) 多项式阶O(nc) 指数阶O(2n) 几种不同类型的时间复杂度 最好情况时间复杂度(best case time complexity)O(1) 最坏情况时间复杂度(worst case time complexity)O(n) 平均情况时间复杂度(average case time complexity)O(n) 均摊时间复杂度(amortized time complexity) ArrayList 可动态扩容的一个数组 Add: O(1) 当扩容时,需要O(n) N*O(1) + O(n) = O(1) int sea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026北京城市副中心投资建设集团有限公司春季校园招聘25人备考题库及完整答案详解(典优)
- 2026中共温岭市委机构编制委员会办公室招聘编外人员1人备考题库附完整答案详解(历年真题)
- 2026云南昭通鲁甸县卯家湾第二幼儿园招聘6人备考题库含答案详解【a卷】
- 2026广东深圳市优才人力资源有限公司公开招聘聘员(派遣至龙城街道)18人备考题库附答案详解(考试直接用)
- 2026辽宁铁岭市昌图县14家单位补充招聘公益性岗位人员23人备考题库及参考答案详解(轻巧夺冠)
- 2026广东广州市南方医科大学口腔医院财务人员招聘2人备考题库附参考答案详解【b卷】
- 2026新疆和田墨玉县鑫玉经济开发有限责任公司招聘8人备考题库【培优b卷】附答案详解
- 2026吉林大学中日联谊医院(白求恩第三医院)非编岗位人员招聘3人备考题库【26-3】含完整答案详解【易错题】
- 2026浙江温州市残疾人康复服务指导中心招聘编外康复教师2人备考题库附答案详解(预热题)
- 2026浙江嘉兴市海宁市儿童福利院招聘2人备考题库附答案详解【模拟题】
- 2024北森图形推理题
- 民航安全检查掌握证件检查课件
- 养成教育六行动
- 高一下期《化学必修第二册》实验课计划
- 手工焊锡知识培训课件
- 摄像头基础知识
- 融媒体语境下河南卫视文化节目品牌建设浅析
- Supplier-Audit-Check-List半导体芯片制造企业供应商审核清单
- 电机轴承知识与润滑知识
- 高考生物选择性必修1稳态与调节基础知识填空默写(每天打卡)
- DL-T5461.1-2012火力发电厂施工图设计文件内容深度规定第1部分:总的部分
评论
0/150
提交评论