Losowy wybór z listy z ważonymi prawdopodobieństwami

Mam tablicę N elementów (reprezentujących N liter danego alfabetu), a każda komórka tablicy zawiera wartość całkowitą, która to liczba całkowita oznacza liczbę wystąpień w danym tekście tej litery. Teraz chcę losowo wybrać literę ze wszystkich liter alfabetu, w oparciu o liczbę występów z podanymi ograniczeniami:

Jeśli litera ma wartość dodatnią (niezerową), może być zawsze wybrana przez algorytm (oczywiście z większym lub mniejszym prawdopodobieństwem).

Jeśli litera A ma wyższą wartość niż litera B, to musi być bardziej prawdopodobne, że zostanie wybrana przez algorytm.

Biorąc to pod uwagę, wymyśliłem prosty algorytm, który może wykonać tę pracę, ale zastanawiałem się tylko, czy jest coś lepszego do zrobienia. Wydaje się to być dość fundamentalne i myślę, że może być więcej sprytnych rzeczy do zrobienia, aby osiągnąć to bardziej efektywnie. Oto algorytm, który myślałem:

Dodaj wszystkie częstotliwości w tablicy. Zapisz go w SUMWybieranie losowej wartości od 0 do SUM. Zapisz go w RAN[Podczas] RAN> 0, począwszy od pierwszego, odwiedź każdą komórkę w tablicy (w kolejności) i odejmij wartość tej komórki od RANOstatnia odwiedzana komórka jest wybrana

Czy jest więc coś lepszego niż to? Czy czegoś mi brakuje?

Wiem, że większość współczesnych komputerów może obliczyć to tak szybko, że nawet nie zauważy, czy mój algorytm jest nieefektywny, więc jest to raczej pytanie teoretyczne niż praktyczne.

Preferuję wyjaśniony algorytm, a nie tylko kod do odpowiedzi, ale jeśli czujesz się swobodniej podając swoją odpowiedź w kodzie, nie mam z tym problemu.

questionAnswers(2)

yourAnswerToTheQuestion