losowanie z określonym prawdopodobieństwem

0

Mam mapę:

Map<String,Double> probability = HashMap<String,Double>();
 

a w niej, np. takie rzeczy: zwierzak/prawdopodobieństwo:
{kot => 0.20, pies => 0.20, chomik => 0.40, krowa => 0.90}

I teraz chciałbym wylosować np. 5 zwierząt biorąc pod uwagę ich prawdopodobieństwo (prawdopodobieństwa mogą się powtarzać), jak to zrobić? Znalazłem taki artykuł: http://answers.yahoo.com/question/index?qid=20081111200637AARFCZK ale tam są ify ze stałymi wartościami, a u mnie lista przecież może się zmieniać, a dodatkowo prawdopodobieństwa mogą się powtarzać.

1
  1. Znormaluzj prawdopodobieństwa (tzn zrób tak żeby sumarycznie dawały 1)
  2. Zmapuj wyniki na przedział 0-1 (np. kot będzie dla wartości 0.0-0.1)
  3. Wylosuj liczbę 0-1 i voila.
0

A to nie będzie tak (zakładając, że wartości mapy są posortowane rosnąco oraz, że zmienna 'totalSum' to suma wszystkich wartości mapy):

 
        Random generator = new Random();
        ArrayList<String> choice = new ArrayList<String>();

        for(int i = 0; i < 5; i++) { //pobranie 5 zwierzakow
            int rand = generator.nextDouble(totalSum);           
            for(Entry<String,Double> entry : probability.entrySet()) {
                if (rand < entry.getValue()) {
                    choice.add(entry.getKey());
                    break;
                }
                else rand -= entry.getValue();                
            }        
        }

??

1 użytkowników online, w tym zalogowanych: 0, gości: 1