在礼堂中分配席位

时间:2016-05-21 05:49:30

标签: algorithm data-structures

我遇到了面试问题:

礼堂内有一个事件,礼堂的容量是NxM。 每组预订机票和所有机票均已预订,现在您必须为所有机票分配座位号,以便最小分组数。

所以基本上给出了一个2-D数组,我们有一些特定大小的组(不同的组可能有不同的大小).Array需要完全填充最小数量的组分割。

我发现的一个强力递归方法是:放置第一组,然后放置第二组,依此类推。对这种排列进行排列,以找到最小分割的排列。

我发现一个有效的解决方案是使用子集和问题。 https://en.wikipedia.org/wiki/Subset_sum_problem

我无法理解如何使用子集和问题来解决这个问题。 请建议我如何处理这个问题。我不是在寻找代码,只需伪装代码或算法即可。

1 个答案:

答案 0 :(得分:0)

首先,我假设“分组”意味着该组的某些部分在一行中而剩余部分在另一行中。如果一行中的座位数是N,并且给定一个包含不同组大小的集合,则需要找到一个总和为N的子集。如果找到这样的子集,那么该行将被填充而不会破坏任何团体。如果找不到这样的子集,那么您将需要至少打破一个组。那么这里可以有多种策略。

1)您可以选择一个将分为两行的组。该组可以是剩余的最大的,也可以是最小的,也可以随机挑选。确定此组后,您有2行,其中少于N个空座位需要递归填充。

2)策略可以是找到总和为2 * N的子集 - 如果找到,则将分组1个组。如果未找到,则找到总和为3 * N且具有2个组拆分的子集,依此类推。对于M行,最大组拆分数为M-1。

继续1)或2)填充剧院中的M行。