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



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

您可以在 MATLAB 中使用命令nchoosek

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

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

此问题的一个经典解决方案是,对于大小 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

最新更新