数据结构和算法学习(2)-时间复杂度

本文深入探讨了大O表示法在描述算法速度与数据项数量关系的应用,详细介绍了插入、查找和删除操作在不同数组类型中的复杂度,并通过对比O(1)、O(N)、O(LogN)和O(N^2)等复杂度级别来直观理解算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

借鉴自生活中“较大”、“较小”、“偏快”、“偏慢”等粗略的度量概念,在计算机科学中有一种粗略的度量方法称之为“大O”表示法

这是一种可以描述算法的速度如何与数据项的个数相联系的比较。

无序数组的插入:常数

无序数组中新的数据项总是被放在下一个有空的地方,无论数据项个数有多大,一次插入总是用相同的时间,这个时间可以表示为一个常数,即用如下式子表示

T=K;(T用来表示时间,K用来表示常数)

其中K与以下因素有关:处理器效率、编译程序生成程序代码的效率等等;

线性查找:与N成正比

线性查找寻找特定数据项所需的比较次数平均为数据项总数的一半。用N表示数据项总数,搜索时间T与N的一半成正比:

T=K*N/2

二分查找:与Log(N)成正比

二分法对于有序数组查询,时间T与以2为底N的对数成正比

由于二分法的特性,S次查找所能容纳的最大数据量D=2^S;所以

T=K*log2(N)

由于所有对数都与其他对数成比例,故此可以将底数也并入K中即

T=K*log(N)

不要常数的写法

大O表示法注重比较的是对应不同的N值,T是如何变化的,而不是具体的数字,所以将常数省略

大写字母O可以理解为“Order of”(大约是)

总结

线性查找:O(N)

二分查找:O(logN)

有序数组的插入:O(N)

无序数组的插入:O(1)

有序数组的删除:O(N)

无序数组的删除:O(N)

通过比较不同的大O值,O(1)优秀,O(logN)良好,O(N)一般,O(N^2)欠缺。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值