算法与设计模式-可乔

算法性能评估-python

规模:数据的大小对算法至关重要

测试环境:
运行环境:环境的快慢对算法至关重要

算法的运行时间与数据规模成正比


空间复杂度是存储空间与数据规模之间的增长关系

概论

  • 时间复杂度
  • 空间复杂度

时间复杂度

  • 规模: 不同量级有不同的速度,比如水 vs 水杯: 水
  • 测试环境: 在不同测试环境,速度也不同,比如手机 vs 电脑: 电脑的速度更快

大 O 表示法

  • 运行时间:T(n) = (2n + 1) * unit
  • T(n) = O(f(n)) , O表示 T(n) 与 f(n) 成正比
  • O 表示渐近时间复杂度
  • 表示代码执行时间随数据规模增长的变化趋势
  • 当 n 很大时,低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略.就可以记为:T(n) = O(n); T(n) = O(n2)。
def tmp(n):
    add = 0
    for i in range(n):
        add += i
    return add

只关注循环次数多的代码

def tmp(n):
    add = 0
    for i in range(n):
        add += i
    return add

O(n)

选大量级

def tmp(n):
    for i in range(999):
        print(123)

    for i in range(n):
        print(1)

    for i in range(n):
        for j in range(n):
            print(2)

O(n2)

嵌套循环要乘积

def tmp(n):
    for i in range(n):
        a(i)

def a(n):
    for i in range(n):
        print('c')

O(n2)

常见复杂度分析

  • 非多项式量级(过于低效) : O(2n) 和 O(n!)
  • 多项式量级:O(1), O(logn), O(n), O(nlogn), O(nk)

空间复杂度

  • 渐进时间复杂度:表示算法的执行时间与数据规模之间的增长关系。
  • 渐进空间复杂度:表示算法的存储空间与数据规模之间的增长关系。
def tmp(n):
    a = [1]*n
    for i in a:
        print(i)

空间复杂度是: O(n)

数组与列表-python