算法时间复杂度
1. 算法
- 定义: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
- 特性:
- 输入输出
- 有穷性
- 确定性
- 可行性
- 算法设计的要求
- 正确性
- 可读性
- 健壮性
- 时间效率高和存储量低
- 时间效率:算法的执行时间
- 存储量:算法在执行过程中需要的最大存储空间:主要指算法程序运行时所占有的内存或外部硬盘存储空间。
2. 算法效率的度量方法
-
事后统计方法:不推荐
-
事前统计方法:推荐
- 一个程序的运行时间,依赖于算法的好坏和问题的输入规模(问题输入规模是指输入量的多少)
- 不同的算法,在问题规模(n值)越大,它们在时间效率上的差异也就越来越大。
- 判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数
3. 算法时间复杂度
在进行算法分析时,语句总得执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称做算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
-
分析算法的复杂度,关键就是要分析循环结构的运行情况
- 常数阶:O(1)
- 线性阶:O(n)
- 对数阶:O(logn)
- 平方阶:O(n² )
-
常用的时间复杂度所耗费的时间从小到大依次是:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
-
最坏情况和平均情况
- 最坏情况运行时间是一种保证,那就是运行时间将不会再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,后面提到的运行时间都是最坏情况的运行时间。