时间复杂度与空间复杂度总结

Agenda:什么是时间复杂度?

算法的执行效率:算法的执行时间与算法的输入值之间的关系

 例如:

def test(num):
    total = 0
    for i in range(num):
        total += i
    return total

时间复杂度就只看这个for 循环 用大O表示法就是O(n)

常见时间复杂度案例分析

O(1):表示我的算法执行时间和我的nums无关(没有for和while循环)

def O1(num):
    i = num
    j = num*2
    return i + j

O(logn):

def OlogN(num):
    i = 1 
    while (i

因为i*2 所以这里的while循环循环logn次

O(n):

def ON(num):
    total = 0
    for i in range(num):
        total += i
    return total

O(m+n):

def OMN(num1, num2):
    total = 0
    for i in range(num1):
        total += i
    for j in range(num2):
        total += j
    return total

执行时间就是mb+nc  b和c是固定值 所以就是m+n

O(nlogn):

def ONLogN(num1, num2):
    total = 0
    j = 0
    for i in range(num1):
        while (j < num2):
            total += i + j
            j = j * 2
    return total

for 循环嵌套while循环 就是n乘以logn

O(N^2):

def ON2(num):
    total = 0
    for i in range(num):
        for j in range(num):
            total += i + j
    return total

就是两个for循环嵌套 就是n乘以n

最后时间复杂度对比

时间复杂度与空间复杂度总结_第1张图片

O(1)< O(logn)(二分查找法)< O(n) < O(nlogn) (排序)< O(n^2) < O(2^n) < O(n!) 

尽量减少时间复杂度



Agenda: 

        什么是空间复杂度:算法的存储空间与输入值之间的关系 时间复杂度就是执行时间

        大O表示法

        常用的空间复杂度分析

        常用空间复杂度对比

例如:

def test(num):
    total = 0
    for i in range(num):
        total += i
    return total
def test(nums):
    array = [] 
    for num in nums:
        array.append(num)
    return array

第一段代码的空间复杂度就是 O(1)  不论total最后的数多大 他都只占一个int储存空间

第二段代码 array里面的有多少个数取决于nums里面有多少个数 所以空间复杂度就是O(n)

在看空间复杂度的时候 要看的就是变量 如果变量等于一个常量 就是O(1) 如果有一个变量是存储多个数据 且随着输入的改变而改变 就是其他。。

常用空间复杂度: 一般都是O(1)或O(n)

O(1) < O(N) < O(N^2)

Note:

时间和空间只能二选一

面试时:和面试官将清楚 哪个时间复杂度低 哪个空间复杂度低

工作时:时间大于空间                                                                                   

你可能感兴趣的:(算法与数据结构,蓝桥杯,职场和发展)