算法的时间复杂度
分析一个算法的好坏,一般是分析其时间复杂度T(n)和空间复杂度S(n)。其中时间复杂度(Time complexity)是指算法执行时耗费时间的长度,空间复杂度(Space complexity)是指占用存储单元的长度。本文只讨论时间复杂度的情况。
执行时间(running time)是取决于input size的数量级(n=6 和n=10^6所耗费的时间当然是不同的)、input pattern (如果要求对输入的数列作降序排序,输入的是升序数列就是最坏的情况,输入升序数列就是最佳情况)、机器配置(自己的小笔记本和超级计算机)。所以要定义时间复杂度,其实是有一些“默认的规则”存在的:
- 定义一个关于n的函数T(n) 例如T(n)=2n^2+6n+10
- 只考虑最坏情况
- computional model 是RAM(Random Access Machine)
这里说的RAM是real-RAM也就是: 每个实数存储在一个存储单元内;给定一个内存地址,我们可以直接获取到这个数据而非从存储单元的第一个地址开始查找;假设原语操作(primitive operation)的执行时间为常数c。
a. arithmetic opreations: +、-、 *、 /、 ^(1/2)
b. assignment: =; x=y; y=5;
c. comparisions: >、< 、==、x>y
d. flow control: if、while
附上几页笔记