算法的复杂度分析

复杂度分析用于评估代码的执行时间和空间效率,不受具体环境影响。时间复杂度通过大O表示法描述代码执行时间随数据规模增长的趋势,如O(1), O(n), O(n^2), O(logn)等。分析方法包括关注循环次数最多的代码、加法和乘法法则。最好、最坏和平均时间复杂度分别表示不同情况下的时间复杂度。" 71642778,1217259,C++参数传递与返回值:return by value vs. return by reference,"['C++编程', '面向对象', '编程实践']

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

复杂度分析是什么

代码的复杂度分为时间复杂度空间复杂度

数据结构与算法解决的核心问题就是让代码更“快”、更“省”。具体来说,就是执行的时间尽可能的短,占用的空间尽可能的少。

而代码到底有多“快”、有多“省”,需要对应的衡量标准,时间复杂度就作为代码有多“快”的衡量标准,空间复杂度就作为有多“省”的衡量标准。

对时间复杂度与空间复杂度的计算分析就是复杂度分析了。

为什么需要复杂度分析

我记得我刚接触到时间复杂度这个概念时就有这个疑问:明明可以让代码跑一下来看下它具体的执行时间,以此作为它的时间复杂度不好吗?毕竟这样的跑出来的结果是最为真实的。

这样来作为一段代码的具体执行时间也是可以的,不过不够精确,有很大的局限性。

首先这种直接跑出来的时间非常依赖测试环境,很显然,高端CPU跑一段代码的时间一定是少于普通CPU的。另外,测试结果会受数据规模的影响,在数据量不同的情况下,测试出代码执行的时间一定也是不同的,数据量小的情况下是很难测出一个算法的性能的。

鉴于此,需要从代码本身来分析它的复杂度。从而判断一个算法在时间、空间上的优劣。

时间复杂度分析中的代码执行时间

我们先来看一下如何判断一段代码的执行时间。

int cal(int n) {
  int sum = 0;
  int i = 1;
  int j = 1;
  for (; i <= n; ++i) {
    j = 1;
    for (; j <= n; ++j) {
      sum = sum + i * j;
    }
  }
}

要去除掉环境因素来看一段代码的执行时间,那么首先我们会想到的一定是看一条条语句的执行次数,假定一条语句的执行时间为ttt,那么代码运行的总时间就是n∗tn*tntnnn是语句的数量。

当然,这样的方式并不精确,因为一条语句执行的时间我们并不能精确的估计出,且每条语句的执行时间也不相同。

不过,这种分析法的核心就在于抓住次数这一主要矛盾,忽略每条语句所受环境影响造成的执行时间不同的这一次要矛盾。

接着看上述代码:
第2、3、4条语句各执行一次,第5、6条语句各执行nnn次,第7和第8条语句各执行n2n^2n2次。所以,总的语句执行次数为(2n2+2n+3)(2n^2+2n+3)(2n2+2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值