Agenda:什么是时间复杂度?
算法的执行效率:算法的执行时间与算法的输入值之间的关系
例如:
def test(num):
total = 0
for i in range(num):
total += i
return total
时间复杂度就只看这个for 循环 用大O表示法就是O(n)
常见时间复杂度案例分析
O(1):表示我的算法执行时间和我的nums无关(没有for和while循环)
def O1(num):
i = num
j = num*2
return i + j
O(logn):
def OlogN(num):
i = 1
while (i<num):
i = i * 2
return i
因为i*2 所以这里的while循环循环logn次
O(n):
def ON(num):
total = 0
for i in range(num):
total += i
return total
O(m+n):
def OMN(num1, num2):
total = 0
for i in range(num1):
total += i
for j in range(num2):
total += j
return total
执行时间就是mb+nc b和c是固定值 所以就是m+n
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
for 循环嵌套while循环 就是n乘以logn
O(N^2):
def ON2(num):
total = 0
for i in range(num):
for j in range(num):
total += i + j
return total
就是两个for循环嵌套 就是n乘以n
最后时间复杂度对比
O(1)< O(logn)(二分查找法)< O(n) < O(nlogn) (排序)< O(n^2) < O(2^n) < O(n!)
尽量减少时间复杂度
Agenda:
什么是空间复杂度:算法的存储空间与输入值之间的关系 时间复杂度就是执行时间
大O表示法
常用的空间复杂度分析
常用空间复杂度对比
例如:
def test(num):
total = 0
for i in range(num):
total += i
return total
def test(nums):
array = []
for num in nums:
array.append(num)
return array
第一段代码的空间复杂度就是 O(1) 不论total最后的数多大 他都只占一个int储存空间
第二段代码 array里面的有多少个数取决于nums里面有多少个数 所以空间复杂度就是O(n)
在看空间复杂度的时候 要看的就是变量 如果变量等于一个常量 就是O(1) 如果有一个变量是存储多个数据 且随着输入的改变而改变 就是其他。。
常用空间复杂度: 一般都是O(1)或O(n)
O(1) < O(N) < O(N^2)
Note:
时间和空间只能二选一
面试时:和面试官将清楚 哪个时间复杂度低 哪个空间复杂度低
工作时:时间大于空间