时间复杂度和空间复杂度

本文介绍了时间复杂度和空间复杂度的概念,作为衡量算法效率的重要指标。时间复杂度包括常数阶O(1),线性阶O(n),对数阶O(logN),线性对数阶O(nlogN)和平方阶O(n²)等,并通过实例解释了不同阶复杂度的含义。同时,文章也简要讨论了空间复杂度,指出其通常与数组长度和递归深度相关。

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

  • 时间复杂度:执行当前程序消耗的度量
  • 空间复杂度:当前程序运行占用内存的度量

以上两个维度去衡量一个算法的耗时与占用内存,用big O 来表示

时间复杂度

常数阶复杂度 O(1)

执行的程序中不存在循环,比如

a = 1
b = 2
print(a+b)

在一段代码中执行的次数是常数,其时间复杂度就是O(1)

线性阶复杂度O(n)

在执行的程度中存在单层循环,时间复杂度为循环的次数n,比如

for i in range(0, n):
	print(i)
对数阶O(logN)
 i = 1
while(i<n):
    i = i * 2

每一次执行循环体,i的值就乘以2,循环x次之后,i 大于 n退出循环体,结束运行,也就是说 2 的 x 次方等于 n,那么 x = log2^n,则时间复杂度为O(logN)

线性对数阶O(nlogN)

O(nlogN) = O(N)x O(logN),在上述的循环体中增加时间负责度为O(N)的循环,如

for i in range(0,n):
	while(i<n):
		i = i * 2
平方阶O(n²)

两个O(N)嵌套循环

for i in range(0,n):
	for j in range(0,n):
		print('xxxx')

依次可类推三阶、K方阶的复杂度

常见的时间复杂度

  • 二分查找 O(logn)
  • 二叉树遍历O(n):每个节点每次只查找一个且仅查找一次
  • 有序二维矩阵O(n)
  • 归并排序O(nlogn)
  • 记忆化递归O(n)

空间复杂度

与时间复杂度类似,但是比时间复杂度简单。
原则:

  1. 数组的长度
  2. 递归的深度

数组的长度基本上空间复杂度,如果开了n个数的一维数组,则空间复杂度是O(n),如果两维数组,数组的长度为n的平方,则空间复杂度就是O(n**2)

如果有递归,递归的深度就是空间复杂度。如果既有递归,又有数组,则它们两的最大值就是空间复杂度

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值