对于以下问题,我想知道是否已经存在一种已知算法,因为我不想重新发明轮子。

在这种情况下,它与酒店房间有关,但我认为这是无关紧要的:

name   | max guests | min guests
1p     | 1          | 1
2p     | 2          | 2
3p     | 3          | 2
4p     | 4          | 3

我正在尝试在可用房间中分配一定数量的客人,但是分配必须满足房间的“最低客人”标准。另外,房间需要尽可能地高效地使用。

让我们以7位客人为例。我不想要这种组合:
3 x 3p ( 1 x 3 guests, 2 x 2 guests )

..这将满足最低标准,但效率不高。而是我在寻找诸如以下的组合:
1 x 3p and 1 x 4p
3 x 2p and 1 x 1p
etc...

我认为这是一个熟悉的问题。是否已经有解决该问题的已知算法?

澄清:
所谓高效,是指以尽可能多的房间来分配客人(客人的偏好在这里是次要的,对我正在寻找的算法并不重要)。
希望所有满足此效率标准的排列。因此,在上面的示例中,7 x 1p也可以。

因此,总而言之:
是否存在一种已知的算法,该算法能够在具有minmax容量的插槽上尽可能高效地分配项目,始终满足min标准,而则尽可能满足max标准。

最佳答案

您需要使用dynamic programming,定义成本函数,并尝试使人适应成本函数尽可能小的房间。

您的成本函数可能类似于:

房间的空位总数+房间数

它可能与最小程度的愤怒问题相似:Word wrap to X lines instead of maximum width (Least raggedness)

当您将单词排列成一行时,您就可以使房间适合人。

约束条件是房间中的空缺,而不是线条的长度。 (如果不满足约束条件,则将产生无限的成本)

并且递归关系几乎是一样的。

希望能帮助到你

关于algorithm - 有效分配项目并满足最小值的已知算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7998938/

10-12 19:35