算法基础
1、什么是算法?
算法(Algorithm):一个计算过程,解决问题的方法
2、复习:递归
递归的两个特点:
- 调用自身
- 结束条件
两个重要递归函数的对比:
# 由大到小 def func3(x): if x > 0 : print(x) func3(x-1) # func3(5) # 5 4 3 2 1 # 由小到大 def func4(x): if x > 0 : func4(x-1) print(x) func4(5) # 1 2 3 4 5
3、时间复杂度
时间复杂度:用来评估算法运行效率的一个东西:
print(‘Hello World‘) # 0(1) for i in range(n): # O(n) print(‘Hello World‘) for i in range(n): # O(n^2) for j in range(n): print(‘Hello World‘) for i in range(n): # O(n^3) for j in range(n): for k in range(n): print(‘Hello World‘)
第一个打印了一次时间复杂度为O(1);第二个打印了n次,所以时间复杂度为O(n);第三四个依次为n2和n的3次方
那么看看下面代码中的时间复杂度为多少?
# 非O(3) 而是O(1) print(‘Hello World‘) print(‘Hello Python‘) print(‘Hello Algorithm‘) # 非O(n2+n) 而是O(n2) for i in range(n): print(‘Hello World‘) for j in range(n): print(‘Hello World‘) # 非O(1/2n2) 而是O(n2) for i in range(n): for j in range(i): print(‘Hello World‘)
再看看下面代码:
# 时间复杂度 O(log2n) 或 O(logn) while n > 1: print(n) n = n // 2 # n=64输出: # 64 # 32 # 16 # 8 # 4 # 2
小结:
时间复杂度是用来估计算法运行时间的一个式子(单位)。
一般来说,时间复杂度低的算法比复杂度低的算法快。
常见的时间复杂度(按用时排序)
- O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
不常见的时间复杂度(看看就好)
- O(n!) O(2n) O(nn) …
如何一眼判断时间复杂度?
- 循环减半的过程?O(logn)
- 几次循环就是n的几次方的复杂度
4、空间复杂度
空间复杂度:用来评估算法内存占用大小的一个式子
列表查找
列表查找:从列表中查找指定元素
- 输入:列表、待查找元素
- 输出:元素下标或未查找到元素
1、顺序查找
从列表第一个元素开始,顺序进行搜索,直到找到为止
2、二分查找
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半
时间: 2024-11-13 02:06:31