มีอัลกอริทึมที่มีประสิทธิภาพในการค้นหาการจัดลำดับที่ i หรือไม่?


9

นี่คือพื้นหลังสำหรับคำถามนี้ เพื่อนและฉันกำลังเล่นเกมที่ทุกคนต้องการให้ของขวัญแก่คนอื่น เพื่อที่จะตัดสินว่าใครควรให้ของขวัญกับใครเราจึงตัดสินใจจับสลาก แต่ปัญหาคือบางคนอาจจะให้ของขวัญด้วยตัวเองซึ่งก็ไม่ใช่เรื่องตลก คุณจะเห็นได้ว่าจำนวนผู้โชคร้ายเช่นนี้คือ 1 ดังนั้นจึงเกิดขึ้นค่อนข้างบ่อย

สำหรับจุดประสงค์นี้การจัดเรียงแบบน่าจะเหมาะอย่างยิ่ง หากฉันสามารถสร้าง dearrangement ได้อย่างเป็นธรรมฉันก็สามารถเลือกหนึ่ง dearrangement และใช้มันเพื่อตัดสินใจว่าใครให้ของขวัญกับใคร

การสร้าง dearrangement แบบสุ่มสามารถทำได้ด้วยวิธีลาสเวกัส แต่ปัญหาคือมันคาดว่าจะมีเวลาพหุนามเท่านั้น ดังนั้นฉันมาถึงปัญหานี้ในการค้นหาการทำลายล้างของฉัน ถ้าฉันสุ่มเลือก i ใน [1, D_n] และใช้อัลกอริธึมเวลาพหุนามกรณีเลวร้ายที่สุด (อย่างมีประสิทธิภาพ) เพื่อให้ได้ i-th dearrangement ก็เสร็จแล้ว


1
คุณช่วยอธิบายแรงจูงใจของคำถามได้ไหม นั่นคือเหตุผลที่คุณสนใจคำถามนี้
Kaveh

2
บางทีคุณอาจต้องการที่จะเล่นซานตาลับและไม่เต็มใจที่จะใช้โอกาสใด ๆ :)
เลฟ Reyzin

คุณสามารถเพิ่มบรรทัดเกี่ยวกับสิ่งที่คุณหมายถึงโดยการจัดเรียงหรือไม่?
วีเจย์ D

คำตอบ:


9

อันที่จริงนี่อาจเป็นคำถามที่ดี แต่เป็นสูตรที่ไม่ดีในรูปแบบปัจจุบัน อัลกอริทึมที่รู้จักกันดีสำหรับการสร้างการสุ่มเรียงความมีเวลาที่คาดหวังเชิงเส้น แต่บางทีมันอาจเป็นปัญหาที่เปิดกว้างในการหาอัลกอริธึมเวลาพหุนามกรณีที่เลวร้ายที่สุด

ดูตัวอย่าง: http://www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf (และสไลด์: http://www.lsi.upc.edu/~conrado/research/talks/analco08.pdf )


ดูเหมือนว่าคำตอบที่ถูกต้องสำหรับฉัน
Suresh Venkat

10
ไม่เกิดซ้ำ! n = (n − 1) (! (n − 1) +! (n − 2)) ที่อธิบายไว้ในen.wikipedia.org/wiki/Derangementทันทีนำไปสู่อัลกอริทึมพหุนามกรณีเลวร้ายที่สุดสำหรับการสุ่ม รุ่น?
David Eppstein

ใช่คุณถูก. ฉันคิดว่ามีเรื่องเล็กน้อยเพราะคุณจะต้องสามารถสร้างตัวเลขสุ่มในชุดย่อยของ {1, ... , n} โดยพลการในกรณีที่เลวร้ายที่สุด แต่มันง่ายที่จะทำ
didest

0

ทำไมไม่สำหรับแต่ละตำแหน่งผมสุ่มเลือกจากทุกองค์ประกอบอื่นที่ไม่ใช่ฉัน ? ตัวอย่างเช่นคุณสามารถเลือกที่ดัชนีลงในอาร์เรย์ต้นฉบับจาก[0..n-2]และถ้าคุณได้รับJ> = ฉันคุณใช้เจ + 1


3
นั่นทำให้ความเป็นไปได้ทั้งหมดไม่เท่ากันหรือไม่
David Eppstein

โอ้จุดดี - สิ่งนี้จะวางองค์ประกอบต่อไปในอาร์เรย์โดยเฉพาะอย่างยิ่งก่อนหน้านี้ในอาร์เรย์ หากคุณต้องกรอกข้อมูลในช่องในอาร์เรย์เป้าหมายตามลำดับแบบสุ่ม derangements ทั้งหมดก็จะมีโอกาสเท่ากัน (โดยสมมาตร)
pat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.