一、数据结构和算法解决的是“快”和“省”的问题,即如何让代码运行得更快,如何更省存储空间。所以「执行效率」是算法一个非常重要的考量指标,如何衡量编写的算法代码的执行效率?时间和空间复杂度分析。
换句话说:时间和空间复杂度是衡量算法代码执行效率的重要指标。
二、事后统计法:把代码跑一遍,通过统计监控得到算法执行的时间和占用的内存大小。
(1)事后统计的局限性
1、测试环境中硬件的不同会对测试结果有很大影响
2、测试结果受数据规模的影响很大
如果测试数据规模太小,测试结果可能无法真实反映算法的性能,例如:小规模的数据排序,插入排序可能反倒会比快速排序更快。
所以,需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法,这就是时间、空间复杂度分析方法。
三、大O复杂度表示法
算法的执行效率粗略地讲就是算法代码的执行时间,从CPU的角度来看,代码执行都是类似的 操作数据->运算->写数据。尽管每行代码对应的cpu执行的个数、执行的时间都不一样,但是这里知识粗略估计,所以可以假设每行代码执行时间都是一样的,为unit-time
function cal(n){
let sum = 0;
let i = 1;
for(i;i<=n;i++){
sum = sum + i;
}
return sum;
}
2、3行代码分别需要1个unit-time的执行时间,第4、5行都运行n遍,所以需要2n*unit-time的执行时间,所以这段代码总的执行时间就是(2n+2)*unit-time 。
可以看出,代码的执行时间T(n)与每行代码的执行次数成正比。