赞
踩
https://blog.csdn.net/qq_17534301/article/details/82872357
算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度,是一种“渐进表示法”。其中f(n)是问题规模n的某个函数。
算法时间复杂度一般用大O记法。
一般是指所有的加法常数,没有循环项等,如下面这段代码:
d = [5000 50];
q = [3 3];
sigmar = 0.01;sigmac = 0.01;
C = randn(d(1),q(1));
R = randn(d(2),q(2));
以上5条语句全是赋值语句,代表所有的加法常数,因此上述这段代码的计算复杂度用O(1)表示即可。
线性阶一般涉及非嵌套循环,线性阶就是随着问题规模n的扩大,对应计算次数呈直线增长。
n = 100;
x = zeros(1,n);
for i = 1:n
x(i) = rand(1);
end
上述这段代码中,由于循环的次数为n,故此段代码的时间复杂度为O(n)。
n = 100;
y = zeros(n,n);
for i = 1:n % 该循环的时间频度为n
for j = 1:n % 该循环的时间频度为n^2
y(i,j) = rand(1); %时间频度为n^2
end
end
外层循环每执行1次,内层循环就需要执行n次,因此总体需要执行 n 2 n^2 n2次,故这段代码的时间复杂度为 O ( n 2 ) O(n^2) O(n2)。
首先要计算调用的该函数的时间复杂度是多少,计算总体的时间复杂度。
常用的时间复杂度所耗费的时间从小到大依次是:
O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
下面两个链接是转载的关于矩阵计算复杂度的例子:
https://blog.csdn.net/qq_23174517/article/details/97243408
两个普通矩阵相乘,如:
A
n
×
m
B
m
×
p
=
C
n
×
p
A_{n\times m}B_{m\times p} =C_{n\times p}
An×mBm×p=Cn×p
(1)用遍历算法则有两层循环,需要遍历n行和p列,而两层循环体的内部则是m个元素的乘积之和,因此时间频度为
T
(
n
)
=
n
+
n
p
+
n
p
m
T(n) = n+np+npm
T(n)=n+np+npm,因此时间复杂度为
O
(
n
p
m
)
O(npm)
O(npm);
(2)或者根据矩阵C来理解也可。矩阵C共有
n
×
p
n\times p
n×p个元素,每个元素是由A的一行和B的一列来计算的,每个元素的计算复杂度为
n
n
n,故矩阵C的计算复杂度为
O
(
n
p
m
)
O(npm)
O(npm)
A
n
×
m
B
m
×
n
=
C
n
×
n
A_{n\times m}B_{m\times n} =C_{n\times n}
An×mBm×n=Cn×n
当
p
=
n
p=n
p=n时,矩阵C的计算复杂度为
O
(
n
2
m
)
O(n^2m)
O(n2m)。
三个普通矩阵相乘,如:
A
n
×
m
B
m
×
n
C
n
×
p
=
D
n
×
p
A_{n\times m}B_{m\times n} C_{n\times p} =D_{n\times p}
An×mBm×nCn×p=Dn×p
根据两个矩阵相乘的计算复杂度算法,矩阵AB =E的计算复杂度为
O
(
n
2
m
)
O(n^2m)
O(n2m),矩阵EC=D的计算复杂度为
O
(
n
2
p
)
O(n^2p)
O(n2p),故三个矩阵相乘的总体时间复杂度应该为两者之和,但根据推导大O阶原则要只保留最高阶项,所以,总体时间复杂度为
O
(
n
2
max
(
m
,
p
)
)
O(n^2\max(m,p))
O(n2max(m,p))。
向量的协方差公式如下:
矩阵的协方差与向量的协方差定义相似:
计算协方差矩阵的时间复杂度如下:
综上所述,上述矩阵X由列组成的协方差矩阵的时间复杂度为 O ( n 2 m ) O(n^2m) O(n2m),和矩阵运算的复杂度是一样的,其实也可以通过矩阵来求解协方差矩阵 X ′ X / ( m − 1 ) X'X/(m-1) X′X/(m−1),计算复杂度是一样的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。