How to optimize the following algorithm?

1 Ansicht (letzte 30 Tage)
C Zeng
C Zeng am 6 Jun. 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 Kommentare
Sean de Wolski
Sean de Wolski am 6 Jun. 2013
Is idx preallocated?
idx = zeros(N,1);
C Zeng
C Zeng am 6 Jun. 2013
Bearbeitet: C Zeng am 6 Jun. 2013
Yes, Sean, you are right. That is the index that records which row is dominated, I will delete them at last.

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by