Хороша організація сидіння для послідовності прийому їжі та столів розміром k для групи людей


23

Враховуючи набір людей, я хотів би посидіти ними за послідовністю прийому їжі за столами розміром . (Звичайно, столів достатньо, щоб сидіти всі на кожен прийом їжі.) Я хотів би влаштувати це так, щоб ніхто не ділив стіл з тією ж людиною двічі. Типовими значеннями є і і 6 - 10 прийомів їжі.k | S | | S | = 45 к = 5Sk|S||S|=45k=5

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

Буду вдячний за кращу постановку проблеми та вказівки на відповідну літературу, оскільки вона є поза моєю сферою.

Передумови: це може бути використане для влаштування сидінь у Schloss Dagstuhl, куди протягом тижня приїжджають багато комп'ютерних вчених, щоб обговорити свої дослідження. В даний час сидіння проводиться випадковим чином і не дивно, що деякі люди опиняються сидіти з тими ж людьми двічі (або частіше) протягом тижня. Також не дивно, що ми отримуємо деякі скарги на це та неясні пропозиції, як це покращити. Я б хотів це краще зрозуміти. Більш сильна постановка проблеми передбачає оптимізацію того, хто сидить поруч, але я вважаю, що це не стосується таблиць розміром 5.

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


IIRC, це звучить як проблема Гамільтона-Ватерлоо.
Juho

Поглянувши на статтю про проблему Гамільтона-Ватерлоо, у мене складається враження, що вона стосується більш жорсткої проблеми - забезпечити, щоб учасник сидів поруч із одним учасником рівно один раз.
Крістіан Ліндіг

1
Проблема школярки Кіркмана схожа на те, що може стати відправною точкою.
Крістіан Ліндіг

Відповіді:


11

Ось варіант оригінальної відповіді (нижче), який дає бажане налаштування: таблиці розміром 5, 45 осіб та 10 прийомів їжі, за винятком того, що один прийом їжі має кілька таблиць розміром 4.

Нехай - поле розміром 9. Виберіть 4 вертикальні, вироджені лінії для кожного і оголосити своїх людей "порожніми". Нам залишилося 81 - 9x4 = 45 людей.{ ( b , x ) | x F } b = 0 , 1 , 2 , 3F{(b,x)|xF}b=0,1,2,3

9 прийомів їжі даються нахилами . Перехрестя з 4 порожніми виродженими лініями зменшує розмір таблиці до 9-4 = 5.a=0,1,,8

Додаткову страву дають залишилися вироджені лінії для кожного . Тут розмір таблиці дорівнює 9. Однак (у будь-якому рішенні) ми можемо розбити таблицю розміру 9 на таблицю розміром 5 та одну розміру 4.b = 4 , 5 , 6 , 7 , 8{(b,x)|xF}b=4,5,6,7,8

Якщо є ще кілька людей, можна скористатися полем розміру 11.


Спершу давайте обробляємо людини і їжу. kk2k

Виберіть кінцеве поле від розміру і ідентифікувати людей з . Кожному прийому їжі відповідає нахил, до таблиці лінія, паралельна цьому схилу.k F × FFkF×F

Зокрема, їжа має таблиці для кожного .kakb F{(x,ax+b)|xF}bF

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


Щоб обробити людей, розділіть їх на дві групи по кожна і застосуйте конструкцію вище до кожної групи. Щоб обробити , позначте (у першій групі) фіксовану лінію, наприклад як "порожню". У вас може бути кілька столів з особами.k 2 2 k 2 - k = 45 { ( x , x ) | x F } k - 12k2k22k2k=45{(x,x)|xF}k1

Для більшої кількості їжі можна, наприклад, вибрати іншу розділ на дві групи на початку 6-ї їжі. (Скажіть, ви переплутаєте оригінальний розділ, щоб переконатися, що дві групи "змішуються".) Хоча, звичайно, це може призвести до деяких перехресть.


Це цікава конструкція, але занадто обмежує для мого конкретного випадку через але може слугувати нижньою межею. |S|=k2
Крістіан Ліндіг

