İlk önce, iki tane açık, ancak önemli varsayımlarda bulunalım:
_.random_item
son pozisyonu seçebilirsiniz.
_.random_item
her pozisyonu olasılıkla seçer .1n + 1
Algoritmanızın doğruluğunu kanıtlamak için, burada kullanılana benzer bir endüktif argümana ihtiyacınız vardır :
- Singleton listesi için sadece bir olasılık var, bu yüzden tek tip olarak seçildi.
- elementli listenin tek tip olarak seçildiğini varsayalım (tüm permütasyonlardan itibaren), tekniğiniz tarafından elde edilen elementlerden birinin homojen olarak seçildiğini gösterin .n + 1nn + 1
Bundan sonra ispat yanlış. Lütfen doğru bir kanıt için aşağıya bakın; Bunu burada bırakıyorum çünkü hem hata hem de sonraki adımlar (sesli olan) eğitici olabilir.
Tutulması gereken yerel (yani element-bilge) bir mülkün türetilmesi faydalıdır, çünkü tüm permütasyon hakkında acı vermek tartışmalıdır. Her elemanın her pozisyonda olma ihtimalinin eşit olması durumunda, bir permütasyonun eşit şekilde seçildiğini gözlemleyin, örn.
∀π∈ P E r mnPr( L = π) = 1n !⟺∀i = 1n ∀j = 1nPr( Lben= j ) = 1n( 1 )
buradave listeye eklediğimiz notasyon basitliği adına varsayıyoruz .{ 1 , … , n }n=|L|{1,…,n}
Şimdi, 1'inci elemanı eklerken tekniğinin ne yaptığını görelim . Üç durumu göz önünde bulundurmalıyız (takastan sonra):n+1
- Listedeki öğelerden biri, takas edilmemiş, yani vei∈{1,…,n}j∈{1,…,n}
- Listedeki öğelerden biri değiştirildi, yani vei=n+1j∈{1,…,n}
- Yeni eleman, yani vei∈{1,…,n+1}j=n+1
Her bir durum için, biz elemanı olasılığını hesaplamak konumunda olmak ; hepsinin olduğu anlaşılmalıdır ( nedeniyle yeterlidir ). Let , ilk bir olasılık olarak , eski liste (indüksiyon hipotezi) içerisinde herhangi bir pozisyonda olmak elemanlar ve olasılığı seçilen herhangi bir pozisyon (varsayımlar 1, 2). öğeli listenin başının ve değiş tokuş pozisyonunun seçilmesinin bağımsız olaylar olduğuna dikkat edin , bu nedenle ortak olaylar faktörü olasılıkları;ji1n+1(1)pn=1nnps=1n+1random_item
n
Pr(Li=j,i swapped)=Pr(Li=j)⋅Pr(i swapped)=pnps
için . Şimdi hesaplamalar için.i,j∈{1,…,n}
Sadece eski unsurlarını dikkate alırız. Bu tür bir elemanın konumunda ve son sokulmadan önce oldu, ancak ve ancak değiştirilebilir pozisyon olarak seçilmemiş olan njii
Pr(Li=j)=pn(1−ps)=1n⋅nn+1=1n+1 .
Burada eski unsurlardan birinin son konuma geçtiğini düşünüyoruz. Eleman biz tüm olasılıkları üzerinde toplamak, böylece eski pozisyonlarda en olabilirdi konumunda idi ve takas pozisyonu olarak seçilmiştir, yanijjii
Pr(Ln+1=j)=∑i=1npnps=∑i=1n1n⋅1n+1=1n+1 .
Yeni eleman konumunda biter ancak ve ancak yani takas pozisyonu olarak seçilirii
Pr(Li=j)=ps=1n+1 .
Her şey yolunda gitti, yerleştirme stratejiniz gerçekten tek biçimliliği koruyor. İndüksiyonun gücü sayesinde, algoritmanızın düzgün dağılmış permütasyonlar oluşturduğunu kanıtlar.
Bir uyarı kelimesi: eklenen elemanlar ikili olarak farklı değilse, bu kanıt kırılır. ayırt edilebilir, çünkü ilk denklem artık geçerli değil. Fakat algoritmanız hala geçerli; kopyalarla yapılan her permütasyon aynı sayıda rastgele uygulama tarafından üretilir. Bunu, kopyaları işaretleyerek (yani ayırt edilebilir hale getirerek), yukarıdaki kanıtı gerçekleştirerek ve işaretleri kaldırarak (hemen hemen) ispatlayabilirsiniz; Son adım, eşit büyüklükteki permütasyon kümelerini aynı şekilde daraltır.
As Steven yorumların doğru söylediği gibi, yukarıdaki ispat temelde kusurlu olduğunu tutmaz; Sağ eli yerine getiren, ancak sol tarafı değil, bir dizi permütasyon üzerine dağılımlar kurabilirsiniz.(1)
Bu nedenle, sonuçta o kadar da kötü olmadığı ortaya çıkan permütasyon olasılıklarıyla çalışmak zorunda kalacağız. Görev random_item
yerinin başında belirtilen varsayımlar ve endüktif yapı yerinde kalır, oradan devam ediyoruz. Let sonra listesini göstermek içine monte edilmiştir.L(k){1,…,k}
Let keyfi bir permütasyon . Benzersiz olarak yazılabilirπ′∈Permn+1{1,…,n+1}
π′=(π(1),π(2),…,π(i−1),n+1,π(i+1),…,π(n),π(i))
bazı ve . İndüksiyon hipotezi ile, . Bundan başka, pozisyon alır olasılığı ile varsayımı. ve rastgele seçimleri (stokastik) bağımsız olduğundan,π∈Permni∈{1,…,n+1}Pr(L(n)=π)=1n!random_item
i1n+1πi
Pr(L(n+1)=π′)=Pr(L(n)=π)⋅Pr(i swapped)=1(n+1)!
göstermek zorunda olduğumuz. İndüksiyonun gücü sayesinde, algoritmanızın düzgün dağılmış permütasyonlar oluşturduğunu kanıtlar.
- Örneğin, her tüm izinleri atayın olasılık ve diğerleri . Her permütasyona sıfır olmayan bir olasılık veren örnekler de vardır.1{(1,2,3,4),(2,3,4,1),(3,4,1,2),(4,1,2,3)} 0140