算法时间复杂度分析(3)
均摊时间复杂度分析
实现一个vector:
动态vector:
不能因为push_back函数调用了resize函数,就认为他是O(n)复杂度,其实他是O(1)的复杂度。
从添加1-n+1个数字,总的操作数是2n,平摊到每次,大概是2,所以复杂度是O(1)
因为resize不是每一次都调用的,所以可以用均摊时间复杂度分析
避免复杂度的震荡
删除元素的时候,缩小数组容量:
但是这样做就会造成复杂度的震荡。
如果很不凑巧,一直在临界点添加元素和删除元素:
解决:
此时就可保证两个方法都是O(1)