如何在每次调用函数时生成排列

时间:2014-01-17 18:32:57

标签: algorithm matlab

我有一个像1 2 3 4 5这样的列表。我试图找到算法来生成所有的组合。我的意思是一个finction将立即创建所有组合或在每次调用时生成长度i的组合。我应该如何在算法的角度来处理这个问题。即如何解决这个问题?例如;

list: 1 2 3 4 5
combinations:
      twos: 1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5,
                  4 5
      threes: 1 2 3, 1 2 4, 1 2 5, 1 3 4, 1 3 5, 1 4 5,
                    2 3 4, 2 3 5, 2 4 5, 3 4 5
      fourths: 1 2 3 4, 1 2 3 5, 1 3 4 5, 2 3 4 5, 
                      1 2 4 5
      not ones and not fourhs
      combinations not repatitive

2 个答案:

答案 0 :(得分:1)

您可以在MATLAB中使用命令nchoosek

a=[1 2 3 4 5];
combinations=nchoosek(a,2)

这将提供所有可能的方法来从5中选择两个元素。

答案 1 :(得分:0)

这个问题的一个经典解决方案是,对于大小为i的组合,将数组初始化为A = [1, 2, ... , i],然后执行以下循环:

While A[i] <= n

  1. Print the current value of A
  2. For j = i to 1
       If A[j] < n - i + j then break
  3. Set A[j] += 1
  4. For k = j+1 to i
       Set A[k] = A[k-1] + 1