时间复杂度
时间复杂度
- 时间空间复杂度分析 --> 不使用具体测试数据,粗略估计算法执行效率。不依赖测试环境、效率高、易操作、指导性强。
大O时间复杂度
-
表示代码执行时间随数据增长的变化趋势 --> 时间复杂度。
-
计算时忽略低阶、常量、系数,只考虑最高阶量级。
-
一个算法的时间复杂度,是其量级最高的代码段的复杂度。
-
嵌套代码的时间复杂度是其内外代码时间复杂度的乘积。
O(1) :代码中不存在循环、递归等语句
O(logn) O(nlogn):
> i = 1;
>
> while (i<=n){
> i *= 2;
> }
- 变量取值为等比数列,最终i为n,2的指数为log2n,时间复杂度o(log2n)。
- 对数可以相互转换,所有对数阶时间复杂度均为O(logn)。
- O(logn)的代码循环了n次,时间复杂度便是O(nlogn)。例如:快速排序。
O(m+n),O(m*n):
-
m,n表示两个数据规模,无法比较谁更大时,采用m+n或者m*n。
-
前者为两个循环分开,后者为两个循环嵌套。
还有O(n),O(n2),O(n3),O(n!)等等,后边的非多项式阶在数据规模增加时,时间和空间占用骤增,性能极差:阶乘阶、指数阶等。
ps:xbyz:最简单的时间复杂度分析/计算方法是凭感觉。小菜:???
空间复杂度:分析类似时间复杂度,找最大的空间占用代码段。
最好、最坏、均摊、平均时间复杂度
- 最好:最理想情况下的代码时间复杂度。
- 最坏:最糟糕情况下的代码时间复杂度。
- 平均:最理想和最糟糕的情况发生概率不高,在平均情况下就有了它,计算各种情况下的加权平均值。
- 均摊:真正的“平均”时间复杂度!(特殊的平均时间复杂度and摊还分析)
- emm:以上四个时间复杂度中前三个不需要区分,后两个都有其特殊的使用场景、情况。