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

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

image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容