博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
时间复杂度
阅读量:4135 次
发布时间:2019-05-25

本文共 590 字,大约阅读时间需要 1 分钟。

时间复杂度 

为什么需要复杂度分析

直接跑代码通过统计、监控获取算法的执行时间和占用的内存大小的性能测试,叫事后统计法。

局限性:

1、测试结果非常依赖测试环境;如,不同处理器效率不同

2、测试结果受数据规模影响很大;测试数据规模太小,测试结果可能无法反应算法的性能

复杂度分析有不依赖环境、成本低、效率高、易操作、指导性强等特点

 

概念

大O时间复杂度表示法,表示代码执行时间随数据规模增长的变化趋势,也叫渐进式时间复杂度

复杂度描述的是算法执行时间与数据规模的增长关系

复杂度量级,从小到大排序:常数阶O(1)->对数阶O(logn)->线性阶O(n)->线性对数阶O(nlogn)->平方阶O(n^2)->立方阶O(n^3)->k次方阶O(n^k)->非多项式量级(指数阶O(2^n),阶乘阶O(n!))

 

分析法则

由于时间复杂度描述的是算法执行时间与数据规模的增长变化趋势,所以常数阶、低阶和系数实际上对这种增长不产生决定性影响,所以在做时间复杂度分析是忽略这些项。

复杂度分析法则

(1)单段代码看高频:比如循环

(2)多段代码取最大:比如一段代码有单循环和多重循环,那么取多重循环的复杂度

(3)嵌套代码求乘积:比如递归、多重循环等

(4)多个规模求加分:比如方法有两个参数控制两个循环次数,无法事先评估m和n谁的量级大取两则相加

 

 

在此想推荐下最近在学的算法,感觉通俗易懂

 

 

 

你可能感兴趣的文章
Vue动态生成el-checkbox点击无法选中的解决方法
查看>>
python __future__
查看>>
MySQL Tricks1
查看>>
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(三)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>