假设有N组人和M表。我们知道每个组的大小和每个表的容量。我们如何将人们与表格相匹配,使同一组中没有两个人坐在同一张桌子上?
贪婪的方法是否适用于此问题? (贪婪的方法如下工作:对于每个表,尝试用来自不同组的人“填充”它。
答案 0 :(得分:4)
假设组和表的大小不一致,我认为所描述的贪婪方法不起作用(至少没有其他规范)。假设您有一个2个T1的表和一个3个T2的表,以及3个组{A1},{B1,B2}和{C1,C2}。如果我按照你的算法,T1将收到{A1,B1},现在你留下T2和{B2,C1,C2},这是行不通的。然而,存在解决方案T1 {B1,C1},T2 {A1,B2,C2}。
我怀疑以下贪婪的方法是有效的:从最大的群体开始,每个群组分配一个人,每个桌子分配一个人,挑选第一张拥有最多免费席位的人。
答案 1 :(得分:2)
的Mathias:
我怀疑以下贪婪的方法是有效的:从最大的群体开始,每个群组分配一个人,每个桌子分配一个人,挑选第一张拥有最多免费席位的人。
事实上。而tkleczek的一小部分论证证明了这一点。
假设有一个解决方案。我们必须证明算法在这种情况下找到了解决方案。
如果组的数量为0,则为真空。
对于归纳步骤,我们必须表明,如果有任何解决方案,那么最大组中的一个成员位于每个(最大组的最大组)最大表中。
条件L:对于表的所有对(T1,T2),如果T1 <1。 T2和最大组的成员位于T1,然后最大组的另一名成员坐在T2。
让S1成为解决方案。如果S1满足L,我们就完成了。否则,存在一对(T1,T2)表,其中T1
归纳假设:对于N组的所有星座和所有M个表,如果有解,算法将找到解决方案。
现在考虑存在解决方案的(N + 1)组和M表的星座。通过上述,还存在根据算法放置最大组的成员的解决方案。放置它们。这将问题减少到可解决的N组星座和M&#39;表格,根据归纳假设通过算法求解。
答案 2 :(得分:1)
以下贪婪的方法有效:
重复以下步骤,直到没有座位:
证明:
我们必须证明,在执行一个步骤后,我们仍然可以达到最佳解决方案。
让我们称最大团体的任何成员都是个酷人。 假设有一个不同的最佳解决方案,其中没有酷人坐在最大的桌子上。让我们选择坐在这个解决方案中最大的桌子上的任何人,并称之为蹩脚的家伙。 他必须属于不超过酷组的大小组。所以有另一张桌子坐着一个很酷的家伙,但没有蹩脚的家伙。我们可以安全地交换跛脚和酷人的座位,这也是最佳解决方案。