算法时间复杂度分析(3)

均摊时间复杂度分析

实现一个vector:

 

算法时间复杂度分析(3)

算法时间复杂度分析(3)

动态vector:

算法时间复杂度分析(3)

算法时间复杂度分析(3)

不能因为push_back函数调用了resize函数,就认为他是O(n)复杂度,其实他是O(1)的复杂度。

算法时间复杂度分析(3)

 

从添加1-n+1个数字,总的操作数是2n,平摊到每次,大概是2,所以复杂度是O(1)

因为resize不是每一次都调用的,所以可以用均摊时间复杂度分析

避免复杂度的震荡

删除元素的时候,缩小数组容量:

算法时间复杂度分析(3)

但是这样做就会造成复杂度的震荡。

算法时间复杂度分析(3)

如果很不凑巧,一直在临界点添加元素和删除元素:

算法时间复杂度分析(3)

解决:

 

算法时间复杂度分析(3)

算法时间复杂度分析(3)

此时就可保证两个方法都是O(1)