Varsayalım ki, her bir k tarafının onu yuvarladığımda bir miktar p k gelme olasılığına sahip olduğu n-taraflı yüklü bir kalıbım var. Bu bilgiyi statik olarak depolamak için iyi bir algoritma olup olmadığını merak ediyorum (yani sabit bir olasılıklar kümesi için), böylece kalıbın rastgele bir rulosunu verimli bir şekilde simüle edebilirim.
Şu anda, bu sorun için bir O (lg n) çözümüm var. Buradaki fikir, tüm k için ilk k taraflarının kümülatif olasılığının bir tablosunu saklamak, [0, 1) aralığında rastgele bir gerçek sayı oluşturmak ve kümülatif olan en büyük indeksi elde etmek için tablo üzerinde ikili bir arama yapmaktır. değer seçilen değerden büyük değil. Bu çözümü tercih ediyorum, ancak çalışma zamanının olasılıkları hesaba katmaması garip görünüyor. Özellikle, bir tarafın her zaman ortaya çıktığı veya değerlerin eşit olarak dağıtıldığı aşırı durumlarda, O (1) 'de yuvarlanmanın sonucunu naif bir yaklaşım kullanarak oluşturmak mümkündür, ancak benim çözümüm hala logaritmik olarak birçok adım atacaktır.
Bu sorunun çalışma zamanında bir şekilde "uyarlanabilir" bir şekilde nasıl çözüleceğine dair herhangi bir önerisi olan var mı?
DÜZENLEME : Bu sorunun yanıtlarına dayanarak, analizleriyle birlikte bu soruna yönelik birçok yaklaşımı açıklayan bir makale yazdım . Görünüşe göre Vose'un takma ad yöntemini uygulaması, gerçekten etkileyici olan Θ (n) ön işleme süresi ve kalıp silindiri başına O (1) süresi veriyor. Umarım bu, cevaplarda yer alan bilgilere faydalı bir eklentidir!