算法的时间复杂度与空间复杂度(总结合集+例子)

本文详细介绍了算法的时间复杂度和空间复杂度,包括定义、计算方法以及常见的时间复杂度级别。通过实例展示了从常数阶到平方阶的计算过程,并指出在算法设计中如何平衡时间和空间复杂度。最后提到了空间复杂度的重要性,指出可以通过牺牲空间来换取时间效率。
摘要由CSDN通过智能技术生成

定义

时间复杂度

  在进行算法分析时,语句总的执行次数 T ( n ) T(n) T(n)是关于问题规模 n 的函数,进而分析 T ( n ) T(n) T(n)n 的变化情况并确定 T ( n ) T(n) T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作 T ( n ) = O ( f ( n ) ) T(n) = O(f(n)) T(n)=O(f(n))。其中 f ( n ) f(n) f(n)是问题规模 n 的某个函数。

空间复杂度

  通过计算算法所需的储存空间实现,算法空间复杂度的计算公式记作:
S ( n ) = O ( ( f ( n ) ) ) S(n) = O((f(n))) S(n)=O((f(n)))
其中,n 为问题的规模, f ( n ) f(n) f(n)为语句关于 n 所占存储空间的函数。

时间复杂度的计算方法

即推导大O阶方法
1.用常数1取代运行时间中的所有加法常数。
2.在修改后的运行次数函数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。
得到的结果就是大O阶

  下面给出实例具体看如何求解时间复杂度。

1.常数阶

  例如下面这段代码:

int a = 1, b = 2;    /*执行1次*/
a = a + b;    /*执行1次*/
b = b + a;    /*执行1次*/

每段代码均执行一次,不断执行多少段这样的代码,其次数都是常数,是有限的,所以此时其具有O(1)的时间复杂度,又称为常数阶。

2.线性阶

  循环结构对时间复杂度具有较大的影响

  下面这段代码,时间复杂度为O(n),因为循环体中的代码要执行 n 次。

int i, sum = 0;
for(i = 0; i < n; i++)
{
   
	sum = i + j;
}
3.对数阶
int count = 1;
while (count < n)
{
   
	count = count * 2;
}

  上面这段代码,设循环次数为 x x x,则得到下面等式:
2 x = n x = l o g 2 n 2^x = n \\ x = log_2n 2x=nx=log2n
所以这个循环的时间复杂度为O( l o g n logn logn)

4.平方阶

  下面给出一个循环嵌套:

int i,j;
for
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值