2017-03-01 8 views
0

8 개 요소 중 5 개 요소의 조합을 생성하는 방법 최종 목록에는 서로 다른 두 개 이상의 요소 인 5 개 요소의 조합 만 있어야합니까? I 1-8에서 숫자 요소를 교체 시작하여 초기리스트 생성 :정렬 번호

x = 1:8; 
v = permn(x,5); 

초기리스트 8^5 참조 이루어져있다. 이자형. 지. 11111,11112,11113 ..... 88888.

시작 시드를 11111로 사용하면 정렬 된 숫자는 11122, 11123 등과 같을 수 있습니다. 이 숫자는 11111과 적어도 두 요소의 차이이므로이 두 번째 목록에서 11122와 11123은 하나의 요소 차이 만 있기 때문에 다음 목록으로 이동할 수 없습니다. 최종 목록에는 서로 최소한 두 가지 이상의 요소 차이가있는 모든 고유 한 요소 집합이 있어야합니다. 누군가 조건을 구현하도록 도와 줄 수 있습니까?

+0

숫자 11111과 11112가 있다고 가정합니다.이 중 하나를 제거해야합니까? – rahnema1

+0

@ rahnema1 11111을 기준으로 정렬을 시작하면 11111과 요소가 하나만 있기 때문에 11112가 이미 제거되었습니다. 11122, 11123, 11124 .... 11132,11133,11134 ....와 같은 숫자가 표시됩니다. 곧. 다음 목록은 11122, 즉 11133, 11143, 11153을 기반으로해야합니다. 다음 목록은 11133, 즉 11144, 11154, 11164 등을 기반으로해야합니다. 최종 목록에는 11111, 11122, 11133, 11144 ... 등이 있어야합니다. 요소의 최종 집합에는 두 개 이상의 요소 차이가 있어야합니다. – MRP

+0

11123과 23111은 어떨까요? 그들은 독특합니까? – rahnema1

답변

1

n=size(v,1)와 반복적 인 솔루션이 주문 o(n^2) :

m=1 
while m < size(v,1) 
    part2 = v(m+1:end, :); 
    %compare each row with the following rows e.g. part2. 
    u = bsxfun(@ne, v(m,:), part2); 
    %check if number of different elements greater than 1 
    s = sum(u,2) > 1; 
    %extract those rows and append to the current rows 
    v= [v(1:m,:); part2(s,:)]; 
    m = m + 1; 
end 

마지막 v에는 고유 한 요소가 있습니다.

+0

효과가있었습니다! 감사 :) – MRP

0

후 엘리먼트를 교환 랭크 (순위 = 1 둘 개 이상의 요소 차이가있는 경우)에 기초하여 내부 루프 및 외부 루프의 요소를 비교 내부 및 외부 루프와 거품 정렬 만들기 순위 <> 0

경우

의사 코드

For I= 0 to (N-1) 
    For J= I+1 to N 
     If Rank(Array(I), Array(J)) <> 0 Then 
      Swap(Array(I), Array(J)) 
     End 
    End 
End