复杂度分析(二)

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

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)。

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

        

posted @ 2018-11-15 09:08  GDOUJKZZ  阅读(212)  评论(0编辑  收藏  举报