1.为什么进行复杂度分析
不同运行环境下,由于硬件的不同、软件版本的不同,并发数不同等待原因,同一代码的运行时间可能相差极大,所以,测试环境下的运行效率虽然直观,但是不能完全信任,所以还需要可靠的理论来支撑。
时间复杂度和空间复杂度的分析,就是对于代码运行效率的抽象,不受运行环境影响,只面向巨大的数据量分析,具有极高的价值。
2.复杂度的表示方法
大 O 复杂度表示法
因为无法知道每一行代码的具体运行时间,所有可以使用参数 runTimeLine 来表示一行代码的运行时间,然后只需要计算每行代码运行多少遍就可以知道时间复杂度啦。
例如以下代码,第4行和第5行代码运行次数为n次,其他为1次,所有总的时间为 (2n+3)* runTimeLine
而用大O表示复杂度的时候,只看增长趋势,所以忽略 低阶、常量、系数 这三个无关部分
进而此代码的时间复杂度为O(n)
int cal(int n) {
int sum = 0;
int i = 1;
for (; i <= n; ++i) {
sum = sum + i;
}
return sum;
}
总结:直关注执行次数最多的行就可,可以用加法和乘法来计算复杂逻辑下的时间复杂度
3.常见时间复杂度
其中指数阶和阶乘阶的增长趋势太快,所以性能很差,尽量不要出现该复杂度的代码。