我正在编写一个逻辑来根据以下条件获取迭代的组合。我有处理它的工作代码。我想知道我是否可以减少它的迭代次数
A,B,C,D,E,F,G 是下例中的节点集
标准:
获取元素列表。
1、里面不能有重复的节点。例如.. AB 可以在那里 BA 不应该在那里
2. 不应该有对角线元素 eg.. 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 步到第 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-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 .
关于java - 以较少迭代次数获得组合的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106497/