以较少迭代次数获得组合的算法
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 步到第 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 .
我正在编写一个逻辑来根据以下条件获取迭代的组合。我有处理它的工作代码。我想知道我是否可以减少它的迭代次数
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 步到第 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 .