Mam tablicę N elementów (reprezentujących litery N danego alfabetu), a każda komórka tablicy zawiera wartość całkowitą, która to liczba całkowita oznacza liczbę wystąpień w podany tekst tego listu. Teraz chcę losowo wybierać list od wszystkich liter alfabetu, na podstawie jego liczby występów z podanych ograniczeń:Losowo wybierane z listy z ważonymi prawdopodobieństwami
Jeżeli litera ma wartość dodatnią (niezerowy), to może być zawsze wybierany przez algorytm (oczywiście z większym lub mniejszym prawdopodobieństwem).
Jeśli litera A ma wyższą wartość niż litera B, musi być bardziej prawdopodobne, że zostanie wybrana przez algorytm.
Teraz, biorąc to pod uwagę, mam wymyślić prosty algorytm, który może wykonać zadanie, ale ja po prostu zastanawiasz się, czy nie było lepiej coś zrobić. Wydaje się to być dość fundamentalne i myślę, że mogą być bardziej sprytne rzeczy do zrobienia, aby osiągnąć to bardziej wydajnie. Jest to algorytm, o którym myślałem:
- Dodaj wszystkie częstotliwości w tablicy. Przechowuj go w SUM
- Wybór losowej wartości od 0 do SUMY. Przechowuj go w sieci RAN
- [Podczas] RAN> 0, Rozpoczynając od pierwszej, przejdź do każdej komórki w tablicy (w kolejności) i odejmij wartość tej komórki od RAN
- Ostatnia odwiedzona komórka jest wybrana
Czy jest coś lepszego niż to? Czy czegoś brakuje?
Jestem świadomy, że większość współczesnych komputerów potrafi to obliczyć tak szybko, że nawet nie zauważy, czy mój algorytm jest nieefektywny, więc jest to raczej pytanie teoretyczne, a nie praktyczne.
Preferuję wyjaśniony algorytm, a nie tylko kod do odpowiedzi, ale jeśli czujesz się wygodniej udzielając odpowiedzi w kodzie, nie mam z tym problemu.
Ta metoda nazywana jest * próbkowaniem z odwróconą transformacją *, przy okazji. – Thomas