Я відредагував питання, щоб вирішити більш загальні параметри.
Ману

1
Я вважаю, що [блок-дизайн] ( en.wikipedia.org/wiki/Block_design ) є відповідною основою для загального випадку, на що вказував domotorp нижче. Однак мені подобається конструктивний аспект цього і сприймаю це як хорошу відповідь.
Крістіан Ліндіг

3
Мені цікаво, чи існує розчин з 10 прийомами їжі; Я трохи погукав, але не зміг знайти відповіді. У будь-якому разі, як тільки було знайдено найкраще рішення, що робити з кодуванням, щоб організатори могли вставити імена учасників і отримати всі завдання на місця? Чи було б їм це корисно? Якщо ми зробимо це більш простим, інші семінари можуть прийняти цю приємну традицію Дагстуля.
Ману

1
Приємне оновлення. Ми повинні пити пиво в Dagstuhl на вашу честь, якщо це реалізується :)
Suresh Venkat,

4

Ось (вільна?) Верхня межа щодо кількості їжі, яку ви можете подавати.

Нехай і припустимо, що ділиться на . Крім того, припустимо, що у вас є точно столів, і ви хочете, щоб кожен стіл був заповнений під час кожного прийому їжі.n k n / k|S|=nnkn/k

Для кожного прийому їжі побудуйте графік із вузлом для кожної людини на та ребро, коли двоє людей діляться таблицею. Цей графік - це набір кліків розміром . Таким чином, кількість ребер у графіку дорівнює .n / k k Θ ( n k )Sn/kkΘ(nk)

Оскільки ви не хочете, щоб будь-який край виникав у двох різних прийомах їжі, а оскільки загальна кількість ребер у наборі вершин розміром дорівнює , це показує, що ви можете обслуговувати лише харчування.Θ ( n 2 ) O ( п / к )nΘ(n2)O(n/k)

Власне, тут не важко знайти константи, і коли ви займаєтеся математикою, ви отримуєте верхню межу точно , яка для ваших типових значень становить 11.n1k1


3

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


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

2

Я не впевнений, чи потрібен вам детермінований алгоритм, але я вирішив подібну проблему раніше, використовуючи метод Маркова ланцюга Монте-Карло .

Ви можете побачити робочий приклад такого підходу на Github - ця програма намагається розмістити групу людей за столами фіксованого розміру, враховуючи набір обмежень для сидіння, які можуть бути або позитивними, або негативними ("повинен" або "не повинен") ) і абсолютним, або відносним ("кращим").

Примітка: ця програма не вирішує абсолютно ту саму проблему, яку ви пропонували, але вона дійсно демонструє метод Монте-Карло ланцюга Маркова, і це досить близько, що ви можете легко налаштувати її, як потрібно для вашої проблеми.

Програма вирішує проблему на один обід, але у вашому випадку легким способом вирішити проблему було б запустити алгоритм один раз на кожен обід, щоразу надаючи попередні супутники кожного закусочного як нечіткі або абсолютні негативні вимоги. (Перевага нечітких вимог полягає в тому, що ви гарантуєте, що алгоритм зупиниться на всіх входах, навіть якщо ідеального розташування не вдасться знайти).

У цьому процесі ми б спершу спробували розмістити кожну закусочну відповідно до абсолютних вимог - можливо, ви захочете пропустити цю частину процесу, оскільки вона працює лише тоді, коли абсолютні вимоги відносно невеликі; інакше у вас виявиться неймовірно величезна проблема !

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

Ця частина процесу в ідеалі повинна повторюватися з декількома початковими конфігураціями і легко може бути обчислена паралельно.


|S|

0

Я думаю, що будь-яке дійсне місце для сидіння еквівалентне d-регулярному гіперграфові на | S | вершини, де d - кількість обідів, з рангом не більше k та максимальним кодом. 1. Тривіальним рішенням є те, щоб усі завжди сиділи самі, але я думаю, що мета - мінімізувати кількість столів?


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