我正在尝试建立一种算法,从多个种族中选择4匹马的组合。
所以说我们有10场比赛,每场比赛有8匹马跑:我希望这些比赛中有4匹马的所有组合,条件是4匹马必须来自不同的比赛(同一组合中没有两匹马可以来来自同一种族)。
此问题(和现有算法)是否有名称?
我认为它只是一系列循环,但我今天没有喝咖啡...... 干杯
编辑:我应该说对于每个组合我在组合上执行相当冗长的功能,所以我不想重复我已经完成的组合。
编辑:还有比这更好的方法吗? n = number of races;
for ( int i = 0; i < n; i++ ) {
for ( int j = i + 1; j < n; j++ ) {
for ( int k = j + 1; k < n; k++ ) {
for (int l = k + 1; l < n; l++) {
//for each combination of 4 separate sets
for(int p = 0; p < races.get(i).getHorses().size(); p++){
for(int q = 0; q < races.get(j).getHorses().size(); q++){
for(int r = 0; r < races.get(k).getHorses().size(); r++){
for(int s = 0; s < races.get(l).getHorses().size(); s++){
//each combination of 4 horses
races.get(i).getHorses().get(p)
races.get(j).getHorses().get(q)
races.get(k).getHorses().get(r)
races.get(l).getHorses().get(s)
}
}
}
}
}
}
}
}
答案 0 :(得分:2)
我不太确定,但Chase's Twiddle (algorithm)可以帮助您解决问题。
请检查: - Philip J Chase,“Algorithm 382: Combinations of M out of N Objects”(1970)
答案 1 :(得分:0)
基本上你有两个问题。一个选择总共10个中的4个比赛(顺序无关紧要),这是10个! /(6!* 4!)或210种组合。然后,对于4场比赛的每个组合,您可以选择每场比赛中的8匹马中的任何一匹,即8 ^ 4或4096.