01. 课程总览

image.png

02. 时间复杂度

2.1 大O表示

image.png

注意:只看最高复杂度的运算,并不考虑前面系数

2.2 例子

image.png
image.png
image.png
image.png
image.png
image.png

2.3 时间复杂度曲线

image.png
不同的时间复杂度会根据n的变大差距越来越明显,时间复杂度能够降低一点,针对大数据的情况,会节省计算机很多的运算时间。

2.4 递归

Fibonacci array: 1, 1, 2, 3, 5, 8, 13, 21, 34, …
* 00. 如何计算算法的复杂度 - 图10

  1. def fib(n):
  2. if n == 0 or n == 1:
  3. return n
  4. return fib(n-1) + fib(n-2)

这段代码的时间复杂度是多少呢?以n=6为例,画出其递归图:

image.png
虽然代码看上去简单,但是在计算过过程中,出现了大量的冗余计算,导致其时间复杂度高达 00. 如何计算算法的复杂度 - 图12

2.5 主定理以及常见算法复杂度

image.png

  • 二分查找:一般在有序的数列中找到目标树,一分为二,直查询一边。
  • 二叉树遍历:每个节点遍历一次,且仅遍历一次 00. 如何计算算法的复杂度 - 图14
  • 排序矩阵的查找:一维矩阵00. 如何计算算法的复杂度 - 图15;二维矩阵00. 如何计算算法的复杂度 - 图16
  • 快排、归并排序:00. 如何计算算法的复杂度 - 图17

2.6 思考题

  1. 二叉树遍历- 前序、中序、后序的时间复杂度是多少? ->

答: O(n)。n就是为二叉树的节点总数。因为二叉树遍历的过程中,每个节点会访问一次且仅访问一次。所以时间复杂度会线性于二叉树的节点总数

  1. 图的遍历 : 时间复杂度是多少

答:O(n)。每个节点会访问一次且仅访问一次

  1. 搜索算法:DFS和BFS时间复杂度是多少

答: O(n)。 n:代表搜索空间中的节点总数

  1. 二分查找:时间复杂度是多少

答:o(logn)

03. 算法训练方式

image.png
下手之前,将所有的解法都想一边,判断时间复杂度,选择最后时间复杂度最小的解法。

04. 参考链接