3

我正在尝试构建一种算法,该算法从多场比赛中选择 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)
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
4

2 回答 2

2

我不太确定,但Chase 的 Twiddle(算法)可以帮助解决您的问题。

请检查:- Phillip J Chase,“算法 382:M 出 N 个对象的组合”(1970 年)

于 2013-01-22T18:09:25.703 回答
0

基本上你有两个问题。从10场比赛中选择4场比赛(顺序无关紧要),即10场!/ (6! * 4!) 或 210 种组合。然后,对于 4 场比赛的每种组合,您可以选择每场比赛的 8 匹马中的任何一匹,即 8^4 或 4096。

于 2013-01-22T18:20:03.250 回答