2017-03-01 82 views
0

如何從8個元素中生成5個元素的組合,其中最終列表只應包含5個元素的組合,而這5個元素是兩個或多個彼此不同的元素? 我開始從1-8與數字替換的元素和生成使用所述初始列表:排序編號

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

初始列表由8^5號。即G。 11111,11112,11113 ..... 88888。

如果我以11111開頭的種子,排序的數字可以是,11122,11123等等。因爲這些數字與11111至少有兩個元素差異。但是從第二個列表中,11122和11123都不能進入下一個列表,因爲它們只有一個元素差異。 最終列表應該包含所有這些具有至少兩個或更多元素差異的元素。 有人可以幫我實施這個條件嗎?

+0

假設你有號碼11111和11112,哪一個應該被刪除? – rahnema1

+0

@ rahnema1如果您開始基於11111進行排序,那麼11112已經被淘汰,因爲它與11111只有一個元素差異。您將得到像11122,11123,11124 .... 11132,11133,11134 ....和等等。下一份清單應基於11122即11133,11143,11153 ......下一份清單應以11133爲基礎,即11144,11154,11164等等。最終名單應該有11111,11122,11133,11144等等。最終的元素集應該有兩個或更多的元素差異。 – MRP

+0

11123和23111呢?它們是獨特的嗎? – rahnema1

回答

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