我正在绞尽脑汁,根据以下标准获取用于迭代的组合。我有处理它的工作代码。我想知道是否可以减少其中的迭代次数
A,B,C,D,E,F,G是以下示例中的节点集
条件:
获取元素列表。
1.其中不应包含任何重复的节点。例如.. AB可以在那里BA不应该在那里
2.对角元素不应存在,例如..AA,BB ...
完成逻辑后,我们将获得所有彩色的(而不是黑色/灰色的) AB,AC,AD,AE,AF,AG,BC,BD,BE,BF,BG,CD,CE,CF,CG,DE,DF,DG,EF,EG,FG
要在迭代中获取元素组 必须根据以下规则将元素分组以进行迭代
第一次迭代 1.选择一个元素。让我们说AB 2.将被选择的元素不应具有A或B。因此可以选择CD。 3.完成上述2个步骤后,我们将获得第一次迭代的元素
在第一次迭代结束时,我们将收集AB,CD,EF
在第二次迭代结束时,我们将收集AC,BD,EG
像这样,将进行迭代次数以获取每次迭代的元素。
问题: 由于我期望的元素大约为100,所以我想知道是否有任何最佳方法可以减少迭代次数。我希望不会有办法。但是,由于我们这里有算法专家,因此我需要在这里提供建议。
答案 0 :(得分:2)
您可以使用round-robin tournament algorithm
将项目放在两行中(如果数字为奇数,则为空),在这里我为您的AB / CD / EF示例配对了
A C E G
B D F .
pairs AB CD EF
修复第一个元素(A),并在每一步以循环方式旋转其他项目(顺序与您的顺序不同)。最终,您将获得N-1
对N/2
对
A B C E
D F G .
pairs AD BF CG
and so on
A D B C
F G E .
A F D B
G E C .
A G F D
E C B .
A E G F
C B D .