MATLAB:逐步迭代向量

时间:2013-12-08 20:01:25

标签: matlab loops permutation

所有

我有一个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]

因此,有没有办法逐步完成这个?

感谢。

2 个答案:

答案 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小时。