【时间复杂度和空间复杂度】
时间复杂度和空间复杂度
- 1、时间复杂度
- 1.1、常见的时间复杂度案例
- 1.2、时间复杂度大小对比图
- 空间复杂度
- 1.1、常见的空间复杂度案例
- 理解
1、时间复杂度
1、什么是时间复杂度?
算法的执行效率
算法的执行时间与算法的输入值之间的关系
2、什么是大
O
表示法?
O(N)
,其中N
指的是例1
中的num
,N = num
【例1:】
def test(num):
total = 0 # 执行时间为:a;
for i in range(num):
total += i # 执行时间为:b;num次为:num * b;
return total # 执行时间为:c;
# 所以test类的时间复杂度 = a + num * b + c
所以当num很大
时,那么test
类的时间复杂度主要基于num * b
。那么例1
中对时间复杂度影响最大
的就是这个for循环
。最后定义例1的时间复杂度为O(N)
。
1.1、常见的时间复杂度案例
常见的时间复杂度:
O
(
1
)
O(1)
O(1)、
O
(
l
o
g
n
)
O(logn)
O(logn)、
O
(
n
)
O(n)
O(n)、
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)、
O
(
n
2
)
O(n^2)
O(n2)
【例2:
O
(
1
)
O(1)
O(1)】
def o1(num):
i = num # 执行时间为:a;
j = num * 2 # 执行时间为:b;
return i + j # 执行时间为:c;
# 所以o1类的时间复杂度 = a + b + c,为常量,和num的个数无关
定义例2的时间复杂度为O(1)
。
【例3:
O
(
N
)
O(N)
O(N)】
def ON(num):
total = 0 # 执行时间为:a;
for i in range(num):
total += i # 执行时间为:b;num次为:num * b;
return total # 执行时间为:c;
# 所以test类的时间复杂度 = a + num * b + c,和num的个数有关
定义例3的时间复杂度为O(N)
。
【例4:
O
(
l
o
g
N
)
O(logN)
O(logN)】
def OlogN(num):
i = 1 # 执行时间为:a;
while (i < num):
total = i * 2 # 执行时间为:b;X次为:num = i*2^X,X = log2(num/i)
return i # 执行时间为:c;
# 所以test类的时间复杂度 = log2(num/i),和num的个数有关,因为i为常数,可忽略
定义例4的时间复杂度为O(logN)
。
【例5:
O
(
N
+
M
)
O(N + M)
O(N+M)】
def ON(num1, num2):
total = 0 # 执行时间为:a;
for i in range(num1):
total += i # 执行时间为:b;num次为:num1 * b;
for i in range(num2):
total += i # 执行时间为:b;num次为:num2 * b;
return total # 执行时间为:c;
# 所以test类的时间复杂度 = a + num1 * b + num2 * b + c,和num的个数有关
定义例5的时间复杂度为O(N + M)
。
【例6: O ( N l o g N ) O(NlogN) O(NlogN)】
def OlogN(num):
i = 1 # 执行时间为:a;
for i in range(num1): # 执行 num1次
while (i < num2):
total += i + j # 执行时间为:b;X次为:num2 = i*2^X,X = log2(num2/i)
j = j * 2
return i # 执行时间为:c;
# 所以test类的时间复杂度 = (num1)*log2(num2/i),和num的个数有关,因为i为常数,可忽略
定义例4的时间复杂度为NO(logN)
。
【例5:
O
(
N
+
M
)
O(N + M)
O(N+M)】
def ON(num1, num2):
total = 0 # 执行时间为:a;
for i in range(num1):
for i in range(num2):
total += i + j # 执行时间为:b;num1 * num2次为:num1 * num2 * b;
return total # 执行时间为:c;
# 所以test类的时间复杂度 = a + num1 * num2 * b + c,和num的个数有关
定义例4的时间复杂度为 O ( N 2 ) O(N^2) O(N2)。
1.2、时间复杂度大小对比图
时间复杂度从大到小排列: O ( N ! ) O(N!) O(N!) > O ( 2 N ) O(2^N) O(2N) > O ( N 2 ) O(N^2) O(N2) > O ( N l o g N ) O(NlogN) O(NlogN) > O ( N ) O(N) O(N) > O ( l o g N ) O(logN) O(logN) > O ( 1 ) O(1) O(1)
空间复杂度
1、什么是空间复杂度?
算法的存储空间与算法的输入值之间的关系
(占空间的都是我们申明的变量)2、大
O
表示法?
O(N)
,其中N
指的是例1
中的num
,N = num
1.1、常见的空间复杂度案例
常用的空间复杂度就这两种。
理解
空间复杂度一般指的就是磁盘空间,所以工作中一般优先时间复杂度。