算法复杂度分为时间复杂度和空间复杂度。
时间复杂度
时间复杂度的介绍
算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,时间复杂度常用“O”表述,使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。
一个算法中语句的执行次数为时间频度
所有代码的执行时间T(n)与每行代码的执行次数n成正比 T(n) = O(f(n)) ,一般来说,时间复杂度高的代码比时间复杂度低的代码运行的时间要长。
各代码的时间复杂度
print("hello world") # O(1)
1.此处的时间复杂度为O(1)
b = 2
a = 1
print(a)
print(b) # O(1)
2.此处的时间复杂度为O(1)
for i in range(n):
print("hello world") # O(n)
3.此处的时间复杂度为O(n)
for i in range(n):
for j in range(n)
print("hello world") # O(n^2)
4.此处的时间复杂度为O(n^2)
for i in range(n):
for j in range(n):
for k in range(n):
print("hello world") # O(n^3)
5.此处的时间复杂度为O(n^3)
n = 64
while n > 1:
print(n)
n = n // 2 # O(logn)
6.此处的时间复杂度为O(logn)
从1 2 3的时间复杂度可以看出来 时间复杂度与代码的执行次数成正比,当语句的执行次数为一个常数时,时间复杂度为O(1),随着语句的执行次数n的增加,时间复杂度不断增大。
当时间频度不同时,它们的时间复杂度也可能相同
例如:
T(n) = n^2+2n+1 与 T(n) = 3n^2 它们的时间频度不同,但是时间复杂度相同,时间复杂度都为O(n^2)
记住 : 时间复杂度只比较循环执行次数最多的一段代码
时间复杂度的比较
常见的时间复杂度的比较 O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^2logn) < O(n^3)
空间复杂度
空间复杂度:评估算法内存占用大小
a = "python" #空间复杂度为1
a = "python"
b = "java"
c = "C" #空间复杂度为1
a = [1,2,3,4] #空间复杂度为4
a = [[1,2],[3,4],[5,6],[7,8]] #空间复杂度为4*2