时间复杂度

时间复杂度 

为什么需要复杂度分析

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

局限性:

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谁的量级大取两则相加

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章