对于以下问题,我想知道是否已经存在一种已知算法,因为我不想重新发明轮子。
在这种情况下,它与酒店房间有关,但我认为这是无关紧要的:
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
也可以。因此,总而言之:
是否存在一种已知的算法,该算法能够在具有
min
和max
容量的插槽上尽可能高效地分配项目,始终满足的min
标准,而则尽可能满足的max
标准。 最佳答案
您需要使用dynamic programming,定义成本函数,并尝试使人适应成本函数尽可能小的房间。
您的成本函数可能类似于:
房间的空位总数+房间数
它可能与最小程度的愤怒问题相似:Word wrap to X lines instead of maximum width (Least raggedness)
当您将单词排列成一行时,您就可以使房间适合人。
约束条件是房间中的空缺,而不是线条的长度。 (如果不满足约束条件,则将产生无限的成本)
并且递归关系几乎是一样的。
希望能帮助到你
关于algorithm - 有效分配项目并满足最小值的已知算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7998938/