01_复杂度学习
2023-01-01 18:17 作者:关阿姨的Java日记 | 我要投稿


一键三连是关阿姨更新笔记的动力~

计时工具(不用敲)
那么我们应该如何去衡量不同算法之间的优劣呢?
3.事后统计法
4.事前分析估算
时间维度
空间维度:
尽管我们不知道unit_time的具体值,但是通过这几段代码执行时间的推导过程,我们可以得到一个非常重要的规律,那就是,所有代码的执行时间T(n)与每行代码的执行次数n成正比。
我们可以把这个规律总结成一个公式。注意,大O就要登场了!

T(n)表示代码执行的时间;
n表示数据规模的大小;
f(n)表示每行代码执行的次数总和。
因为这是一个公式,所以用f(n)来表示。公式中的O,表示代码的执行时间T(n)与f(n)表达式成正比。

公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。用大O表示法表示刚讲的那两段代码的时间复杂度,就可以记为:T(n) = O(n); T(n) = O(n^2)。
大O时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。一般随着n的增大,T(n)增长最慢的算法为最优算法。
6.总结
如果最高阶项存在且系数不是1,则去除去除与这个项相乘的系数
一键三连是关阿姨更新笔记的动力~
