算法时间复杂度分析

来源:互联网 发布:java飞机大战子弹移动 编辑:程序博客网 时间:2024/06/05 18:10

算法的确切时间复杂度

对一个算法输入的不同,算法确切运行的时间不是唯一确定的。

算法的渐进时间复杂度

    很多时候我们不需要对时间复杂度进行精确地分析

    原因:1.在较复杂的算法中,进行精确分析是非常复杂的。

               2.大多时候我们并不关心F(n)的精确量,而只关心其量级

    因此提出了渐进时间复杂度的概念。

定义一:Θ(g(n))={f(n) | 如果存在正常数c1、c2和正整数n0,使得当n>=n0时,0<c1g(n)<=f(n)<=c2g(n)恒成立}
      定义二:Ο(g(n))={f(n) | 如果存在正常数c和正整数n0,使得当n>=n0时,0<=f(n)<=cg(n)恒成立}
      定义三:Ω(g(n))={f(n) | 如果存在正常数c和正整数n0,使得当n>=n0时,0<=cg(n)<=f(n)恒成立}

F(n)不是确定的,他是在一个单位内变动,那我们关心那个F(n)呢?一般我们在分析算法时,使用最坏情况下的F(n)

来评价算法效率:

1.如果知道了最坏情况,我们就可以保证算法在任何时候都不能比这个情况更坏了

2.很多时候,算法运行发生最坏情况的概率还是很大的,如查找问题中待查元素不存在的情况。且在很多时候,平均情况的渐近时间复杂度和最坏情况的渐近时间复杂度是一个量级的。


原创粉丝点击