I-th dearrangement'ı bulmak için etkili bir algoritma var mı?


9

İşte bu sorunun arka planı. Arkadaşlar ve ben, herkesin başkalarına hediye vermesi gereken bir oyun oynuyorduk. Kimin kime hediye vermesi gerektiğini belirlemek için çok şey çekmeye karar veriyoruz. Ama sorun şu ki, birisi kendisine komik olmayan hediyeler verebilir. Bu tür talihsiz kişilerin beklenen sayısının 1 olduğunu görebilirsiniz, bu yüzden bu oldukça sık görülür.

Bu amaçla, dearrangement çok uygun görünüyor. Eğer bir dearrangement üretebilirsem, o zaman sadece bir dearrangement seçebilir ve kime hediyeler vereceğine karar verebilirim.

Las Vegas yöntemi ile rasgele tasfiye üretimi yapılabilir. Ama sorun şu ki, sadece polinom çalışma süresi bekleniyor. Bu yüzden i-th dearrangement bulma sorununa geldim. [1, D_n] 'de rastgele bir i seçebilir ve i-th dearrangement elde etmek için bazı en kötü durum polinom zamanı (verimli) algoritması kullanabilirsem, o zaman yapılır.


1
Sorunun motivasyonunu açıklar mısınız? yani bu soru ile neden ilgileniyorsunuz?
Kaveh

2
Belki gizli santa oynamak ve herhangi bir şans almaya istekli değildir :)
Lev Reyzin

Dearrangement ile ne demek istediğinize bir satır ekleyebilir misiniz?
Vijay D

Yanıtlar:


9

Aslında bu iyi bir soru olabilir ama şu anki haliyle kötü bir şekilde formüle edilmiştir. Rasgele düzensizlikler oluşturmak için iyi bilinen algoritmaların beklenen doğrusal zamanı vardır, ancak belki de en kötü durum polinom zaman algoritmasını bulmak için açık bir problemdir.

Örneğin bakınız: http://www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf (ve slaytlar: http://www.lsi.upc.edu/~conrado/research/talks/analco08.pdf )


Bu bana doğru cevap gibi görünüyor.
Suresh Venkat

10
! N = (n − 1) (! (N in 1) +! (N − 2)), en.wikipedia.org/wiki/Derangement bölümünde açıklanan hemen rastgele için en kötü durum polinom algoritmasına yol açmaz nesil?
David Eppstein

Evet haklısın. Küçük bir yakalama olduğunu düşünüyordum, çünkü en kötü durumda çoklu zamanlı olarak {1, ..., n} rasgele alt kümelerinde rasgele sayılar üretebilmelisiniz, ancak bunu yapmak kolaydır.
didest

0

Neden, her i konumu için , i dışındaki tüm öğeler arasından rasgele seçim yapmıyorsunuz ? Örneğin, [0..n-2] ' den orijinal diziye bir dizin seçebilirsiniz ve j> = i alırsanız j + 1 kullanırsınız .


3
Bu, tüm düzenlemeleri eşit derecede olası kılıyor mu?
David Eppstein

oh, iyi bir nokta - bu, daha sonra öğeleri dizinin içine daha önce dizinin içine yerleştirir. Hedef dizideki yuvaları rastgele sırada doldurursanız, tüm düzenlemelerin eşit olması muhtemeldir (simetri ile).
pat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.