• 容器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)

              

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

  • 相关阅读:
    MVC对session或cookie保存的值在js中做处理
    JQuery判断是否是移动端
    C# Guid 和 JQuery Guid
    JQuery Cookie操作
    DES置换表加密
    RSA的基础运算
    minikatz免杀之msf加载bin文件
    minikatz免杀之Out-EncryptedScript加密
    vue 多选框
    小程序加载更多,上拉刷新
  • 原文地址:https://www.cnblogs.com/EasonDongH/p/10100504.html
Copyright © 2020-2023  润新知