CH2 数组类5 - 简单的复杂度分析

文章目录

简单的时间复杂度分析
O(1) O(n) O(lgn) O(nlogn) O(n^2)
O读大欧
O:大O描述的是算法的运行时间和输入数据之间的关系
n:元素个数
O(xxx) 是一个渐进时间复杂度,描述n趋近于无穷的情况下算法的快慢

O(n) 代表算法的运行时间和输入数据n的个数是呈线性关系的,是一个线性的算法
实际上线性方程是 T = c1*n + c2
但常熟都被忽略了
所以直接给出了O(n)

比如
①T = 2n + 2 → O(n)
②T = 2000
n + 10000 → O(n)
③T = 1nn + 0 → O(n^2)
④T = 2nn + 300n + 0 → O(n^2) 低阶项被忽略掉
对于排序中的高级排序算法 如归并排序法 快速排序法,若n小!!!,可以使用插入排序法来优化

添加操作的分析:
addLast(e) → O(1)
addFirst(e) → O(n)
resize() → O(n)
add(index,e) → 当index size-1 时O(1) ;当index 0 时 是O(n)
严格计算需要概率论的知识,时间复杂度的期望 O(n/2) = O(n)
整体上面三个add方法而言,添加是O(n),要从最坏的情况来看

删除操作的分析:
removeLast(e) → O(1)
removeFirst(3) → O(1)
remove(index,e) → O(n/2) = O(n)
resize() → O(n)
整体上删除操作是O(n) 的

修改操作的分析:
set(index,e) → O(1)
修改已知所以是O(1) ,未知所以是O(n)

查询操作的分析
get(index) → O(1)
contains(e) → O(n)
find(e) → O(n)
查找已知所以是O(1) ,未知所以是O(n)

遗留问题:
增 O(n)
删 O(n)
上述两个如果只对最后一个元素操作,碰上resize,依然是O(n)
resize看起来性能差,但对resize这样的操作使用最坏情况下的分析是不合理的,下一节用新的分析方法:叫均摊复杂度分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值