复杂度一般分为空间复杂度和时间复杂度。
空间复杂度是指算法在运算过程中对内存空间占用的最大值。
时间复杂度是指算法在运算过程中对最大消耗的时间。
两种复杂度都是一种估算,估算的方式就是根据代码的逻辑,分析出对于复杂度的公式。
在时间复杂度上,主要记录的是带有变量的循环。
比如for (i = 0; i < n; i ++) {...}可理解为O(n)。
而 x = n + 1; y = x + 1; z = x + y;虽然是三条语句,但是没有循环操作,所以理解为O(1)。
在空间复杂度上,主要记录的是带有变量的空间申请。
比如int[n] x;可以理解为O(n)。
而 int x; int y; int z;虽然是三个变量,但是没有变化的申请操作,所以理解为O(1)。
求解算法的时间复杂度的具体步骤是:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。
具体参考:算法的时间复杂度和空间复杂度-总结