时间复杂度
求解算法的时间复杂度的具体步骤是:
1.找出算法中的基本语句,算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体
2.计算基本语句的执行次数的数量级,只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在增长率上
分析时间复杂度的时候遵循以下原则:
1、只关注循环执行次数最多的一段代码;
2、加法法则:总复杂度等于量级最大的那段代码的复杂度;
3、乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积。低阶、常量、系数三部分都可以忽略
如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)
某个特定的数据集能让算法的执行情况极好,这就是最「最好情况」,而另一个不同的数据会让算法的执行情况变得极差,这就是「最坏情况」。不过在大多数情况下,算法的执行情况都介于这两种极端情况之间,也就是「平均情况」。
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度
有的算法只需要占用少量的临时工作单元,而且不随问题规模的大小而改变,我们称这种算法是原地进行的,是节省存储的算法
有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元
web应用优先以空间换时间