良好的座位安排,可为一群人提供饭菜和k桌子


23

给定一组的人,我想坐他们在规模的表,一餐的序列。(当然,每顿饭都有足够的桌子来容纳所有。)我想安排这个,这样就没有人两次与同一个人共享一张桌子。典型值为,和6至10顿饭。Sk|S||S|=45k=5

简而言之,我想找到的一系列分区,以使每个分区由基数为的成对不相交子集组成,并增加了全局属性,即两个这样的子集之间的任何交集最多包含一个元素。我怀疑这可以表述为图形理论或组合问题。Sk

我很高兴能更好地解决问题,并指出相关文献的指针,因为这超出了我的领域。

背景:这可用于Schloss Dagstuhl的座位安排,许多计算机科学家在一周之内来讨论他们的研究。目前,座位是随机进行的,不足为奇的是,有人会在一周的时间内两次(或更频繁地)坐在同一个人的座位上。同样也不足为奇的是,我们收到了有关此问题的一些投诉,并提出了模糊的建议以改进此问题。我想更好地理解这一点。对问题的更强有力的表述包括优化彼此相邻的人,但是我认为这与5号表无关。

在应用程序之外,我认为一个有趣的问题是对于给定的和可提供的最大餐食数量,即存在多少这样的分区。Sķ


IIRC,这听起来像汉密尔顿-滑铁卢问题。
Juho

通过浏览有关汉密尔顿-滑铁卢问题的论文,我得到的印象是,它涉及更严格的问题,即确保参与者彼此之间仅坐一次。
克里斯蒂安·林迪格

1
柯克曼的女学生问题似乎具有相似的性质,可能是一个起点。
克里斯蒂安·林迪格

Answers:


11

这是原始答案的变体(如下),提供了所需的设置:5人桌,45人和10顿饭,只是一顿饭有几张4人桌。

为大小为9的字段。选择4条垂直的简并线 { b x | X ˚F }对于每个b = 0 1 2 3和申报人“空”。我们还有81-9x4 = 45个人。F{(b,x)|xF}b=0,1,2,3

9餐由斜率给出。与4条空的简并线的交点将表格大小减小为9-4 = 5。a=0,1,,8

其余的简并行b = 4 5 6 7 8。这里的表大小为9。但是(在任何解决方案中)我们都可以将大小为9的表分解为大小为5的表和大小为4的表。{(b,x)|xF}b=4,5,6,7,8

如果人数更多,可以使用11号字段。


首先,让我们处理人和k餐。k2k

选择一个大小为k的有限域,并识别具有F × F的人。每餐都对应一个斜率,而桌子上平行于该斜率的线。FkF×F

具体来说,餐k个{ x a x + b | X ˚F }为每个b ˚Fak{(x,ax+b)|xF}bF

您想要的相交属性是这样的事实,即具有不同斜率的直线恰好在一个点处相交。


要处理人,请将他们分成两组,每组k 2,然后将上述构造应用于每组。要处理2 k 2 - k = 45,请在第一组中标记固定的行,例如{ x x | X ˚F }为“空”。您可能有几张桌子,其中k 1人。2k2k22k2k=45{(x,x)|xF}k1

对于更多的一餐,例如可以在第六餐开始时分成两组。(假设您交错原始分区,以确保两个组“混合”。)当然,这可能会导致某些交叉。


这是一个有趣的构造,但由于限制,对于我的特殊情况来说太过局限了S | = k 2,但可以作为下限服务器。|S|=k2
Christian Lindig

我已经编辑了该问题以解决更多常规参数。
Manu

1
我相信[block design](en.wikipedia.org/wiki/Block_design)是适用于一般情况的适当框架,如以下domotorp所指出的。但是,我喜欢此方法的建设性方面,接受是一个很好的答案。
Christian Lindig

3
我很好奇是否有十餐的解决方案。我做了一些谷歌搜索,但找不到答案。无论如何,一旦找到最佳解决方案,如何对其进行编码,以便组织者可以粘贴参加者的姓名并取回所有座位分配?这对他们有用吗?如果我们简化此过程,其他研讨会可能会采用Dagstuhl的良好传统。
Manu

1
不错的更新。如果实施,我们应该为您在Dagstuhl喝啤酒:)
Suresh Venkat 2013年

4

这是您可以提供的餐点数量(上限)的上限。

|S|=nnkn/k

Sn/kkΘ(nk)

nΘ(n2)O(n/k)

实际上,在这里找到常量并不难,当您进行数学运算时,您得到的正好是的上限。n1k1


3

如果您想让两个人恰好坐在同一张桌子上一次,那么这被称为可解析2设计,并且已经进行了很多研究。当然,如果两个人最多只能见一次面,可以不吃几顿饭来解决您的问题。(但我想可能还有其他解决方案。)


我希望两个人最多见一次。表的身份不是问题,我不确定作为您的答案的一部分坐在同一张表的重要性,但是会查找链接的定义。
Christian Lindig

2

我不确定您是否需要确定性算法,但是我过去使用Markov链Monte Carlo方法解决了类似的问题。

您可以在Github上看到此方法的一个有效示例 -该程序尝试将一组人坐在固定大小的桌子上,给定一组座位约束,可能是正面的也可能是负面的(“必须”或“不得” ),也可以是绝对的或相对的(“首选”)。

注意:该程序不能解决您提出的完全相同的问题,但是确实给出了马尔可夫链蒙特卡罗方法的有效演示,并且它足够接近,您可以根据需要轻松调整它。

该程序可以解决一顿晚餐的问题,但是,在您的情况下,解决该问题的一种简便方法是为每顿晚餐运行一次算法,每次为每个晚餐的先前同伴提供模糊或绝对否定要求。(模糊要求的优点是,即使找不到完美的排列,也可以保证算法在所有输入上都将停止)。

在此过程中,我们将首先尝试根据绝对需求安置每个餐车-您可能要跳过该过程的这一部分,因为它仅在绝对需求数量相对较小时才起作用;否则,您将面临一个难以置信的巨大问题

在下一步中,我们创建一系列表并将参与者随机分配给表以进行初始配置,并计算出一个分数来表示已满足的模糊要求的数量。用餐者对随机切换,并重新计算这些表的分数,以确定新配置是否可取。

理想情况下,应使用几种初始配置重复此过程的一部分,并且可以轻松地并行计算。


|S|

0

我认为任何有效的座位安排都等同于| S |上的d-正则超图。顶点,其中d是晚餐的数量,排名最高为k,最大码数为1。最简单的解决方案是让每个人总是自己坐下,但我想目标是最大程度地减少桌子数量?


1
表的数量在此设置中是固定的。人数绝对少于人数。
Suresh Venkat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.