程序 = 数据结构 + 算法
1. 数据结构:高效处理大量数据的构造(数据的位置和顺序)
2. 算法:解决方案,解决问题的有限步骤
优秀的算法
1. 准确性(结果正确)
2. 可停止性(在有限的时间内结束)
3. 程序更高效(更快)
4. 花费资源更小(内存和程序存储空间)
时间复杂度O(f(n))(衡量算法好坏,总用用了多少步)
T(n):程序的运行时间,n是数据输入量
f(n):运行时间成长率
某算法运行时间T(n)的时间复杂度为O(f(n)),意思是某算法运行时间不会超过常数倍的f(n),即T(n) <= c*f(n)。
为了简便,只保留对T(n)影响最大的因子。
常见的时间复杂度
O(1) 常数时间,运行时间是常数的倍数
O(n) 线性时间,运行时间是随数据集合的大小线性增长
O(log2n) 次线性时间,运行时间是比线性慢,比常数快
O(n2) 平方时间,运行时间是2次方增长
O(n3) 立方时间,运行时间是3次方增长
O(2n) 指数时间,运行时间是2的n次方增长
O(nlog2n) 线性乘对数时间,运行时间是线性和2次方之间
当n>=16时,O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)