初识数据结构之入门必懂——时空复杂度

本文详细介绍了时间复杂度和空间复杂度的概念,以及如何计算它们。通过实例展示了常见循环和递归函数的时间复杂度与空间复杂度分析,强调在算法评估中通常考虑最坏情况。同时,指出在资源利用效率上,时间复杂度和空间复杂度是衡量代码性能的重要标准。
摘要由CSDN通过智能技术生成


前言

本文将带你全面了解时空复杂度,走进C语言数据结构的第一课


一、时间(空间)复杂度是什么?

时间复杂度与空间复杂度都是一个含N的式子。他们用来度量一段代码对时间空间的利用效率。
在数据结构中,我们往往以此来判断一个算法的优劣,并以此为根据优化我们自己的代码

二、如何计算时间复杂度

时间复杂度是由代码中最基本式子所执行的次数决定

1.普遍情况下时间复杂度的计算

代码如下:

void (int N)
{  int i,j,B=0;
for(i=0;i<N;i++)
{for(j=0;i<N;i++)
B++;
}
for(i=0;i<2*N;i++)
B++;
for(i=0;i<10;i++)
B++;
} 

在第一个循环中,其最基本式子B++;执行了N^2次
在第二个循环中,其最基本式子B++;执行了N2次
在第三个循环中,其最基本式子B++;执行了10次
最精确的时间复杂度为F(N)=N^2+2N+10
而随着N的增大,2
N+10与N^2在时间复杂度中所占权重比例差距越来越大,所以我们一般选择精准时间复杂度中N的最高阶作为衡量其所需时间的判断
实际时间复杂度为O(N)=N^2

2.特殊情况下时间复杂度的计算

代码如下:

strchar(const char*str,char character)	
{while(*str)
{if(str==character)
	return str;
	str++;
} 
}                       

有时我们的函数在循环中会根据不同的输入情况,随时中断函数的执行
此时,这种函数的时间复杂度则分为了3种情况
1.在循环进入时便结束循环
如:输入:abcdefg,a
其时间复杂度为:F(N)=1
2.在循环末才结束循环
如:输入:abcdefg,g
其时间复杂度为:F(N)=N
3.在循环中任一时刻结束循环
如:输入:abcdefg,d
其时间复杂度为:F(N)=4
由于我们在对一代码进行评估时,往往要考虑最坏情况
所以我们采用悲观预期,即选取最坏情况的时间复杂度作为其时间复杂度
实际时间复杂度为O(N)=N

3.递归函数的时间复杂度

代码如下:

int Fibon(int n)
{
   if (n == 1|| n == 2)
   {
	   return 1;
   }
   else
   {
	   return Fibon(n-1)+ Fibon(n-2);
   }
}

有时我们的函数在循环中需要不断递归
此时,这种函数的时间复杂度计算公式为
F(N)=递归次数*每次递归中基本式子的执行次数
在这里插入图片描述

示例中的时间复杂度为:O(N)=N^2

三、如何计算空间复杂度

空间复杂度由代码中所需要额外开辟的空间决定

1.普遍情况下空间复杂度的计算

代码如下:

void (int N)
{
int i,j,B=0;
for(i=0;i<N;i++)
{for(j=0;i<N;i++)
B++;
}
for(i=0;i<2*N;i++)
B++;
for(i=0;i<10;i++)
B++
} 

在代码中,N为形参,并不占用额外空间
而i,j,B是在执行函数时所重新定义的变量 ,由其决定空间复杂度
最精确的空间复杂度为F(N)=3
同时间复杂度一样,空间复杂度也选取精准空间复杂度中N的最高阶作为衡量其所需时间的判断
所以其
空间复杂度为O(1)

2.递归函数的空间复杂度

代码如下:

int Fibon(int n)
{
   if (n == 1|| n == 2)
   {
	   return 1;
   }
   else
   {
	   return Fibon(n-1)+ Fibon(n-2);
   }
}

有时我们的函数在循环中需要不断递归,建立栈帧
此时,这种函数的空间复杂度计算公式为
F(N)=递归深度*算法中变量个数
在这里插入图片描述

示例中的空间复杂度为O(N)=N


总结

以上就是入门数据结构的时空复杂度的讲解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值