【发布时间】:2015-08-18 18:29:12
【问题描述】:
现在,枚举集合中的所有 k=4 个组合
Set = [1; 2; 3; 4; 5; 6; 7; 8]
我使用预构建的 Matlab 函数 nchoosek 来计算二项式系数。一次取 k 的 n 个事物的组合数由 n!/((n–k)!k!) 计算。
现在,假设我有一组包含 n = 8 个元素的数据:
Set = [1.A; 2.B; 3.C; 4.D; 5.B; 6.D; 7.C; 8.A]
我想枚举“Set”中 4 个 整数 的所有组合,但有一个转折点:在任何组合中,我必须只有一个元素具有相同的 letter (顺序无关紧要)。例如:
[1.A; 2.B; 6.D; 7.C] 将是一个有效的组合,但不是 [1.A; 2.B; 6.D; 8.A]。
有 [1.A; 2.B; 6.D; 7.C],我仍然必须生成组合 [8.A; 2.B; 6.D; 7.C]
不必生成 70 个组合,因为 A、B、C 和 D 出现了 2 次,所以我只需要生成 2*2*2*2 = 16 个组合。 70-16 = 54 其他组合与我的问题无关,我宁愿不生成它们,因为它的计算量越来越大。目前,我生成了 70 个组合,然后使用一些逻辑来删除所有不相关的组合。
所以,我的问题是:
- 是否有此类组合的名称? (可以帮助我搜索信息并更好地了解问题)
- 是否有一些现有的算法允许计算?在 Matlab 或 C++ 中。请,如果它充满了reg ex,欢迎提供一些解释......
【问题讨论】:
-
所以您要计算存在多少个集合?或者您是否希望生成集合以进行进一步处理?
-
我正在寻找两者,但主要是为了生成所有集合以供进一步处理......