Matlab 时间复杂度(以大O为单位)
我有一个对图像进行4级分解的代码。这些级别类似于将图像分解为4个级别的图像小波变换:近似部分和三个详细部分。我实现的代码使用广义SVD来进行分解。这是密码Matlab 时间复杂度(以大O为单位),matlab,time,time-complexity,Matlab,Time,Time Complexity,我有一个对图像进行4级分解的代码。这些级别类似于将图像分解为4个级别的图像小波变换:近似部分和三个详细部分。我实现的代码使用广义SVD来进行分解。这是密码 function[Y,U] = MSVD1(X) %multiresolution SVD (MSVD) %input-> x: image (spatial domain) %outputs-> Y: one level MSVD decomposition of x
function[Y,U] = MSVD1(X)
%multiresolution SVD (MSVD)
%input-> x: image (spatial domain)
%outputs-> Y: one level MSVD decomposition of x
% U: the unitary matrix (U in SVD)
[m,n] = size(X);
m = m/2; n = n/2;
A = zeros(4,m*n);
for j = 1:n
for i = 1:m
A(:,i + (j-1)*m) = reshape(X((i-1)*2+(1:2),(j-1)*2+(1:2)),4,1);
end
end
[U,S] = svd(A);
T = U'*A;
Y.LL = reshape(T(1,:),m,n);
Y.LH = reshape(T(2,:),m,n);
Y.HL = reshape(T(3,:),m,n);
Y.HH = reshape(T(4,:),m,n);
end
现在,这其中涉及的基本操作是使用SVD。所以我的问题是,用大O符号表示的时间复杂度是否应该和矩阵的标准奇异值分解一样?如果不是,我们需要考虑哪些术语来确定图像输入大小的复杂性?重塑元素是否也增加了时间复杂性,还是仅仅是O1?
有人能帮忙吗?首先,循环内恒定大小重塑的复杂性是O1。因此,for循环的复杂性为\Thetam*n。其次,svd的复杂度是Omaxm,n*minm,n,根据函数返回的数据,它可以是Omaxm,n^2。此外,根据@Daniel注释,代码末尾的最坏情况是重塑,它通常小于此值
因此,代码的复杂性为Omaxm,n^2。此外,由于循环,它是Omegam*n.首先,循环内恒定大小重塑的复杂性为O1。因此,for循环的复杂性为\Thetam*n。其次,svd的复杂度是Omaxm,n*minm,n,根据函数返回的数据,它可以是Omaxm,n^2。此外,根据@Daniel注释,代码末尾的最坏情况是重塑,它通常小于此值
因此,代码的复杂性为Omaxm,n^2。此外,由于循环,它是Omegam*n.一些关于重塑的信息一些关于重塑的信息不是Omaxm,n*minm,n==Om*n?@AnderBiguri是的,确实:不是Omaxm,n*minm,n==Om*n?@AnderBiguri是的,确实: