时间复杂度 + 空间复杂度(Time complexity + space complexity)

// 计算阶乘递归Factorial的时间复杂度?

long long Fac(size_t N)
{
	if (0 == N)				// 递归算法:递归次数N * 每次递归调用的次数(常数次,记为1)
		return 1;
							//	递归N次,时间复杂度 O(N)
return Fac(N - 1) * N;
//}

斐波那契数列的时间复杂度?

long long Fib(size_t N)
{
	if (N < 3)
		return 1;
						//	O(N)
	return  Fib(N - 1) + Fib(N - 2);
}

在这里插入图片描述

int main()
{
	printf("%lld", Fib(10));
	printf("%lld", Fib(20));
	printf("%lld", Fib(30));
	printf("%lld", Fib(40));
	printf("%lld", Fib(50));
	return 0;
}

主函数调用一下Fib,40之前速度还可以,到50开始就很慢了
所以实际中无用,效率太低

**

二 、 空间复杂度

**

空间复杂度是对一个算法在运行过程中临时占用额外存储空间大小的量度,不是程序占用了多少bytes的空间
所以空间复杂度算的是 变量 的个数。
空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法

// 计算BubbleSort的空间复杂度?

void BubbleSort(int* a, int n)
{
	assert(a);								// 计算 **额外** 变量的个数
	for (size_t end = n; end > 0; --end)	//此处end是1个
	{
		int exchange = 0;
		for (size_t i = 1; i < end; ++i)	//i是1个
		{									//每次进入for循环,i生成,退出销毁,再进入生成用的是和上一次同一块空间
			if (a[i - 1] > a[i])
			{
				Swap(&a[i - 1], &a[i]);
				exchange = 1;				// exchange是1个
			}
		}				
		if (exchange == 0)
			break;
	}
}

end + i + exchange共3个,空间复杂度O(1) - 3是常数个,也就是O(1)

// 计算Fibonacci的空间复杂度?

long long* Fibonacci(size_t n)
{
	if (n == 0)
		return NULL;

	long long* fibArray = (long long*)malloc((n + 1) * sizeof(long long));
	fibArray[0] = 0;	// 从0和1可以得到2
	fibArray[1] = 1;	// 从1和2可以得到3	
	for (int i = 2; i <= n; ++i)
	{					// 从n-1和n-2得到n,最后返回数组地址
		fibArray[i] = fibArray[i - 1] + fibArray[i - 2];
	}					
	return fibArray;
}

空间复杂度O(N),实际是N+1+i等,后面常数,只剩N
时间复杂度O(N),相比于只有递归O(2^N),优化很多

// 计算阶乘递归Factorial的空间复杂度?

long long Fac(size_t N)
{
	if (0 == N)			
		return 1;
							
	return Fac(N - 1) * N;
}

在这里插入图片描述

//计算斐波那契递归Fibonacci的空间复杂度?

long long Fib(size_t N)
{
	if (N < 3)
		return 1;
						
	return  Fib(N - 1) + Fib(N - 2);
}

空间复杂度 - 求递归深度
空间可以重复利用,不累计
时间一去不返,不可累计

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值