是否有任何算法可以使循环调度具有每轮独特的组合?
Is there any algorithm to make round robin schedule having each round unique combinations?
假设我有一个包含 10 个参与者的数组 [1,2,3,4,5,6,7,8,9,10]
假设一个联赛,有10名参赛者,那么每位参赛者将与其他9名参赛者进行9场比赛。
因此,每个参赛者将进行 9 轮单场比赛。例如-
第 1 轮:1-2、3-4、5-6、7-8、9-10 [任何参赛者不重复]
第 2 轮:1-3、2-4、5-7、8-9、6-10 [任何参赛者不重复]
等等..
有没有数学算法solution/pattern?
如果可能,我想避免数组 push/pop 方法。
是的,有一个相当简单的算法来生成所有可能的对 ((N-1)*N/2
)
将项目分成两行。
在每一轮中,顶行的玩家与底行的相应玩家一起玩。
修复第一个。
以循环方式转移所有其他人。
请注意,您可以使用数组的索引,而不是更改其内容
A B
D C
pairs A-D, B-C
A D
C B
pairs A-C, D-B
A C
B D
pairs A-B, C-D
我在 PHP (ideone) 中的天真实现输出玩家索引:
function GenPairs($N) {
for ($i=0; $i<$N-1;$i++){
echo(0).":";
echo($N - 1 - $i)."\n";
for ($j=1; $j<$N/2;$j++){
echo(1 + (($N - $i + $j - 2) % ($N - 1))).":";
echo(1 + ((2*$N - $i - $j - 3) % ($N - 1)))."\n";
}
echo("\n");
}
}
GenPairs(6);
0:5
1:4
2:3
0:4
5:3
1:2
0:3
4:2
5:1
0:2
3:1
4:5
0:1
2:5
3:4
假设我有一个包含 10 个参与者的数组 [1,2,3,4,5,6,7,8,9,10]
假设一个联赛,有10名参赛者,那么每位参赛者将与其他9名参赛者进行9场比赛。
因此,每个参赛者将进行 9 轮单场比赛。例如-
第 1 轮:1-2、3-4、5-6、7-8、9-10 [任何参赛者不重复]
第 2 轮:1-3、2-4、5-7、8-9、6-10 [任何参赛者不重复]
等等..
有没有数学算法solution/pattern?
如果可能,我想避免数组 push/pop 方法。
是的,有一个相当简单的算法来生成所有可能的对 ((N-1)*N/2
)
将项目分成两行。
在每一轮中,顶行的玩家与底行的相应玩家一起玩。
修复第一个。
以循环方式转移所有其他人。
请注意,您可以使用数组的索引,而不是更改其内容
A B
D C
pairs A-D, B-C
A D
C B
pairs A-C, D-B
A C
B D
pairs A-B, C-D
我在 PHP (ideone) 中的天真实现输出玩家索引:
function GenPairs($N) {
for ($i=0; $i<$N-1;$i++){
echo(0).":";
echo($N - 1 - $i)."\n";
for ($j=1; $j<$N/2;$j++){
echo(1 + (($N - $i + $j - 2) % ($N - 1))).":";
echo(1 + ((2*$N - $i - $j - 3) % ($N - 1)))."\n";
}
echo("\n");
}
}
GenPairs(6);
0:5
1:4
2:3
0:4
5:3
1:2
0:3
4:2
5:1
0:2
3:1
4:5
0:1
2:5
3:4