高级程序员的必备技能:时间复杂度与空间复杂度的计算!一招搞定算法

本文详细介绍了算法的时间复杂度和空间复杂度,涵盖常数阶O(1)、对数阶O(log n)、线性阶O(n)、线性对数阶O(nlogN)、平方阶O(n²)等,通过实例代码分析了不同阶的时间复杂度,并提及了排序算法的时间复杂度对比。同时,文章也简述了空间复杂度,包括O(1)和O(n)的情况。
摘要由CSDN通过智能技术生成

常数阶 O(1)

无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是 O(1),如:

int i = 1;
int j = 2;
int k = 1 + 2;

上述代码执行时,单个语句的频度均为 1,不会随着问题规模 n 的变化而变化。因此,算法时间复杂度为常数阶,记作 T(n)=O(1)。这里我们需要注意的是,即便上述代码有成千上万行,只要执行算法的时间不会随着问题规模 n 的增长而增长,那么执行时间只不过是一个比较大的常数而已。此类算法的时间复杂度均为 O(1)。

对数阶 O(log n)

先来看对应的示例代码:

int i = 1; // ①
while (i <= n) {
i = i * 2; // ②
}

在上述代码中,语句①的频度为 1,可以忽略不计。

语句②我们可以看到它是以 2 的倍数来逼近 n,每次都乘以 2。如果用公式表示就是 1_2_2*2…*2 <=n,也就是说 2 的 x 次方小于等于 n 时会执行循环体,记作 2^x <= n,于是得出 x<=logn。也就是说上述循环在执行 logn 次之后,便结束了,因此上述代码的时间复杂度为 O(log n)。

其实上面代码的时间复杂度公式如果精确的来讲应该是:T(n) = 1 + O(log n),但我们上面已经讲到对应的原则,“只保留时间函数中的最高阶项”,因此记作 O(log n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值