2017-03-01 83 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