算法
时间复杂度
时间复杂度:用来估计算法运行时间的一个式子(单位)
常见的时间复杂度(按效率排序)
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效率相同
装饰函数直接装饰递归函数时,每次递归都会调用装饰函数,解决方法:另定义一个函数去装饰