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

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<num):
        i = i * 2
    return 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

最后时间复杂度对比

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:

时间和空间只能二选一

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

工作时:时间大于空间                                                                                   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyttonkeepgoing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值