Rastgelelik ve Fisher Yates
March 6, 2021Canımın aşırı sıkılması sonucunda cevabını bildiğim bir şeyin doğruluğunu test etmek için kolları sıvadım.
Bugünkü algoritmamız bir diziyi yerınde shuffle ettiğini iddaa ediyor. Diziyi sondan başa gezerken bulunduğunuz index ile gittiğiniz yöndeki kalan elemanlardan rastgele birisini swap ediyoruz. Döngü sonucunda shuffle edilmiş array elde ediyoruz. Literatür de fisher-yates veya knuth shuffle olarak geçiyor.
Her bir konfigurasyonun eşit olasılıklı olduğunu görmek istiyoruz. Dizideki her bir elemanı seçme ihtimalimiz 1/kalanlisteboyutu ise
ilk elemanı seçmek 1/n
ikinci eleman 1/n-1
.
.
.
1
Tüm bunları çarpalım.
$$P(Konfigurasyon) = \frac{1}{n} * \frac{1}{n-1} * \frac{1}{n-2} * \cdots * \frac{1}{2}* 1 = \frac{1}{n!} $$
Demekki her bir konfigurasyonun gelme ihtimali 1/n! imiş. Şunu yapmamız da mümkün, bir sürü deney yapıp her bir konfigurasyondan kaç tane geldiğini sayarız. Bunun uniform dağılmış olmasını bekliyoruz.
Şimdi de bir elemanın hangi ihtimalle kaçıncı indexte olacağını hesaplamaya geldi.
$$P(index) = \frac{n-1}{n} * \frac{n-2}{n-1} * \frac{n-3}{n-2} * \cdots * \frac{1}{2}* 1 = \frac{1}{n} $$
Her bir elemanın 0. indexte olması ihtimali 1/n miş. Sonraki elemanın İsterseniz görsel ispatına da bakabilirsiniz.
İspat kısmımız bittiğine göre gelelim grafiklere. 3, 4, 5 elemanlı diziler için python ın builtin ve fisher yates algoritması ile karıştırılmış varyasyonlar ı görselleştirelim.
Her bir diziyi medyana göre normalize etmeden standart sapma hesapladığım için büyük bir değer çıkması normal. Kıyaslamayı pythonın builtin shuffle fonksiyonuna göre yaptığımız için çok önemli değil.
Fisher yates algoritmasının özellikleri
- Unbiased
- İmplement etmesi basit
- Her bir konfigurasyon eşit olasılıklı
- In place çalışıyor
Daha ne olsun.
Böyle bir analiz yapmak durumunda kalırsınız diye kodları paylaşıyorum.
|
|
hidden
AI: Where in the Loop Should Humans Go?
This is a re-publishing of a blog post I originally wrote for work, but wanted on my own blog as well.AI is everywhere, and its impressive claims are leading to rapid adoption. At this stage, I’d qualify it as charismatic technology—someth…
via Ferd.caMore Good Programming Quotes, Part 6
Here are more good programming quotes I have found since my last post. Programming “Configuration is coding in a poorly designed programming language without tests, version control, or documentation.”Gregor Hohpe “It’s the developers misunderstanding, not…
via Henrik Warne's blogHOWTO: Change your behavior
In theory, behavior change should be easy. At first glance, it seems like you control your behavior. So, if you desire different behavior, why doesn’t your behavior change as instantly as your desire to change it? In short, lasting change of habitual behavio…
via Matt Might's blog