数据结构与算法之时间复杂度与空间复杂度

数据结构与算法之时间复杂度与空间复杂度

  • 一、时间复杂度
  • 二、空间复杂度

一、时间复杂度

  • 我们将加、减、乘、除、打印等基本的操作认为对时间的消耗是1,即执行一次操作的时间复杂度是 O ( 1 ) O(1) O(1) O O O在数学中表示一个式子的上界,简单理解为估计、大约的意思。
    数据结构与算法之时间复杂度与空间复杂度_第1张图片
  • 对于下图中2个例子的时间复杂度:
    1)第一个例子:我们认为3个print应该是 O ( 3 ) O(3) O(3),但最小的单位是 O ( 1 ) O(1) O(1),对于并列的操作只计算一次复杂度,即 O ( 1 ) O(1) O(1)
    2)第二个例子中:第一层for循环里有一个print,要执行n次,在里面嵌套一个for循环,循环里还有print,这个print要执行 n 2 n^2 n2次,所以我们认为整体的时间复杂度为 O ( n + n 2 ) O(n+n^2) O(n+n2),但时间复杂度只是估计值,取最大即可,所以认为时间复杂度为 O ( n 2 ) O(n^2) O(n2)
    数据结构与算法之时间复杂度与空间复杂度_第2张图片
  • 对于下图中的时间复杂度,当n=64时,打印64,32,16,8,4,2,共打印6次,而 2 6 = 64 , log ⁡ 2 64 = 6 2^6=64,\log_264=6 26=64log264=6,所以时间复杂度为 O ( log ⁡ 2 n ) O(\log_2n) O(log2n) O ( log ⁡ n ) O(\log n) O(logn)
    数据结构与算法之时间复杂度与空间复杂度_第3张图片
  • 当算法过程出现循环折半的时候,时间复杂度就会出现 log ⁡ n \log n logn
  • 总结:
    1)时间复杂度是用来估计算法运行时间的一个式子(单位);
    2)一般来说,时间复杂度高的算法比复杂度低的算法慢;
    3)常见的时间复杂度(按效率排序):
    O ( 1 ) < O ( log ⁡ n ) < O ( n ) < O ( n log ⁡ n ) < O ( n 2 ) < O ( n 2 log ⁡ n ) < O ( n 3 ) O(1)\lt O(\log n)\lt O(n)\lt O(n\log n)\lt O(n^2)\lt O(n^2\log n)\lt O(n^3) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
    4)复杂问题的时间复杂度:
    O ( n ! ) , O ( 2 n ) , O ( n n ) O(n!), O(2^n),O(n^n) O(n!)O(2n)O(nn)
  • 如何快速判断时间复杂度:

数据结构与算法之时间复杂度与空间复杂度_第4张图片

二、空间复杂度

  • 空间复杂度:用来评估算法内存占用大小的式子;
  • 空间复杂度的表示方式与时间复杂度完全一样:
    1)算法使用了几个变量: O ( 1 ) O(1) O(1)
    2)算法使用了长度为n的一维列表: O ( n ) O(n) O(n)
    3)算法使用了m行n列的二维列表: O ( m n ) O(mn) O(mn)
  • 空间换时间:采用更多的空间来换取运行速度。

你可能感兴趣的:(数据结构与算法Python,数据结构,算法,python)