Misalkan saya memiliki n-sided die die di mana setiap sisi k memiliki beberapa kemungkinan pk untuk muncul ketika saya menggulungnya. Saya ingin tahu apakah ada algoritma yang baik untuk menyimpan informasi ini secara statis (yaitu untuk serangkaian probabilitas tetap) sehingga saya dapat secara efisien mensimulasikan gulungan acak cetakan.
Saat ini, saya punya solusi O (lg n) untuk masalah ini. Idenya adalah untuk menyimpan tabel probabilitas kumulatif sisi k pertama untuk semua k, mereka untuk menghasilkan bilangan real acak dalam kisaran [0, 1) dan melakukan pencarian biner di atas tabel untuk mendapatkan indeks terbesar yang kumulatifnya nilai tidak lebih besar dari nilai yang dipilih. Saya lebih suka solusi ini, tetapi tampaknya aneh bahwa runtime tidak memperhitungkan probabilitas. Secara khusus, dalam kasus ekstrem di satu sisi selalu muncul atau nilai-nilai didistribusikan secara seragam, dimungkinkan untuk menghasilkan hasil roll di O (1) menggunakan pendekatan naif, meskipun solusi saya masih akan mengambil banyak langkah logaritma.
Adakah yang punya saran untuk bagaimana mengatasi masalah ini dengan cara yang entah bagaimana "adaptif" dalam runtime itu?
EDIT : Berdasarkan jawaban atas pertanyaan ini, saya telah menulis sebuah artikel yang menggambarkan banyak pendekatan untuk masalah ini , beserta analisisnya. Sepertinya implementasi metode alias Vose memberi Θ (n) waktu preprocessing dan O (1) waktu per die roll, yang benar-benar mengesankan. Semoga ini adalah tambahan yang berguna untuk informasi yang terkandung dalam jawaban!