zoukankan      html  css  js  c++  java
  • fib

    空间复杂度

    • 如果代码开了数组,则为数组长度
    • 如果有递归,则为递归深度
    • 如果有数组有递归,取最大值

    递归:

    def fib(n):
        """ 递归:时间复杂度O(2**n),空间复杂度O(N),树的高度"""
        if n < 3:
            return 1
        else:
            return  fib(n - 1) + fib(n - 2)
    

    优化时间复杂度后写法:

    def fib2(n):
        """ 循环:时间复杂度O(N),空间复杂度O(1)"""
        a,b =0,1
        for x in  range(n):
            a,b = b,a+b
        return b
    
    def fib_while(n):
        """ 循环:T=O(N),S=O(1)"""
        a,b=0,1
        i=1
        while i<=n :
             print(b,end=" ")
             i =i+1
             a,b =b,a+b
    
    if __name__ == '__main__':

    for i in range(0,15):
    print(fib2(i),end=',')
    print(" =============")

    fib_while(15)

    结果如下:

    1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,
    =============
    1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
    Process finished with exit code 0

      

    总结:

    最坏:时间复杂度O(2^n),空间复杂度O(N)

    最好:时间复杂度O(N),空间复杂度O(1)

     

  • 相关阅读:
    grep: Linux基础命令及用法 -- grep
    [功能集锦] 003
    [功能集锦] 002
    [mysql相关集锦] 001
    [eclipse中使用Git插件] 008
    [eclipse相关] 001
    [代码优化集锦]
    [功能集锦] 001
    [java基础] 002
    [java基础] 001
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/15136877.html
Copyright © 2011-2022 走看看