算法基础——算法优劣的衡量

时间:2024-03-18 20:24:56

针对一个问题可以有多种的算法方法来解决问题,当然我们最喜欢的还是简单的、高效的方法。如何衡量算法的好坏,是学习算法的重要基础。

  1. 最初,用所需要的计算时间来衡量一个算法的好坏
  2. 但不同的机器相互之间无法比较
  3. 需要用独立于具体计算机的客观衡量标准
    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)成立。

参考文档

算法导论