算法时间和空间复杂度分析

image.png

非常糟糕的复杂度 : O(n!) 、O(2^n) 、O(n^2)
比较糟糕的 :O(nlog n)
可以接受的 :O(n)
还不错的:O(n)
非常好的:O(logn) 、O(1)

如何计算时间复杂度

  • 如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为O(1)

  • 时间复杂度只关注最高数量级,且与之系数也没有关系。

语句频度T(n) = 2 + 2*n + 1,那么时间复杂度为O(2*n + 3) = O(n)
def fun(n):
    count1 = 0
    count2 = 0
    for i in range(n):
        count1 += 1
        count2 += 2
    return count
  • 对于「多个循环」,假设循环体的时间复杂度为O(n) 以下例子是 O(nn1) = O(n^2)
def fun(n):
    count = 0
    for i in range(n):
        for j in range(n):
            count += 1
    return count
  • 顺序执行的语句第1部分复杂度为O(n2),第2部分复杂度为O(n),总复杂度为max(O(n2), O(n)) = O(n^2)
def fun(n):
    # 第1部分复杂度为O(n^2)
    count = 0
    for i in range(n):
        for j in range(n):
            count += 1
    # 第2部分复杂度为O(n)
    for i in range(n):
        count += 2
    return count
  • 对于「条件判断语句」,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。当n >= 0分支的复杂度最大,即总复杂度为O(n^2)
def fun(n):
    if n >= 0:
        # 第1部分复杂度为O(n^2)
        count = 0
        for i in range(n):
            for j in range(n):
                count += 1
    else:
        # 第2部分复杂度为O(n)
        for i in range(n):
            count += 2
    return count

「总结:时间复杂度分析的基本策略是:从内向外分析,从最深层开始分析。如果遇到函数调用,就要深入函数进行分析。」

image.png

image.png
image.png
image.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ehRosjHD-1658987859508)(https://upload-images.jianshu.io/upload_images/17975624-c7278134aee735a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值