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
小结:
时间复杂度是用来估计算法运行时间的一个式子(单位)。
一般来说,时间复杂度低的算法比复杂度低的算法快。
常见的时间复杂度(按用时排序)
不常见的时间复杂度(看看就好)
如何一眼判断时间复杂度?
4、空间复杂度
空间复杂度:用来评估算法内存占用大小的一个式子
列表查找:从列表中查找指定元素
1、顺序查找
从列表第一个元素开始,顺序进行搜索,直到找到为止
2、二分查找
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半
原文:http://www.cnblogs.com/lianzhilei/p/6538017.html