复杂度分析

本文介绍了如何通过大O复杂度表示法分析算法的执行效率和资源消耗。主要内容包括时间复杂度的概念,如常量级O(1)、对数级O(logn)、线性级O(n)、平方级O(n^2)等,并通过实例解析了常见的时间复杂度。此外,还简要提到了空间复杂度分析,以及最好、最坏、平均和均摊时间复杂度的概念。
摘要由CSDN通过智能技术生成

复杂度分析

(一)如何分析、统计算法的执行效率和资源消耗

1、大O复杂度表示法

算法的执行效率,粗略的讲,就是算法代码执行的时间。

所有代码执行的时间T(n)与每行代码的执行次数n成正比。

这个规律总结成一个公式就是大O了

T(n) = O(f(n)

 

这条公式里,Tn代表的是代码执行的时间,n代表的是数据规模的大小,fn表示每行代码执行的次数总和。公式中的O代表的是代码时间与fn表达式成正比。

 

下面来举个例子。

 

int cal(int n) {

   int sum = 0;

   int i = 1;

   for (; i <= n; ++i) {

     sum = sum + i;

   }

   return sum;

}

 

这段代码中的执行时间预估一下,假设每行代码执行的时间一样,都为一个u的时间。

 

第1,2行都只执行了一次,而第3,4行都同时执行了n遍,所以这段代码总的执行时间为

(2n+2)*u。也就是Tn = O(2n+2)

 

大O时间复杂度并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以也叫做渐进时间复杂度,简称时间复杂度。

 

在上面例子中,当n很大的时候,常量2,系数2都可以忽略不记,我们只需要记录一个最大的量级就可以了。也就是可以记为Tn = O(n)

 

2、时间复杂度分析

(1)只关注循环次数最多的一段代码。这段核心代码执行次数的n的量级,就是整段要分析代码的时间复杂度。

比如上面的例子

int cal(int n) {

   int sum = 0;

   int i = 1;

   for (; i <= n; ++i) {

     sum = sum + i;

   }

   return sum;

}

其中2、3行代码都是常量级的执行时间,与n的大小无关,所以对于复杂度并没有影响。循环执行次数最多的就是第4、5行代码,所以这块代码要重点分析。

(2)加法法则:总复杂度等于量级最大的那段代码的复杂度。

int cal(int n) {

   int sum_1 = 0; //1

   int p = 1;// 1

   for (; p < 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值