所有
我有一个15元素阵列= [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];。
我想知道是否有一个命令,它会逐步遍历数组的迭代而不重复自己。换句话说,由于randperm()有可能两次创建相同的矩阵,我只想逐步遍历每个排列并执行一次计算。
我承认存在阶乘(15)排列,但就我的目的而言,这两个矢量(和类似的)是相同的,不需要计算两次:
[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] [15 14 13 12 11 10 9 8 7 6 5 4 3 2 1]
因此,有没有办法逐步完成这个?
感谢。
答案 0 :(得分:1)
我认为你要找的是烫发。 randperm返回一个随机排列,你想要所有的排列。
所以使用
my_permuations = perms([1:15]);
如果向前 - 向后与向后 - 向后相同,那么你只能使用列表的上半部分......
my_permutation_to_use = my_permutations(1:length(my_permutations)/2, :);
答案 1 :(得分:0)
您可以比较所有排列,但这需要存储所有过去的排列。相反,本地决策更好。我推荐这个简单的规则:
对于小尺寸,可以使用以下代码完成:
%generate all permutations
x=perms(1:10)
%select only the valid lines, remove all redundant lines
x(x(:,1)<x(:,end),:)
仍然存在问题,为1:15
生成x会破坏所有内存限制,并且需要大约100小时。