数据结构和算法学习-复杂度分析笔记

0 算法复杂度分析是什么

数据结构和算法解决的是如何让计算机更快时间、更省空间的解决问题,算法执行效率是算法一个非常重要的考量指标。所谓的算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。

1 为什么要做复杂度分析

有的人肯定会说,可以通过性能测试就能得到算法执行的时间和占用的内存大小。性能测试依赖执行环节、数据规模等条件制约,其可操作性&成本会比较高。我们不可能也没有必要对所有算法做性能测试。因此我们需要我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。

2 怎么做复杂度分析

2.1大O表示法

算法的执行时间与每行代码的执行次数成正比,用T(n) = O(f(n))表示,其中T(n)表示算法执行总时间,f(n)表示每行代码执行总次数,而n往往表示数据的规模。值得说明的是大O时间复杂度只是表示代码执行时间随着数据规模增长的变化趋势(也叫作渐进时间复杂度),可以省略掉系数、低阶、常量。

2.2基本分析法则

  • 单段代码看执行次数最多的一段代码,比如循环、递归等
  • 多段取最大,总的时间复杂度就等于量级最大的那段代码的时间复杂度。
  • 嵌套代码求乘积:比如递归、多重循环等
  • 多个数据规模求加法:比如方法有两个参数控制两个循环的次数,那么这时就取二者复杂度相加,如O(m+n)

2.3常见的复杂度

  • O(1) 常数阶
  • O(logn) 对数阶
  • O(n) 线性阶
  • O(nlogn) 线性对数阶
  • O(n^2) 平方阶
  • O(n^3) 立方阶
  • O(2^n) 指数阶
  • O(n!) 阶乘阶

2.4 复杂度标准

  • 最好情况复杂度
  • 最坏情况复杂度
  • 平均情况复杂度
  • 均摊复杂度

3 分析基本方法

复杂度分析并不难,关键在于多练。

おすすめ

転載: blog.csdn.net/huangshanchun/article/details/113799528