美文网首页
最好、最坏、平均、均摊时间复杂度

最好、最坏、平均、均摊时间复杂度

作者: 倒霉蛋or幸运儿 | 来源:发表于2018-10-08 09:14 被阅读0次
    // array 表示一个长度为 n 的数组
     // 代码中的 array.length 就等于 n
     int[] array = new int[n];
     int count = 0;
     
     void insert(int val) {
        if (count == array.length) {
           int sum = 0;
           for (int i = 0; i < array.length; ++i) {
              sum = sum + array[i];
           }
           array[0] = sum;
           count = 1;
        }
    
        array[count] = val;
        ++count;
     }
    

    (1) 最好情况下是直接可以插入数据:O(1)
    (2) 最坏情况下是数组已经满了,开辟一个两倍的数组,并循环之前的数组赋值给新数组:第一次循环为10、第二次循环为210、第三次循环为410、....、第n次循环为102n-1。去掉常数系数后。最坏时间复杂度为O(2n)
    (3) 平均加权时间复杂度:第一次循环前 有10个O(1)的情况、 第二次循环前 有10-1个O(1) 的情况、 第三次循环前 有 2
    10-1 个 O(1) 的情况、第四次循环前 有 2^210-1 个O(1) 的情况 ......第n次循环前 有2^(n-1)10-1个O(1) 的情况,加上数组已满的情况 共有2^(n-1)10 种可能,每个可能的概率为 1/2^(n-1)10。1/2^(n-1)10 + 1/2^(n-1)10 + 1/2^(n-1)10 + .... + 1/2^(n-1)10 + 2^n10 / 2^(n-1)10 时间复杂度为O(1)
    (4) 因为前后有时序关系,所以可以用均摊分析来分析,最坏情况时间复杂度为O(2^n) 分给 2^(n-1)个最好情况时间复杂度O(1) 结果还是O(1).

    相关文章

      网友评论

          本文标题:最好、最坏、平均、均摊时间复杂度

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