温故。
分析一个算法的优劣,需要考虑当输入非常大的情况下,算法的“时间复杂度”和“空间复杂度”的算法计算量的变化趋势。如果输入比较小,那就没有比较算法的必要了。而且算法的估计也只是一种抽象比较方法,相对于高级语言而言。
关注算法 —— 主项
在判断一个算法的效率时,函数中的【常数】和其他次要项,通常可以忽略不计,重点关注【主项】(最高项——计算次数最高的那部分)的阶数(幂)。
示例一:
算法A : 2n^2 , 算法B : 3n+1 , 算法C : 2n^2+3n+1 。 具体来分析一下这3个算法。 (一)算法A 中 2n^2 则幂为2 ,则算法A的【主项】为2n^2; (二)算法B 中 3n+1 , 3n 这部分的幂为1,1这部分的幂为0,则算法B的【主项】为3n; (三)算法C : 2n^2+3n+1 , 2n^2 的幂为2,3n这部分的幂为1,1这部分的幂为0,则算法C的【主项】为2n^2;
忽略常数和次要项
当输入非常大时,【常数】和【次要项】相较于【主项】的结果差距巨大,完全可以忽略不计。按照这种理论,则【示例一】的算法,最后考虑的项如下:
1. 算法A : n^2;
2. 算法B : n(最优);
3. 算法C : n^2;