漫画算法-算法概述

时间复杂度

1、10cm的面包,3分钟吃掉1cm,需要多少时间?

t = 3 * 10;

如果长度是 n,T(n) = 3n;

2、面包长度16cm,每5分钟吃掉面包长度的一半,把面包吃得只剩1cm,需要多少时间?

用数学表达就是用 16 不断除以 2,除多少次结果为1.

用对数表示 t = log216

如果长度是 n,T(n) = log2n;

3、有10cm的面包和1个鸡腿,吃掉一个鸡腿需要2分钟,吃掉整个鸡腿需要多久?

t = 2;

如果有 n 个鸡腿,T(n) = 2n;

4、长度为10cm的面包,吃掉第1个1cm需要1分钟,第二个1cm需要2分钟,以此类推,吃掉整个面包需要多久?

t = 1 + 2 + 3 + 4 + 5 + ... + 10 = (1 + 10) * 10 / 2;

如果长度为 n,T(n) = (1 + n ) * n / 2 = 0.5n + 0.5n2;

渐进时间复杂度

asymtotic time complexity

定义:当存在函数 f(n) ,使得当n趋近无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称 f(n) 是 T(n) 的同数量级函数,记作 T(n) = O(f(n),O 为算法的渐进时间复杂度,简称时间复杂度。

空间复杂度

常量空间

算法的存储空间大小固定,和输入规模没有直接关系时,记作 O(1)。

线性空间

算法空间是一个线性的集合(如数组),并且集合大小和输入规模 n 成正比,记作 O(n)。

二维空间

算法分配的空间是一个二维数组集合,并且集合的长度和宽度都和输入规模 n 成正比,记作 O(n2)

递归空间

计算机在执行程序时,会分配一块内存用来存储方法调用栈。

方法调用时会入栈,调用完后会出栈,直到全部方法调用完成出栈后,结束。

执行递归操作所需的内存空间和深度成正比,所以记作 O(n)。

时间与空间的取舍

在绝大多数时候,时间复杂度更为重要一些,宁可多分配一些内存空间,也要提升程序的执行速度。

Last Updated: 8/20/2019, 8:25:39 PM