O 描述的是算法的运行时间和输入数据之间的关系(简单)

数据结构数组的简单时间复杂度分析

但实际的时间是T=c1*n+c2

c1是for存储运算一共需要的时间,这个时间由机器码指令、cpu有关,我们把这样的线性关系抽象为O(n)

数据结构数组的简单时间复杂度分析

第四个显示了我们的时间复杂度计算时低阶的会被忽略

实际上我们的O是渐进时间复杂度,描述的是n趋近于无穷大的情况

我们的数组中的操作分析:

数据结构数组的简单时间复杂度分析

 

数据结构数组的简单时间复杂度分析

修改操作时只需要访问index位置的数值,只需要O(1)时间,这也是数组的优点,快速的改操作

查操作与我们是否知道index

数据结构数组的简单时间复杂度分析

数据结构数组的简单时间复杂度分析

这样的时间复杂度的分析之下要求我们如果想时间复杂度低,就要使用有语意的index

假设capacity=n,n+1次addLast,触发resize,总共进行2n+1次基本操作,平均每次addLast操作,进行2次基本操作,这样均摊计算时间复杂度是O(1)。

但是我们考虑下面一种操作,假设我们的容量是5,在存储了五个数据之后在存储一个这时调用addlast,扩容capacity变成10,这时时间复杂度O(1),size是6,然后我们执行1次removelast操作,缩容时间复杂度O(n),这样的情况叫做复杂度的震荡

之所以出现这种情况,是因为removelast缩容的时候太着急,为了解决这种震荡我们提出了Lazy解决办法

我们之前的for循环中是当数组容量是capacity一半时我们进行缩容操作,现在我们修改为当size==capacity/4,才将capacity减半

还要加上约束条件data.length/2!=0

 

 

 

 

 

 

 

 

 

相关文章: