Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 排序编号_Matlab_Sorting_Numbers_Sequence_Combinations - Fatal编程技术网

Matlab 排序编号

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都不能转到下一个列表,因为它们只

如何从8个元素中生成5个元素的组合,其中最终列表应仅包含5个元素的组合,这5个元素是两个或多个彼此不同的元素? 我开始用1-8的数字替换元素,并使用以下方法生成初始列表:

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