• 复杂度分析(二)


          在前面一篇文章中,我们讲了为什么要进行复杂度分析,以及如何分析复杂度。那么接下来我将举一个例子,请你按照之前的复杂度分析分析出来。

    for (var i = 0; i <= arr.Length; i++)
    {
             if (value==arr[i])
               {
                         break;
               }
    }

         上面这段代码的复杂度是多少呢,假设数组长度为n,最好的情况下是i=0的时候,就找到相等的了,最坏情况下是:最后一个才找到,或者循环一遍之后一个都没找到。我们知道上面两种是极端情况,一般发生的概率都不大。

         对于上面这个情况,我们就要引入平均时间复杂度的概念了。

         我们知道平均复杂度的算法,就像平均数的算法一样,用总的查找次数/多少种情况 。从0到n-1,共有n种情况,再加上不在数组中的情况(1)种,所以总共n+1总情况。总的查找次数就是从0,1,2,3 到n,n; 

        根据上面算出时间复杂度为

        

        省略掉常量得出的平均复杂度时间为o(n)。

        好像上面这样做法,没有什么毛病。但是我们仔细想想,上面有两种情况,在数组里面和不在数组里面,发生的情况都是1/2。另外,要查找的数据,出现在数组里面的概率,每个位置都是1/n。

        根据概率论的一点知识,在数组里面的情况的概率是1/2n。

        所以得出如下结论

        

       去掉常量,平均时间复杂度还是为o(n)。

       上面就是平均时间复杂度的算法。碰到这些,我们要好好分析。

            

  • 相关阅读:
    C/C++知识点清单01
    数独GUI程序项目实现
    第三章--Win32程序的执行单元(部分概念及代码讲解)(中-线程同步
    《JAVA程序设计与实例》记录与归纳--继承与多态
    《JAVA程序设计与实例》记录与归纳--类与对象
    C语言范例学习06-上
    单一职责原则
    牙疼真要命,牙坏真烧钱
    跳槽 & 思维导图
    成熟的 Git 分支模型
  • 原文地址:https://www.cnblogs.com/gdouzz/p/9961590.html
Copyright © 2020-2023  润新知