function [selected, maxsize] = subset_dominance(a) tic; epsilon=.0000001; [n,n1]=size(a); for i = 1:n a(i,i) = 0; end d = zeros(n,n); for i = 1:n-1 for j = i+1:n if a(i,j) < a(j,i) d(i,j) = 0; d(j,i) = 1; elseif a(i,j) > a(j,i) d(i,j) = 1; d(j,i) = 0; end end end maxsize = 0; q = zeros(1,n+1); s = zeros(1,n+1); m = 1; q(m) = 1; s(1) = 1; trig1 = 0; trigend = 0; while trigend == 0 if trig1 == 0 m = m + 1; trig1 = 1; % advance pointer end q(m) = q(m) + 1; if s(q(m)) == 1 % redundancy continue end if m == 1 && q(m) > n % terminate trigend = 1; continue end if m > 1 && q(m) > n % retract s(q(m)) = 0; q(m) = 0; m = m - 1; s(q(m)) = 0; continue end test_fail = 0; s(q(m))=1; if m > 1 if a(q(m-1),q(m)) == a(q(m),q(m-1)) && q(m) < q(m-1) test_fail = 1; s(q(m)) = 0; end end if test_fail == 0 for i = 1:m-1 if d(q(i),q(m)) == 0 test_fail = 1; s(q(m))=0; break end end end if test_fail == 0 if m > maxsize maxsize = m; selected = q; end trig1 = 0; end end toc