算法复杂度

226 阅读2分钟

算法复杂度分为时间复杂度和空间复杂度。

时间复杂度

时间复杂度的介绍

算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,时间复杂度常用“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