zoukankan      html  css  js  c++  java
  • 容器vector容量翻倍增长策略效率分析

          很多语言的可动态变化容量的容器,其容量扩展一般是翻倍增长的策略,这里来分析一下翻倍增长策略的效率,以C++的vector容器为例。

           我们不妨使用分摊复杂度分析:假设初始容量为一个常数N,连续执行n次insert()操作,最终size增长至N+n,根据算法策略,填装因子一直在(50%,100%]范围内,因此有:

                   size(n) ≤ capacity(n) < 2*size(n)

            其中,size(n)=N+n,考虑到N为一个极小的常数,因此size(n)=O(n);再根据上面公式左边的等于号,得出:

                   capacity(n) = O(size(n)) = O(n)   

            考虑容量是按比例指数速度增长,共做过O(logn)次扩容达到capacity(n),每次扩容消耗在复制元素上的时间正比于当时的规模(size),且同样以2为比例做指数增长,因此消耗于扩容的时间累计不过:

                     T(n) = 2N + 4N + 8N +...+ capacity(n)

              以上公式是一个几何级数,其复杂度与末项同阶,即T(n) = capacity(n) = O(n)

              考虑这是操作n次insert()之后的总体时间复杂度,因此其单次操作的分摊复杂度明显是O(1)

              

        以上内容参考邓俊辉老师的《数据结构》,有兴趣的童鞋可自行阅读。

  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/EasonDongH/p/10100504.html
Copyright © 2011-2022 走看看