最佳资源安排算法

时间:2019-07-26 23:55:25

标签: algorithm matching

这是问题的描述

  1. 给定一些可以在一段时间(例如一周)内使用的房间(可容纳6人,A型为10个人,B型为10个人)

  2. 鉴于一系列人希望在此时间范围内在其中一个房间中睡几个晚上(例如,爱丽丝(Alice)想在周一和周三的夜晚占一席位,鲍勃(Bob)想在周二和周三的一个席位。晚上)。

  3. 这些人之间存在一些限制(例如Alice不想和Bob呆在一个房间里)。

您如何确定这些房间是否可以容纳这么多人?

如果是。显示安排

如果不是。显示这些房间可容纳的最大人数,并显示安排

是否会有通用的算法来处理这种资源安排问题?

如果还有更多限制怎么办?

例如。如果人们在住宿期间没有空隙(例如Bod在星期二和星期三停留,那么他希望在两个晚上呆在同一地点),如果他们希望在一个静态的地点停留,他们会喜欢呆在一个房间里。

1 个答案:

答案 0 :(得分:0)

您可以在多项式时间内将最大independent set问题减少为该问题,证明您的问题为NP-Hard。因此,寻找精确的多项式时间算法几乎是没有希望的(除非您想证明P = NP)。

请考虑以下减少措施:

G = (V,E)表示一个带有|V| = n|E| = m的图,并让k <= n为整数。我们要回答以下问题:G是否包含大小至少为k的独立顶点集?

现在,我们将通过以下方式构造您的问题的实例:

  • 让时间段只是一个晚上。
  • 对于| V |中的每个顶点,让一个人(希望停留一晚),并说只有当相应顶点之间有一条边时,两个人才不想留在同一房间。在G。
  • 让这组房间由容量为k的房间和容量为1的n-k个房间组成。

对于实例的任何合理表示,显然可以在多项式时间内完成。

现在,如果在G中有一个大小为k或更大的独立集合,那么您可以将k个对应的人容纳在大房间中(他们不会介意彼此在一起),并在nk个其他人中容纳单人间。

相反,如果您设法以某种可行的方式使房间中的每个人都适合,那么您将展示出独立的大小为k的集合,对应于大房间中的k个人(您知道在k个人中在那里,因为每个房间都必须装满)。

因此,当且仅当相应的房间分配问题可以解决时,k中才会有一组独立的大小G

这证明了这种减少,因此表明您的问题是NP-Hard。