复杂度分析(上)
- 什么是复杂度
- 一段程序它执行所需要的时间(次数)
代码演示
def func():
a = 1
b = 2
c = 3
if __name__ =='__main__':
func()
# 时间复杂度? -> 执行次数
上述代码他的复杂度:
假设每次执行都花了 unit_t 时间,上述代码(func) 执行了3次,花费 3 * unit_t 的时间。
代码演示2
# 代码演示2
def func2(n):
sum = 0 # unit_t
for i in range(n): # n * unit_t
sum += i # n * unit_t
return sum
分析:
上述代码执行的次数:2*n +1;
执行时间: T = (2 * n + 1) * unit_t
代码演示3
# 代码演示3
def func3(n):
for i in range(n): # n 次
for j in range(n):# n*n 次
print(i * j) # n*n 次
分析:
执行次数: n^2次
时间: 2*n^2 * unit_t
- 时间复杂度
- 大O表示法
- 对于有限次数,例如代码示例1——执行次数有限,O(1)
- 线性相关的,比如实例2——O(n),比如实例3——O(n^2)
- 复杂度只取最高次幂;
代码演示4
# 代码演示4
def func1(n): # O(n)
sum = 0
for i in range(n):
sum += i
return sum
def func2(m): # O(n^2)
sum = 0
for i in range(m):
for j in range(m):
sum += i * j
return sum
def fun3(o): # O(n) + O(n^2)
return func1(o) + func2(o)
分析: func3的时间复杂度?
T(n) = O(n)+O(n^2)
O(n^2)
代码示例5
# 示例5
def func5(n):
i = 1
while i < n:
i *= 3
假如,n = 27;
第一次: i = 3
第二次: i = 9
第三次: i = 27
log 3 27 = 3
-
时间复杂度: O(log3N) -> O(3logC * log N) -> O(logn)
-
小结
- 明确了复杂度和计算机执行时间的关系
- 复杂度的概念
- 常见的复杂度 O(1)、O(n) 、O(n^2) 、O(logn)