美文网首页
算法性能分析

算法性能分析

作者: 雪域狼王jayh | 来源:发表于2019-08-22 18:20 被阅读0次

f(n) = O(g(n)) 等价于 0 <= f(n) <= c * g(n)
f(n) = Ω(g(n)) 等价于 f(n) >= c * g(n)
f(n) = Θ(g(n)) 等价于 f(n) 渐进等于 c * g(n)

o 和 ω 分别是 O 和 Ω 的小写字母,因此分别表示严格小于和严格大于

解决递归问题的一些有趣的方法


1. 代入法

  1. 猜答案(忽略掉常数系数,直接猜函数的最高阶)
  2. 利用数学归纳法证明假设

解递归式:
T(n) = 4T(n / 2) + n;

假设:T(n) = O(n3);

  1. 猜想: T(n) = O(n3);
  2. 归纳:
        T(k) <= c * k3 for k < n;
    3.证明:
        T(n) = 4T(n / 2) + n
                <=4c(n / 2)3 + n;
                = (1/2)c n3 + n;
                = c * n3 - ((1 / 2) * c * n3 - n)
                <= c * n 3(c >= 1,n >= 1)
    事实上 c 应当大于等于T(1)
    因为 T(1) = Θ(1)<= c

假设:T(n) = O(n2);

  1. 猜想: T(n) = O(n2);
  2. 归纳:
        T(k) <= c * k2 for k < n;
  3. 证明:
        T(n) = 4T(n / 2) + n
                <=4c(n / 2)2 + n;
                =c * n2 + n;
                =c * n2 - (-n);
                <=c * n 2(不成立)(n明显大于1);
    因此假设不成立

1. 递归树法

举例:T(n) = T(n / 4) + T(n / 2) + n2;
    T(n) = n2
              /     \
      T(n/4)  T(n/2)
             = n2
              /     \
         (n/4)2  (n/2)2
        /     \     /     \
T(n/16)T(n/8)T(n/8)T(n/4)

计算此递归树结点总数会比较困难,但是可以肯定此递归树结点个数必定小于n(设n = 4就可以理解为什么这样)

现在计算时间复杂度
针对该递归树的第一层结点求和得出 n2
针对该递归树的第二层结点求和得出 (5 / 16)n2
针对该递归树的第三层结点求和得出 (25 / 256) n2
。。。。

所以该递归树的总的时间复杂度是:n2(1 + (5 / 16) + (5 / 16)2 + ....);
所以O(n) = n^2;(忽略常数);


主定理[T(n) = aT(n/b) + f(n)] (f(n) = nc * (lgn)k):

分为三种情况(比较f(n)和nlogba的大小情况,其中nlogba为递归树叶节点的数量)
第1种情况:
    f(n) = O(nlogba-ε)[f(n) < nlogba]
     =>Τ(n)=Θ(nlogba)
第2种情况:
    f(n) = θ(nlogba(lgn)k)[f(n) == nlogba]
     =>Τ(n)=Θ(nlogba(lgn)k+1)
第3种情况:
    f(n) = Ω(n(logba)+ε)[f(n) > nlogba]
需要条件:af(n/b)<=(1 - ε') * f(n) (ε' > 0 , ε > 0)[关于这个条件怎么理解,保持疑问]
     =>Τ(n)=Θ(f(n))

主定理应用示例:

  1. T(n)=4T(n/2)+n
    nlogba = n2
    因为f(n) = n 小于 n^2 [符合第一种情况]
    所以T(n) = Θ(n2)

  2. T(n)=4T(n/2)+n^2
    nlogba = n2
    因为f(n) = n2 等于 n2[符合第二种情况]
    且f(n) = n2 = n2 * (lgn)0[k此时等于0]
    所以T(n)=Θ(n2·lgn)

  3. T(n)=4T(n/2)+n3
    nlogba = n2
    因为f(n) = n3 大于 n2[符合第三种情况]
    所以T(n)=Θ(n3)

注意上面3个示例:a = 4,b = 2;
a是子问题的个数,b是子问题的规模。f(n)是每次额外的计算量

  1. T(n)=4T(n/2) + n2 / lgn;
    符合第二种情况[f(n) == Θ(nlogba)]:
    但是k = -1
    因为f(n) = n2 / lgn = n2 * (lgn)-1
    不满足第二种情况

补充说明:

1 + 1/2 + 1/3 + 1/4 + ... = 2;
关于主定理的相关证明详情见算法导论公开课 日后会在博客补上

相关文章

  • 算法导论公开课笔记(一)算法分析与设计

    算法分析 算法分析是关于计算机程序性能和资源利用的理论研究;性能研究主要是学习如何让算法或者应用程序 运行的更快;...

  • 算法导论学习笔记(1)

    《算法导论》一共包含两部分,即算法分析和算法设计。 什么是算法分析? “算法分析是关于计算机程序性能和资源利用的理...

  • Day2 Chapter5.4

    5.4 估计、偏差、方差(衡量学习算法的性能,通过分析影响性能的因素从而提高学习算法的性能) 1. 点估计: 作用...

  • 如何分析一个排序算法?

    1.学习排序算法的思路?明确原理、掌握实现以及分析性能。2.如何分析排序算法性能?从执行效率、内存消耗以及稳定性3...

  • 算法性能分析

    对于数据结构的基本概念我们不做叙述,本节重点讨论算法效率的度量。 性能分析的角度 一般我们从时间复杂度和空间复杂度...

  • 算法性能分析

    一个程序所需要的资源越多,其复杂度越高。而计算机资源是时间和空间资源。因此算法的复杂性有时间复杂性和空间复杂性之分...

  • 算法性能分析

    f(n) = O(g(n)) 等价于 0 <= f(n) <= c * g(n)f(n) = Ω(g(n)) 等价...

  • 第一章 算法基础——算法性能分析

    1.2 算法性能分析 算法复杂度是算法性能最基本的评价标准,由时间复杂度和空间复杂度组成,属于计算复杂性理论中的内...

  • 算法性能黑洞

    在软件层面分析一个program/function性能效率的时候,我们都会用算法分析中O(n), Θ(n),Ω(n...

  • 机器学习中的计时和性能

    问题描述 在机器学习中当我们比较集中算法之间的性能差异时,我们需要比较算法执行的时间,从而分析出算法的优劣,今天就...

网友评论

      本文标题:算法性能分析

      本文链接:https://www.haomeiwen.com/subject/cybmsctx.html