【问题标题】: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 IJAB AC AD AE AF AG AH AI AJ BC BD BE ... ?
  • 这里已经处理了这个主题:stackoverflow.com/questions/127704/…
  • @BilltheLizard 这真的是复制品吗?该问题要求一个迭代算法,另一个问题不需要,(我认为)也没有在答案中处理。
  • 这不是重复的。它特别要求迭代算法。

标签: algorithm


【解决方案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;
    }
}

这会按字典顺序生成组合。

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多