Хорошая расстановка сидений для последовательности блюд и столов размера k для группы людей

23

Учитывая набор людей, я хотел бы сидеть их для последовательности блюд за столами размера . (Конечно, для каждого приема пищи достаточно столов, чтобы все .) Я бы хотел организовать это так, чтобы никто не делил стол с одним и тем же человеком дважды. Типичными значениями являются и и от 6 до 10 приемов пищи.k | S | | S | = 45 к = 5Sk|S||S|=45k=5

Говоря более абстрактно, я хотел бы найти последовательность разделов такую, что каждый раздел состоит из попарно непересекающихся подмножеств мощности и дополнительного глобального свойства, заключающегося в том, что любое пересечение между двумя такими подмножествами содержит не более одного элемента. Я подозреваю, что это можно сформулировать как теоретическую или комбинаторную задачу о графе.kSk

Я был бы признателен за лучшую формулировку проблемы и ссылки на соответствующую литературу, поскольку она находится за пределами моей области.

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

Вне заявки я думаю, что интересным является вопрос о максимальном количестве приемов пищи, которое может быть подано для заданных и , т. Е. Сколько таких перегородок существует.kSk

Кристиан Линдиг
источник
IIRC, это звучит как проблема Гамильтона-Ватерлоо.
Juho
Взглянув на статью о проблеме Гамильтона-Ватерлоо, у меня сложилось впечатление, что она касается более строгой проблемы обеспечения того, чтобы участник сидел рядом друг с другом ровно один раз.
Кристиан Линдиг
1
Проблема школьницы Киркмана, кажется, имеет подобную природу и может быть отправной точкой.
Кристиан Линдиг

Ответы:

11

Вот вариант исходного ответа (ниже), который задает желаемую настройку: таблицы размером 5, 45 человек и 10 приемов пищи, за исключением того, что один прием пищи имеет несколько таблиц размера 4.

Пусть поле размера 9. Выберите 4 вертикальные вырожденные линии для каждого и объявить своих людей "пустыми". Нам осталось 81 - 9х4 = 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.


Сначала давайте разберёмся с людьми и приемами пищи. кk2k

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

В частности, еда имеет таблиц для каждого .k { ( x , a x + b ) | х F } б Fak{(x,ax+b)|xF}bF

Желаемое свойство пересечения - это тот факт, что линии с разными наклонами пересекаются ровно в одной точке.


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

Для большего количества приемов пищи можно, например, выбрать другой раздел в двух группах в начале 6-го приема пищи. (Допустим, вы чередуете исходный раздел, чтобы две группы «смешались».) Хотя, конечно, это может привести к некоторым пересечениям.

Manu
источник
Это интересная конструкция, но слишком ограничивающая для моего конкретного случая из-за но может быть использована в качестве нижнего предела. |S|=k2
Кристиан Линдиг
Я отредактировал вопрос, чтобы рассмотреть более общие параметры.
Ману
1
Я считаю, что [блочный дизайн] ( en.wikipedia.org/wiki/Block_design ) является подходящей основой для общего случая, как указано domotorp ниже. Тем не менее, мне нравится конструктивный аспект этого и принимаю это как хороший ответ.
Кристиан Линдиг
3
Мне любопытно, если решение с 10 приемами пищи существует; Я немного погуглил, но не смог найти ответ. В любом случае, как только будет найдено лучшее решение, как насчет его кодирования, чтобы организаторы могли вставлять имена участников и возвращать все места? Будет ли это полезно для них? Если мы сделаем это проще, другие мастерские могут принять эту прекрасную традицию Дагштул.
Ману
1
Хорошее обновление. Мы должны выпить пива в Dagstuhl в вашу честь, если это будет реализовано :)
Суреш Венкат
4

Вот (свободная?) Верхняя граница количества блюд, которые вы можете подавать.

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

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

Поскольку вы не хотите, чтобы какое-либо ребро встречалось в двух разных приемах пищи, и поскольку общее число ребер, возможных на наборе вершин размера равно , это показывает, что вы можете подавать только питание.Θ ( n 2 ) O ( n / k )nΘ(n2)O(n/k)

На самом деле, здесь нетрудно найти константы, и когда вы выполняете математику, вы получаете верхнюю границу ровно , которая для ваших типичных значений равна 11.n1k1

Винаяк Патхак
источник
3

Если вы хотите, чтобы какие-то два человека сидели за одним столом ровно один раз, то это называется разрешимым 2-дизайном и много изучено. Конечно, если пропустить несколько приемов пищи, это поможет решить вашу проблему, когда два человека могут встретиться не более одного раза. (Но другие решения могут существовать, я полагаю.)

domotorp
источник
Я бы хотел, чтобы два человека встретились максимум раз. Идентификация таблицы не является проблемой, и я не уверен в важности того, чтобы сидеть за той же таблицей, как часть вашего ответа, но буду искать связанное определение.
Кристиан Линдиг
2

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

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

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

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

В этом процессе мы сначала попытаемся разместить каждого посетителя в соответствии с абсолютными требованиями - вы можете пропустить эту часть процесса, поскольку он работает только тогда, когда абсолютные требования относительно малы; в противном случае вы столкнетесь с невероятно огромной проблемой !

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

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

chimeracoder
источник
|S|
0

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

Travis
источник
1
Количество таблиц фиксируется в этом параметре. И это строго меньше, чем количество людей.
Суреш Венкат