Чи є ефективний алгоритм для пошуку i-ї передумови?


9

Ось передумови для цього питання. Ми з друзями грали в гру, де кожному потрібно подарувати іншим людям якийсь подарунок. Для того, щоб визначити, хто повинен дарувати кому подарунок, ми вирішуємо розіграти жереб. Але проблема полягає в тому, що хтось може вручити подарунки, що не смішно. Ви можете бачити, що очікувана кількість таких нещасних людей становить 1, тому це трапляється досить часто.

Для цієї мети здається, що дорога домовленість чудово підходить. Якщо я можу справедливо створити дорогий договір, то я можу просто вибрати один дорогий договір і використовувати його, щоб вирішити, хто дарувати кому подарунки.

Випадкове генерація дорогих домовленостей може бути здійснено методом Лас-Вегаса. Але проблема полягає в тому, що він очікував лише тривалості полінома. Тому я підійшов до цієї проблеми пошуку i-ї дорогоцінності. Якщо я можу довільно вибрати i в [1, D_n], і використати алгоритм поліноміального часу (ефективного) з найгіршим випадком для отримання i-го перегрупування, то це робиться.


1
Не могли б ви пояснити мотивацію запитання? тобто чому вас цікавить це питання?
Каве

2
Можливо, ви хочете грати в таємницю Санту і не готові ризикувати :)
Лев Рейзін

Чи можете ви додати рядок про те, що ви маєте на увазі під умовою?
Vijay D

Відповіді:


9

Насправді це може бути хорошим питанням, але воно погано сформульовано в його нинішньому вигляді. Відомі алгоритми для генерування випадкових дерангацій мають лінійний очікуваний час, але, можливо, відкрита проблема знайти алгоритм поліноміального часу з найгіршим випадком.

Див. Наприклад: http://www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf (та слайди: http://www.lsi.upc.edu/~conrado/research/talks/analco08.pdf )


Це здається мені правильною відповіддю.
Суреш Венкат

10
Чи не повтор! N = (n − 1) (! (N − 1) +! (N − 2)), описаний у en.wikipedia.org/wiki/Derangement, негайно призводить до найгіршого алгоритму поліномії для випадкових випадків покоління?
Девід Еппштейн

Так, ти правий. Я думав, що це невеликий улов, тому що ви повинні вміти генерувати випадкові числа у довільних підмножинах {1, ..., n} у найгіршому випадку політи, але це легко зробити.
didest

0

Чому б не для кожної позиції i довільно вибрати з усіх інших елементів, крім я ? Наприклад, ви можете обрати індекс у вихідний масив з [0..n-2] , і якщо ви отримаєте j> = i, ви використовуєте j + 1 .


3
Це робить усі примхи однаково ймовірними?
Девід Еппштейн

о, хороший момент - це розміщує елементи пізніше в масиві, переважно, раніше в масиві. Якби ви заповнювали слоти в цільовому масиві у випадковому порядку, всі дерангування були б однаково ймовірними (за симетрією).
пт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.