Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

How to optimize the following algorithm?

Asked by C Zeng on 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 Comments

Sean de Wolski on 6 Jun 2013

Is idx preallocated?

idx = zeros(N,1);
C Zeng on 6 Jun 2013

Yes, Sean, you are right. That is the index that records which row is dominated, I will delete them at last.

C Zeng

Products

No products are associated with this question.

0 Answers

Contact us