本文共 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谁的量级大取两则相加
在此想推荐下最近在学的算法,感觉通俗易懂