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