针对一个问题可以有多种的算法方法来解决问题,当然我们最喜欢的还是简单的、高效的方法。如何衡量算法的好坏,是学习算法的重要基础。
- 最初,用所需要的计算时间来衡量一个算法的好坏
- 但不同的机器相互之间无法比较
- 需要用独立于具体计算机的客观衡量标准
1.问题的规模
2.基本运算
3.算法的计算量函数
问题的规模
输入数据量的测度(一般是n来表示)
基本运算
解决给定问题时占支配地位的运算(一般一种、偶尔两种)
计算量函数
用问题规模的某个函数来表示算法的基本 运算量,这个表示基本运算量的函数称为算 法的时间复杂性(度)。时间复杂度用用T(n)(或T(n,m)等)来表示。
重点概念:
渐进时间复杂度
当问题的规模趋于极限情形时的时间复杂度的表示
3种记号
1. O(f(n))表示算法时间复杂度的上界
定义为:若存在c > 0,和正整数n0≥1,使得当n≥n0时,总有 T(n)≤c*f(n) 。
2. Ω(f(n)) 表示算法时间复杂度的下界
定义为:若存在c > 0,和正整数n0≥1,使得当n≥n0时,存在无穷多个n ,使得T(n)≥c*f(n)成立。
3. Θ(f(n)) 表示算法时间复杂度的确界
定义为:若存在c1,c2>0,和正整数n0≥1,使得当n≥n0时,总 有 T(n)≤c1*f(n),且有无穷多个n,使得T(n)≥c2*f(n) 成立,即:T(n)= O(f(n))与T(n)=Ω(f(n))都成立。
补充:
- o记号:由O记号提供的渐进上界可能是也可能不是渐进紧确的。eg:2n^2 = O(n^2)是渐进紧确的,但是2n =
O(n^2)却不是。用o记号来表示一个非渐进紧确的上界。
定义:对任意正常数c,存在正整数n0≥1,使得当n≥n0时,总有 T(n)≤c*f(n) 。 - ω记号:与Ω记号关系类似于O和o的关系,表示一个非渐进紧确的下届。
定义:对任意正常数c,存在正整数n0≥1,对所有的n≥n0时,T(n)≥c*f(n)成立。
参考文档
算法导论