C语言之时间复杂度&空间复杂度

Posted Ja_king_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言之时间复杂度&空间复杂度相关的知识,希望对你有一定的参考价值。

一.时间复杂度

1.算法的时间复杂度
在这里插入图片描述
记忆方法:常对幂指阶
在这里插入图片描述

在这里插入图片描述
2.一个循环结构:
T(n)=O(n)
循环结构中嵌套循环结构时:
T(n)=O(n*n)

3.顺序执行的代码只会影响常数项,可以忽略

4.只需挑循环结构中某一条语句进行分析

void loveYou(int n){
	int i = 1;
	while (i <= n) {
		i *= 2;
		printf("love you!!");
	}
	printf("fight!!!");
}

假设循环x次
分析循环可知i=2的x次方
所以x=log2n,即T(n)=O(log2n)
在这里插入图片描述

二.空间复杂度

1.无论问题规模如何变化,算法运行所需的内存空间都是固定的常量,算法空间复杂度为:
S(n)=O(1)

void tese(int n){
	int flag[n];
	int i;
}

假设一个int变量占4B…
则所需内存空间为=4+4n+4=4n+8
即S(n)=O(n)

3.若定义一个二维数组:

void tese(int n){
	int flag[n][n];
	int i;
}

则空间复杂度为:S(n)=O(n*n)

4.函数递归调用也会带来内存开销
在这里插入图片描述
空间复杂度为:S(n)=O(n) (递归调用深度)

以上是关于C语言之时间复杂度&空间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

算法之带你了解时间&空间复杂度

算法之带你了解时间&空间复杂度

算法之带你了解时间&空间复杂度

算法之带你了解时间&空间复杂度

八大排序算法C语言过程图解+代码实现(插入,希尔,选择,堆排,冒泡,快排,归并,计数)

数据结构之八大排序算法(C语言实现)