0

我需要找到一种挑选获胜者的方法,就像一场比赛。每个赛车手都有获胜机会的权重。

例如

A - 25% chance to win
B - 10% chance to win
C - 25% chance to win
D - 10% chance
E - 10% chance
F - 20% chance

1)我需要随机选择获胜者,但需要考虑权重。

2)我还需要选择第二个最有可能的获胜者和第三个......

我可以通过生成 1-100 之间的随机获胜者来选择第一个,并且基本上根据以下机会在赛车手之间分配 100 名:

A = 1-25
B = 26 -35
C = 36-60.
etc
etc

不知道上面的稳定性如何,但好像还可以。

还有什么想法吗?

4

2 回答 2

0
public class RaceWinners{
    public static void main(String[] args) {
        int[] percentages = {25,10,25,10,10,20};
        System.out.print(pickWinner(percentages));
    }

    //Returns the index of the winner(A = 0, B = 1, ...)
    private static int pickWinner(int[] percentages) {
        int randomNumber = (int)(Math.random() * 100);
        int countdown = randomNumber;
        for(int i = 0; i < percentages.length; i++) {
            countdown -= percentages[i];
            if(countdown < 0) {
                return i;
            }
        }
        return -1;
   }

}
于 2012-10-12T15:23:30.717 回答
0

要确定第一等级,您可以按照您的描述进行。但是对于第二个,第三个,......位置有点不同(如果 A 是第一个,那么 B 有可能是第二个 p(B|A) := "the second is B given that first is A",然后B 没有 10% 的第二名,而是其他成员的第二名,依此类推)。看看条件概率(wiki:http ://en.wikipedia.org/wiki/Conditional_probability )

这是完成这项工作的“伪代码”

Ranking:
begin probability
a = 20%
b = 10%
...

calculate first
recalculate probability given that first is X (e.g. if first is A p(B|A), p(C|A),...)
calculate second (with the new probability, e.g. b = p(B|A), c = p(C|A),..)
recalculate probability given that first is X and second is Y
calculate third
etc..

注意:java random (Math.random) 生成 0 到 0.999999 之间的值...(例如 [0, 1[ 包括 0 但不包括 1)

于 2012-10-12T15:28:57.583 回答