How to optimize the following algorithm?

2 visualizzazioni (ultimi 30 giorni)
C Zeng
C Zeng il 6 Giu 2013
I have a large matrix-M, and the rows have been sorted based on the value on some entry. Next I want to identify all rows that can be dominated, i.e., row #i is dominated by #j if j<i and M(j,:)<=M(i,:).
If rows #i is dominated, we can remove row i. I notice that remove row #i takes a lot of time for a large matrix so I set a index() and each time if it is dominated then index(i)=1. At last, M(index)=[]. (remove those dominated rows at last)
I run my code several times, and find out there is a bottleneck-N loops. Below I show some code:
for i=3:N
j=2; %j from i-1 to may be faster!
while j<=i-1
if all(M(j,1:N)<=M(i,1:N))
idx(i)=1;
break;
else
j=j+1;
end
end
end
M(idx)=[];
I am thinking if someone can help me to optimize the code? Can we do better here? Thanks.
  2 Commenti
Sean de Wolski
Sean de Wolski il 6 Giu 2013
Is idx preallocated?
idx = zeros(N,1);
C Zeng
C Zeng il 6 Giu 2013
Modificato: C Zeng il 6 Giu 2013
Yes, Sean, you are right. That is the index that records which row is dominated, I will delete them at last.

Accedi per commentare.

Risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by