matlab代码的高时间复杂度降低

时间:2013-10-07 19:57:46

标签: 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,j)=t;
            end
        end
    end
end

其中

大小(ClassP1)= 20x4276

大小(DIST)= 4276x20

提前多多谢谢你

Rinadi

1 个答案:

答案 0 :(得分:2)

您可以像k一样删除外部循环(未经测试,因为我没有您的数据,可能需要进行一些调整):

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

我不确定这是否会在可读性或速度方面节省很多。

但你的目标是什么?您似乎正在做基于矩阵ClassP1(但不完全相同)对矩阵dist进行排序。也许有更好的解决方案使用[~, idx] = sort(dist)然后ClassP1(??, idx) = whatever