Python学习笔记Day26

算法

时间复杂度

时间复杂度:用来估计算法运行时间的一个式子(单位)

常见的时间复杂度(按效率排序)
    O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^2logn)<O(n^3)
不常见的时间复杂度(看看就好)
    O(n!), O(2^n), O(n^n) ...

如何一眼判断时间复杂度?

1. 是否有循环减半的过程
    while n > 1:    
        print(n)
        n = n//2    # O(logn)
2. 几次循环就是n的几次方的复杂度

空间复杂度

空间复杂度:用来评估算法内存占用大小的一个式子

以空间换时间

列表查找:从列表中查找指定元素
输入:列表、待查找元素
输出:元素下标或未查找到元素

顺序查找 # O(n)
从列表第一个元素开始,顺序进行搜索,直到找到为止。

二分查找 # O(log n)
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。

一般递归会比不递归慢,但直接return接递归与不递归一样
因为递归时需要先进后出,直接return伪递归,不需要出来,结果与while效率相同

装饰函数直接装饰递归函数时,每次递归都会调用装饰函数,解决方法:另定义一个函数去装饰

原文地址:https://www.cnblogs.com/JeromeLong/p/13252597.html