数组动态扩容时间复杂度分析

痞子三分冷 提交于 2019-11-30 18:02:34

对于数组动态扩容,当在数组尾部插入元素时只需要O(1)的时间复杂度,但是当插入元素刚好达到扩容的边界时,这时需要申请一块新的内存尺寸为原来的两倍,并将原数组的元素复制到新数组中,看起来数组的追加元素的效率并不高,但是因为是两倍扩容,假设数组的初始容量为2,对于N次的追加操作来说,需要扩容的次数为logN次

所以扩容的总共复制操作为    logN

                                             ∑      2^i           

                                            i = 2
这个求和公式为等比数列,既 a1=2,q=2,Sn=2(1-2^logN)/(1-2)=2(2^logN-1)=2^(logN+1)-2

忽略乘2和减2, 渐进为2^logN,所以渐进复杂度为O(N),分摊到N次的插入操作中,时间复杂度为O(1)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!