时间复杂度和空间复杂度 详谈

本文详细探讨了算法的时间复杂度和空间复杂度,包括时间复杂度的概念、大O渐进表示法,以及循环、二分查找、递归函数和斐波那契数列的时间复杂度分析。同时,文章还阐述了空间复杂度的计算方法,指出时间累积而空间可重复利用的原则,并通过斐波那契数列的例子展示了时间复杂度和空间复杂度的关系。

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

目录

1.算法效率问题引出

2.算法的复杂度:

3.时间复杂度

3.1时间复杂度的概念:

3.2注意事项

3.3时间复杂度代码示例

 3.4大O渐进表示法:

3.5 函数增幅表

3.6 时间复杂度代码示例

3.6.1 循环

3.6.2 二分查找

3.6.3 递归函数

3.6.4斐波那契数列

4.空间复杂度

4.2.时间与空间的关系

4.3代码示例

4.3.1基本函数空间复杂度

4.3.2 斐波那契数列空间复杂度

4.3.3 返回前n项的斐波那契


1.算法效率问题引出

经典问题:斐波那契数列——兔子问题的解决?

#include<stdio.h>

long long Fib(int n)
{
	if (n < 3){
      return 1;
  }
		
	
	return Fib(n - 1) + Fib(n - 2);
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d", ret);

	return 0;
}

 代码实现利用递归看似简单,但是这种代码运行起来效果好吗?

2.算法的复杂度:

1.算法在编写成可执行程序后,运行时需要耗费时间资源空间资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。
2.时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间

3.时间复杂度

3.1时间复杂度的概念:

在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。

我认为,时间复杂度就是当我们为解决问题编写的代码中,一个程序从开始到结束,需要对数据进行处理的代码语句重复所执行的次数,(算法中基本语句操作的重复执行次数),就是时间复杂度。 

3.2注意事项

1.定义中说算法的时间复杂度是一个函数,而这个函数,并非我们在C语言中所将的功能函数,而是我们在数学中所认识的函数,是Y与X的关系式,是为了描述某种数学现象而分析总结出的结论。

2.实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这里我们使用大O的渐进表示法。

3.一个算法会有最好的情况,平均情况和 最差的情况,我们只看最差情况。

3.3时间复杂度代码示例

#include<stdio.h>

void Fuc(int N)
{
	int count = 0;
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			count++;                 // 这里双for循环 所以这里执行N^2
		}
	}

	for (int k = 0; k < N; k++)
	{
		count++;                      // 这里for循环 所以这里执行N  
	}

	int ret = 5;
	while (ret)
	{
		count++;                     // 这里执行5次
		ret--;
	}
	return 0;
}

 

上面代码我们可以看出,这个代码的时间复杂度应该是函数T(N)= N^2 +N + 5;可结果真的是这样吗?可答案却并非如此,真正的答案是O(N^2),这是为什么呢?

因为我们在实际计算时间复杂度时,我们其实并不一定要精确的计算我们的执行次数,只需要一个大概的执行次数,而这里我们就需要用到“大O的渐进表示法”
 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值