matlab代码的高时间复杂度降低
我试图在matlab中运行这段代码,但它的复杂性很高 尽管如此,matlab在for循环方面还是非常慢。 请帮我优化下面的代码matlab代码的高时间复杂度降低,matlab,optimization,Matlab,Optimization,我试图在matlab中运行这段代码,但它的复杂性很高 尽管如此,matlab在for循环方面还是非常慢。 请帮我优化下面的代码 for k=1:th for i=1:D-1 for j=i+1:D if(dist(j,k)>dist(i,k)) t=ClassP1(k,i); ClassP1(k,i)=ClassP1(k,j); ClassP1(k
for k=1:th
for i=1:D-1
for j=i+1:D
if(dist(j,k)>dist(i,k))
t=ClassP1(k,i);
ClassP1(k,i)=ClassP1(k,j);
ClassP1(k,j)=t;
end
end
end
end
在哪里
尺寸(类别P1)=20x4276
尺寸(距离)=4276x20
提前非常感谢
Rinadi您可能可以像这样删除
k
上的外部循环(未测试,因为我没有您的数据,可能需要一些调整):
我不确定这是否在可读性或速度上节省了很多
但你的目标是什么?看起来您正在做一些类似于根据矩阵
dist
(但不完全如此)对矩阵ClassP1
排序的事情。也许有一个更好的解决方案,使用[~,idx]=sort(dist)
然后ClassP1(?,idx)=whatever
新版本的Matlab在循环中并不慢。所花费的时间是否有实际问题,或者只是您想改进解决方案?这不会大大提高性能,但有一个快速提示:交换两个元素:ClassP1(k,[ii,jj])=ClassP1(k,[jj,ii])
。grantnz:我更关心for循环是否有办法不使用它们。由于Matlab是基于JAVA的,所以循环速度不是很快,有3个for循环嵌套。这让我慢了很多@罗伯特:谢谢你,我现在也要试试。Matlab不是基于java的。它只是使用java作为UI。谢谢,我还以为它是基于java的:(
for i = 1:D-1
for j = i+1:D
iswap = find(dist(j, 1:th) > dist(i, 1:th));
ClassP1(iswap, [i, j]) = ClassP1(iswap, [j, i])
end
end