时间复杂度
1 什么是时间复杂度?
算法的执行效率
算法的执行时间与算法的输入值的关系
2 大O表示法
def test(num):
total=0;#执行时间a
for i in range(num):#单个执行时间b,一共num个b num*b
total +=i;#单个执行时间c
return total
总共执行性时间 a+numb+c
由于 a,c与numb之间时间差之太大,所以可以看成执行时间=num*b,记作O(n)
3 案例分析
O(1)
def 01(num):
i=num
j=num*2#a+b,与num无关
return i+j
O(logN)
def OlogN(num):
i=1#a
while (i<num):
i=i*2#执行log2 N次,一次b
return i
#总共时间 a+log2 N*b,可看做O(logN)
O(M+N)
def OMN(num1,num2):
total=0
for i in range(num1):m*b
total+=i
for j in range(num2):n*b
total+=j
return total
O(NlogN)
def ONlogN(num1,num2):
total=0
j=0
for i in range(num1):
while(j<num2):
total+=i+j
j=j*2
return total
O(N^2)
def ON2(num):
total=0
for i in range(num):
for j in range(num):
total+=i+j
return total
重点看循环
4
时间复杂度对比
O(1)<O(logN)<O(N)<O(NlogN)<O(N^2)<O(2 ^N)<O(N ^2)
空间复杂度
1 什么是空间复杂度?
算法的存储空间与输入值之间的关系
先看下面两个代码
def test1(num):
total=0
for i in range(num):
total+=i
return total
def test2(num):
array=[]
for num in nums:
array.append(num)
return array
首先for循环是不占空间的,只有变量占空间
test1就是一个int 型total只占一个int空间所以
空间复杂度O(1)
test2 里有一个数组array,那么这个数组会占用n个空间,故他的空间复杂度为O(N)
空间复杂度取决于(1)变量类型(2)递归栈
常见空间复杂度 O(1),O(N),O(N ^2)(二维数组)