问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。
简单分析如下:
考虑vector每次内存扩充两倍的情况。
如果我们插入N个元素, 则会引发lgN次的内存扩充,而每次扩充引起的元素拷贝次数为
2^0, 2^1, 2^2, ..., 2^lgN.
把所有的拷贝次数相加得到
2^0 + 2^1 + 2^2 + ... + 2^lgN = 2 * 2^lgN - 1 约为 2N次
共拷贝了N次最后一个元素, 所以总的操作大概为3N
所以, 每个push_back操作分摊3次, 是O(1) 的复杂度。
本文分析了在C++ STL中,向vector容器中连续插入N个元素时push_back操作的时间复杂度。考虑到vector容器内部实现为动态数组,每次扩容时都会进行元素拷贝,文章通过数学推导得出每个push_back操作的平均复杂度为O(1)。
1918

被折叠的 条评论
为什么被折叠?



