以较少迭代次数获得组合的算法

Algorithm to get the combinations in lesser number of iteration

我正在编写一个逻辑来根据以下条件获取迭代的组合。我有处理它的工作代码。我想知道我是否可以减少它的迭代次数

A,B,C,D,E,F,G 是下例中的节点集

条件:

获取元素列表
1、里面不能有重复的节点。例如.. AB 可以在那里 BA 不应该在那里 2. 对角线元素不应该存在,例如.. AA,BB...

完成逻辑后,我们得到所有彩色的(不是 black/grey 彩色的) 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

  1. 现在重复第 1 步到第 3 步以获取第 2 次迭代的元素

在第 2 次迭代结束时,我们将收集 AC、BD、EG

像这样迭代次数会得到每次迭代的元素

问题: 由于我预计元素将在 100 左右,我想知道是否有减少迭代次数的最佳方法。我希望不会有办法。但是由于我们这里有算法专家,所以我需要在这里提供建议。

您可以使用round-robin tournament algorithm

将项目放在两行中(如果数字是奇数,则空位),这里我为您的 AB/CD/EF 示例

配对
A  C  E  G     
B  D  F  .
pairs  AB CD EF

固定第一个元素 (A) 并在每一步循环旋转其他项目(顺序与您的顺序不同)。最后你会得到 N-1N/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  .