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

时间:2019-05-13 06:00:04

标签: java python algorithm breadth-first-search a-star

我正在绞尽脑汁,根据以下标准获取用于迭代的组合。我有处理它的工作代码。我想知道是否可以减少其中的迭代次数

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

enter image description here

条件:

获取元素列表。
  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

  1. 现在重复步骤1至3,获取第二次迭代的元素

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

像这样,将进行迭代次数以获取每次迭代的元素。

问题: 由于我期望的元素大约为100,所以我想知道是否有任何最佳方法可以减少迭代次数。我希望不会有办法。但是,由于我们这里有算法专家,因此我需要在这里提供建议。

1 个答案:

答案 0 :(得分:2)

您可以使用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  .