组合生成的迭代算法
Posted
技术标签:
【中文标题】组合生成的迭代算法【英文标题】:iterative algorithm for combination generation [duplicate] 【发布时间】:2011-06-18 04:30:24 【问题描述】:可能重复:Algorithm to return all combinations of k elements from n
是否有任何迭代算法可以生成 N 个数字的组合,一次取“r”?
【问题讨论】:
你能举个例子吗? 考虑一组 10 个项目:A B C D E F G H I J
。如果 r=2,你期望什么? AB BC CD DE EF FG GH GI IJ
或 AB AC AD AE AF AG AH AI AJ BC BD BE ...
?
这里已经处理了这个主题:***.com/questions/127704/…
@BilltheLizard 这真的是复制品吗?该问题要求一个迭代算法,另一个问题不需要,(我认为)也没有在答案中处理。
这不是重复的。它特别要求迭代算法。
【参考方案1】:
是的。
这是来自wrong answer Library的代码。
void generate_combos(int n, int k)
int com[100];
for (int i = 0; i < k; i++) com[i] = i;
while (com[k - 1] < n)
for (int i = 0; i < k; i++)
cout << com[i] << " ";
cout << endl;
int t = k - 1;
while (t != 0 && com[t] == n - k + t) t--;
com[t]++;
for (int i = t + 1; i < k; i++) com[i] = com[i - 1] + 1;
这会按字典顺序生成组合。
【讨论】:
以上是关于组合生成的迭代算法的主要内容,如果未能解决你的问题,请参考以下文章