数据结构04:算法复杂度分析

算法复杂度分析

在前面提到了时间复杂度类似于O(1)、O(n)等,O符号的意思,大概可以理解为操作的次数和数据个数的比例关系。比如:O(1)就是有限次数操作,O(n)就是操作正比于你的元素个数。

大O表示法

考虑计算n*n矩阵所有元素的和
0 1 2
3 4 5
6 7 8

#方法一
total_sum = 0
for i in range(n):
    row_sum[i] = 0
    for j in range(n):
        row_sum[i] = row_sum[i] + matrix[i, j]
        total_sum = total_sum + matrix[i, j]
        
#方法二
total_sum = 0
for i in range(n):
    row_sum[i] = 0
    for j in range(n):
        row_sum[i] = row_sum[i] + matrix[i, j]
    total_sum = total_sum + matrix[i, j]  #注意此处和上边不同

其中,方法一的关键操作在j循环中,两步加法操作,由于嵌套在第一个循环里,其操作步骤是(2n)*n = 2n^2.
方法二的求和只有n次操作,他的操作次数是n + n * n = n^2 + n

如何计算时间复杂度

上边两个方法中,当n非常大的时候,n^2的数值将占有主要地位,从此可以忽略n的影响,因此两个方法的时间复杂度均为O(n)。

常用时间复杂度

O名称(举例)
1常量时间(一次赋值)
log n对数时间(折半查找)
n线性时间(线性查找)
nlog n对数线性时间(快速排序)
n^2平方(两重循环)
n^3立方(三重循环)
2^n指数(递归求斐波那切数列)
n!阶乘(旅行商时间)

空间复杂度

相对时间复杂对,空间复杂度讨论较少。空间复杂度相对好算一些,就是每个元素的空间占用乘以总的元素数。
有些算法需要额外的空间存储,有些可以本地解决。

时间换空间,空间换时间

空间换时间: 比如典型的就是Python的集合,虽然比较浪费空间,但是却能用O(1)的时间复杂度来判重
时间换空间: 典型的时缓存失效算法,我们不可能缓存下无限容量的数据,就会使用一些缓存淘汰算法来保证空间可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值