Matlab 排序编号
如何从8个元素中生成5个元素的组合,其中最终列表应仅包含5个元素的组合,这5个元素是两个或多个彼此不同的元素? 我开始用1-8的数字替换元素,并使用以下方法生成初始列表:Matlab 排序编号,matlab,sorting,numbers,sequence,combinations,Matlab,Sorting,Numbers,Sequence,Combinations,如何从8个元素中生成5个元素的组合,其中最终列表应仅包含5个元素的组合,这5个元素是两个或多个彼此不同的元素? 我开始用1-8的数字替换元素,并使用以下方法生成初始列表: x = 1:8; v = permn(x,5); 初始列表由8^5个数字组成。EG111111211113…88888 如果我将起始种子设为11111,则排序后的数字可以是11122、11123,依此类推。因为这些数字与11111至少有两个元素的差异。但是从第二个列表中,11122和11123都不能转到下一个列表,因为它们只
x = 1:8;
v = permn(x,5);
初始列表由8^5个数字组成。EG111111211113…88888
如果我将起始种子设为11111,则排序后的数字可以是11122、11123,依此类推。因为这些数字与11111至少有两个元素的差异。但是从第二个列表中,11122和11123都不能转到下一个列表,因为它们只有一个元素差异。
最后的列表应该有所有这些唯一的元素集,这些元素之间至少有两个或更多的元素差异。
有人能帮我实现这个条件吗?创建一个带有内循环和外循环的冒泡排序,根据秩比较内循环和外循环中的元素(如果两个或多个元素不同,则秩=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
I=0到(N-1)的
对于J=I+1到N
如果秩(数组(I),数组(J))为0,那么
交换(阵列(I)、阵列(J))
终点
终点
终点
迭代解具有且顺序为o(n^2)
且n=size(v,1)
:
m=1
而m1;
%提取这些行并附加到当前行
v=[v(1:m,:);第2部分(s,:)];
m=m+1;
结束
最后的
v
将具有唯一的元素。假设您有数字11111和11112,应该删除哪一个?@rahnema1如果您开始基于11111排序,则11112已被删除,因为它与11111只有一个元素差异。您将获得11122、11123、11124…111321113311134…等数字。下一个列表应基于11122,即11133、11143、11153……下一个列表应基于11133,即11144、11154、11164,依此类推。最后的列表应该有11111、11122、11133、11144……等等。最后一组元素应该有两个或更多的元素差异。11123和23111呢?它们是独一无二的吗?@rahnema1是的,它们是独一无二的。序列不同,因此它们都将被计为两个不同的元素。“它们是唯一的”,同时“它们都将被计为两个不同的元素”?!!
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