首页 > 后端开发 > C++ > 如何在 C 中生成 n 个项目的所有 k 组合?

如何在 C 中生成 n 个项目的所有 k 组合?

Patricia Arquette
发布: 2024-11-21 01:06:14
原创
344 人浏览过

How Can I Generate All k-Combinations of n Items in C  ?

C 语言中项目的组合

简介

生成所有可能的项目组合是许多应用中的共同挑战。本文探讨了一种在 C 中生成 n 个项目的所有 k 组合的有效算法。

该算法

该算法采用位掩码技术来表示组合:

  • 每个项目在位掩码中分配一个位,其中一个设置位指示该项目包含在组合中。
  • 算法使用位掩码迭代所有可能的位掩码值确定每个组合中包含哪些项目。

代码实现

#include <iostream>
#include <vector>
using namespace std;

void combinations(vector<int>& items, int k) {
  int n = items.size();

  for (int bitmask = 0; bitmask < (1 << n); bitmask++) {
    vector<int> combination;
    for (int i = 0; i < n; i++) {
      if ((bitmask >> i) & 1) {
        combination.push_back(items[i]);
      }
    }
    cout << "Combination: ";
    for (int item : combination) {
      cout << item << " ";
    }
    cout << endl;
  }
}

int main() {
  vector<int> items = {1, 2, 3, 4, 5};
  int k = 3;
  combinations(items, k);
  return 0;
}
登录后复制

输出

Combination: 1 2 3
Combination: 1 2 4
Combination: 1 2 5
Combination: 1 3 4
Combination: 1 3 5
Combination: 1 4 5
Combination: 2 3 4
Combination: 2 3 5
Combination: 2 4 5
Combination: 3 4 5
登录后复制

分析

算法的复杂度为 O(n * 2^n),其中 n 是项目数。这是因为它会迭代所有可能的位掩码值,每个位掩码都代表一个唯一的组合。

以上是如何在 C 中生成 n 个项目的所有 k 组合?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板