【数据结构与算法】复杂度分析

一、数据结构和算法解决的是“快”和“省”的问题,即如何让代码运行得更快,如何更省存储空间。所以「执行效率」是算法一个非常重要的考量指标,如何衡量编写的算法代码的执行效率?时间和空间复杂度分析。

换句话说:时间和空间复杂度是衡量算法代码执行效率的重要指标。

二、事后统计法:把代码跑一遍,通过统计监控得到算法执行的时间占用的内存大小。

(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)与每行代码的执行次数成正比。

 

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页