算法的基本概念
算法是对特定问题求解步骤的一种描述,它是指令的有限序列。具有下列五个重要特性:
- 有穷性:一个算法必须在有限的步骤结束,每一步都有在又穷的时间内结束
- 确定性:相同的输入只能得到相同的输出
- 可行性:可以被执行的操作
- 输入:有零个或多个输入
- 输出:有一个或多个输出
一个好的算法应该达到一下目标:
- 正确性:能够正确解决问题
- 可读性:具有良好的可读性,帮助别人理解
- 健壮性:输入非法数据,能够正确处理
- 效率与低存储量需求:尽量少的时间和空间
算法效率的度量
1、时间复杂度
一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n)。时间复杂度主要分析T(n)的数量级。算法中基本运算(最深层循环内的语句)的频度记为f(n),因此时间复杂度记为:
T(n)=O(f(n))
分析一个程序的时间复杂性时,有以下两条规则:
a) 加法规则
T(n)=T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n)))
b)乘法规则
T(n) = T1(n) * T2(n) = O(f(n)) * O(g(n)) = O(f(n) * g(n))
常见的时间复杂度
O(1)<O(log(n))<O(n)<O(nlog(n))<O(n * n)<O(n * n * n)
2、空间复杂度
空间复杂度**S(n)**定义为该算法所耗费的存储空间。