数据结构与算法2-时间空间复杂度分析

本文深入探讨了时间复杂度和空间复杂度的概念,强调它们在程序优化中的重要性。时间复杂度通过O表示法描述算法运行速度,如O(1)、O(logn)、O(n)等,而空间复杂度关注算法所需的内存空间。优化目标是降低时间复杂度到O(1),并有效管理空间使用。通过理解和分析循环、IO操作对复杂度的影响,可以提升程序效率。

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

目录

时间复杂度的意义

常见的时间复杂度

时间复杂度的计算

 时间复杂度排序

空间复杂度


进入时间和空间复杂度章节

时间复杂度的意义

对一个程序做测试时,其结果可能受限于测试数据、场景等情况,并不会很准确严谨,所以,自己用程序来验证分析是比较稳妥的,借此,可以将程序调整到效率最高

时间复杂度以大写字母O表示

常见的时间复杂度

常数:O(1),1表示常数,所有能确定的数字,都用O(1),哪怕一个程序执行了10W次,只要能确定,那就是O(1),因为我们在计算时间复杂度的时候,一般都是计算比较大,并且不确定的情况,已经确定了,那就是O(1)

对数:O(logn),举个例子

int n = 100000000;
int i = 1;
while(i <= n) {
    i = i * 2;
}

假设n是未知的,求程序执行的次数,就可以有一个等式关系 2的x次方等于n,x就是执行的次数,所以x就等于log以2为底,n的对数

忽略掉参数,那就是log n 

线性:O(n),举个例子

int num = 100000;
int count = 0;
for (int i = 0, i <= num, i++) {
    count = count + 1;
}

假设num未知,也就是说num越大,程序执行次数越多,忽略掉参数,就是O(n)

线性对数:同样的,线性对数就是O(log n)

平方:O(n^2),比如从1加到n,就是一个等差数列求和,也就是 n*(n+1)/2,忽略参数,就是n^2

 N次方:O(n^N)

时间复杂度的计算

从上面来看,整理下来,要计算一个时间复杂度,应该从最高阶计算,找运行最多的地方

1、找有循环的地方

2、找有IO的地方,包括网络请求,数据库的请求,磁盘交互

 时间复杂度排序

O(1)>O(log n)>O(n)>O(n*log n)>O(n^2)>O(n^N)

优化的目标就是往O(1)的方向走,更直观点,可以画一个走势图来对比

空间复杂度

空间复杂度就比较清晰,直接找开辟了空间的地方,比如创建了一个集合,创建了一个数组,开了多少了,那就是占用了多少,集合就看放进去了多少数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值