数据结构学习笔记——算法复杂性分析

来源:互联网 发布:网络英语考试时间 编辑:程序博客网 时间:2024/06/16 07:24

算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上,所需要的资源越多,该算法的复杂性越高;反之,所需要的资源越少,该算法的复杂性越低。计算机的资源,最重要的是时间和空间资源。因此,算法的复杂性有时间复杂性和空间复杂性之分。在这里主要讨论时间复杂性。
一般来说,有3种情况下的时间复杂性,即最坏情况、最好情况和平均情况下的时间复杂性,

Tmax(N)=maxIDNT(N,I)=maxIDNi=1ktiei(N,I)=i=1ktiei(N,I)=T(N,I)

Tmin(N)=minIDNT(N,I)=maxIDNi=1ktiei(N,I)=i=1ktiei(N,I^)=T(N,I^)

Tavg(N)=IDNP(I)T(N,I)=IDNP(I)i=1ktiei(N,I)

其中,DN是规模为N的合法输入的集合;IDN中使T(N,I)中使Tmax(N)的合法输入;I^DN中使T(N,I^)达到Tmin(N)的合法输入;而PI是在算法的应用中出现输入I的概率。

可操作性最好且最有实际价值的是最坏情况下的时间复杂性。


几种常用的渐进符号


渐进符号O(大欧)

如果存在正的常数C和自然数N0,使得当NN0时有f(N)Cg(N),则称函数f(N)N充分大时上有界,且g(N)是它的一个上界,记为f(N)=O(g(N))。这时还说f(N)的阶不高于g(N)的阶。
根据符号O的定义,用它评估算法的复杂性,得到的只是当规模充分大时的一个上界。这个上界的阶越低则评估就越准确,结果就越有价值。

O(1)表示计算时间为常数。O(n)称为线性阶。O(n2)称为二次阶,O(n3)称为三次阶,而O(2n)称为指数阶。
O(logn)<O(n)<O(nlogn)<O(n2)


渐进符号Ω(大欧米伽)

如果存在正的常数C和自然数N0,使得当NN0时有f(N)Cg(N),则称函数f(N)当N充分大时下有界,且g(N)是它的一个下界,记为f(N)=Ω(g(N))。这时还说f(N)的阶不高于g(N)的阶。


渐进符号Θ(西塔)

定义f(N)=θ(g(N))当且仅当f(N)=O(g(N))f(N)=Θ(g(N))。这时称f(N)g(N)同阶。
F(n)=Θ(g(n)) 等价于F(n)=O(g(n))AND F(n)=Ω(g(n))


渐进符号o(小欧)

如果对于任意给定的ε>0,都存在正整数N0,使得当NN0时有f(N)/g(N)ε,则称函数f(N)N充分大时的阶比g(N)低,记为fN=og(N)


也可以这样理解:

  • O :上界。相当于”<=”

  • o:非紧的上界。相当于”<”

  • Ω:下界。相当于”>=”

  • Θ:紧确界。相当于”=”

    在大多数情况下,考虑的是最坏情况下的时间复杂性,采用O描述算法复杂性为更方便与实用。
    以排序为例,你可以很容易找出问题的上界O,但你很少去考虑问题的下界,下界往往也并不好找。
    关于O,有
    Of+Og=O(max(f,g))
    O(f)+O(g)=O(f+g)
    O(f)O(g)=O(fg)
    如果gN=Of(N),则O(f)+O(g)=O(f)
    O(Cf(N))=O(f(N)),其中C是一个正的常数
    f=O(f)

    注:本节内容参考了《算法设计与分析(王晓东)》

0 0
原创粉丝点击