你不会还不知道时间复杂度和空间复杂度怎么算吧?(用代码举例)

时间复杂度和空间复杂度的算法与辨析举例

时间复杂度

即执行算法的时间成本

基础时间复杂度

基本操作执行次数:一个循环内的操作次数
时间复杂度=循环次数*每步循环中的操作数

  1. 例子1:
 void function(int n)
{
 	for(int i=0; i<n; i++)
	 {
		printf("操作1");
		printf("操作2");
		printf("操作3");
 	}
 }

每个循环要执行3次操作,如果需要执行n个循环,则时间复杂度T(n)=3n。

  1. 例子2:
 void function(int n)
{
 	for(int i=n; i>1; i/=2)
	 {
		printf("操作1");
		printf("操作2");
		printf("操作3");
		printf("操作4");
		printf("操作5");
 	}
 }

总共要进行log2(n)次,每一次循环执行5步操作,所以时间复杂度T(n)=5logn

  1. 例子3:
 void function(int n)
{
	printf("操作1");
	printf("操作2");
 }

执行的时间与n无关,时间复杂度T(n)=2

  1. 例子4:
    冒泡排序中,随着排序次数增加需要的操作减少,为等差数列
void function(int n)
{
 	for(int i=0; i<n; i++)
 	{
 		for(int j=0; j<i; j++)
 		{
 			printf("等待");
 		}
 		printf("操作2");
 	}
}

T(n)=0.5n^2+0.5n

渐进时间复杂度

一般用O来表示,即把时间复杂度T(n)简化为一个数量级,用数量级之间的对比会更加直观。
简化过程有如下原则:

  1. 如果运行时间是常数量级,则用常数1表示
  2. 只保留时间函数中的最高阶项
  3. 如果最高阶项存在,则省去最高阶项前面的系数

所以上面四个例子的T(n)分别为:
4. T(n)=O(n)
5. T(n)=O(logn)
6. T(n)=O(1)
7. T(n)=O(n^2)

空间复杂度

即执行算法的空间成本
主要根据问题的规模计算

  1. 例子1:常量空间
void function(int n)
{
	int var = 3;}

存储空间大小固定,和输入规模没有直接的关系,空间复杂度是O(1)

  1. 例子2:线性空间
void function(int n)
{
	int [] arry = new int[n];}

线性集合的空间复杂度可以记为O(n)

  1. 例子3:二维空间
void function(int n)
{
	int [][] arry = new int[n][n];}

二维数组的空间复杂度可以记为O(n^2)

  1. 例子4:递归空间(例如方法调用栈):我调用我自己
void function(int n)
{
	if(n<=1)
	{
		return;
	}
		function(n-1)}

空间复杂度与递归深度为正比,也是线性的,空间复杂度可以记为O(n)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KingsMan666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值