一、什么是时间复杂度
算法的执行效率
算法的执行时间与算法的输入值之间的关系
例:
def test(num):
total = 0
for i in range(num):
total += i
return total
假设该示例中“total = 0”的执行时间为a,“total += i”的执行时间为b,“return total”执行时间为c,num=N,故总执行时间为a+Nb+c。
其中对总执行时间影响最大的是Nb。
(时间复杂度不关心系数和小的执行时间。)
** 时间复杂度的大o表示法:o(N)。**
常量:o(1)
一般算时间复杂度要看代码中是否有for/while循环。
二、常见的时间复杂度案例分析:
o(1) o(log n) o(n) o(nlogn) o(n²)
- o(1):表示算法执行时间与num无关。
def O1(num):
i = num
j = num*2
return i+j
- o(log n):
def OlogN(num):
i = 1
while(i<num):
i = i*2
return i
num = 2ⁿ
3. o(n):
def test(num):
total = 0
for i in range(num):
total += i
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
a+b+N(logN+c)+d
- o(n²):
def ON2(num):
total = 0
for i in range(num):
for j in range(num):
total += i+j
return total
o(1)<o(logN)<o(N)<o(NlogN)<o(n²)<o(2ⁿ)<o(n!)
二分查找法 排序
做算法题时尽量减少空间复杂度
三、什么是空间复杂度
算法的存储空间与输入值之间的关系
def test(num):
total = 0
for i in range(num):
total += i
return total
变量是常量时是o(1)
所占用的空间大小是一定值,不随输入值改变而改变。
def test(num):
array = []
for num in nums:
array.append(num)
return array
o(N)
四、常用空间复杂度:
o(1) o(n) o(n²) o(log n) o(nlogn)
变量是数组或多个数集合在一起的情况可能为o(n)或 o(n²)
是否递归:是递归则为 o(N)
o(1)< o(n)< o(n²)
很多情况下,时间和空间只能二选一