【发布时间】:2013-06-04 23:28:29
【问题描述】:
你好说我有一些数据A -> ....(n 个数据点)。现在我从这些数据中获取给定数量的值 (m) - 现在我希望遍历这些值的所有唯一组合。
取 2 个唯一值的 5 个值的示例: 一个独特的组合将是“a + b”或“a + c”之类的东西 - 但是“c + d”与“b + c”相同。而“B+E”和“A+D”是一样的
A x x x x
B x x x
C x x
D x x
E x
那些描述了一些几何“线”,整个标本可以围绕中点“镜像”。那么对于任意数量的行,考虑到这种“镜像能力”,是否有一种聪明的算法可以迭代所有内容?
在给定集合大小n和项目数m的情况下,计算元素数的公式是什么?
---- “3 out 6”的例子:
它也非常类似于函数 combine(6,3) - 但是现在我用 - 而不是 x 标记了重复的行。
1 1 1 1 1 1 1 1 1 1 2
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
A x x x x x x x x - - A
B x x x x x x - - - - B
C x x x x x x - - - - C
D x x x - x - - - - - D
E x x x - x - - - - - E
F x x - - - - - - - - - F
所以可能的列表是:
ABC、ABD、ABE、ABF、ACD、ACE、ACF、ADE、BCD、BCE
20 个潜在候选人中有 10 个忽略了对称性。
【问题讨论】:
-
为什么B+E和A+D一样?
-
@OliCharlesworth 当您在中间翻转 B + E 时(在此示例中为“C”,偶数将位于两行之间)。 B 转换为 D,E 转换为 A。
-
哦,我明白了。那么在这种情况下,绘制一个 NxN 网格,并在与您要生成的组合相对应的所有坐标中放置一个 X。此时模式应该很明显。
-
我无法弄清楚显示的网格如何与描述的任何部分匹配。这个问题对我来说几乎没有意义
-
样本是这样处理一组五个元素中的两个元素的吗? ideone.com/No3iA2
标签: c++ combinations