cpp源码STL之vector中push_back的时间复杂度分析

本文分析了一种数据结构在连续操作中的时间复杂度变化,特别是插入操作时从最好O(1)到最坏O(n)的变化,并通过实例推导出均摊复杂度为O(1)。讨论了在内存不足时重新分配内存对复杂度的影响。

先说结论

最好是O(1),最差是O(n), 均摊是O(1)。

最好的情况,就是插入的时候,还有空余;最坏的情况,就是每次插入都满了,要重新分配内存。

均摊复杂度,先看一下定义

对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时
间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这个时候,我们就可以将这
一组操作放在一块儿分析,看是否能将较高时间复杂度那次操作的耗时,平摊到其他那些时
间复杂度比较低的操作上。

推导

在这里插入图片描述

在这里插入图片描述

这里就是按照定义,对插入九个数的过程进行了分析,其中当插入的空间不够时,会重新分配两倍的大小内存,详细解释,查看参考博客。

其中,不等号是进行了缩放,假设全部数量为1,然后有logn次的重新分配内存。

对等比数列求和使用了公式,
在这里插入图片描述

参考博客:
求和公式
tamu大学的教育课件
STL中push_back的详细过程
push_back源码剖析

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值