这是问题的描述
给定一些可以在一段时间(例如一周)内使用的房间(可容纳6人,A型为10个人,B型为10个人)
鉴于一系列人希望在此时间范围内在其中一个房间中睡几个晚上(例如,爱丽丝(Alice)想在周一和周三的夜晚占一席位,鲍勃(Bob)想在周二和周三的一个席位。晚上)。
这些人之间存在一些限制(例如Alice不想和Bob呆在一个房间里)。
您如何确定这些房间是否可以容纳这么多人?
如果是。显示安排
如果不是。显示这些房间可容纳的最大人数,并显示安排
是否会有通用的算法来处理这种资源安排问题?
如果还有更多限制怎么办?
例如。如果人们在住宿期间没有空隙(例如Bod在星期二和星期三停留,那么他希望在两个晚上呆在同一地点),如果他们希望在一个静态的地点停留,他们会喜欢呆在一个房间里。
答案 0 :(得分:0)
您可以在多项式时间内将最大independent set问题减少为该问题,证明您的问题为NP-Hard。因此,寻找精确的多项式时间算法几乎是没有希望的(除非您想证明P = NP)。
请考虑以下减少措施:
让G = (V,E)
表示一个带有|V| = n
和|E| = m
的图,并让k <= n
为整数。我们要回答以下问题:G
是否包含大小至少为k
的独立顶点集?
现在,我们将通过以下方式构造您的问题的实例:
对于实例的任何合理表示,显然可以在多项式时间内完成。
现在,如果在G中有一个大小为k或更大的独立集合,那么您可以将k个对应的人容纳在大房间中(他们不会介意彼此在一起),并在nk个其他人中容纳单人间。
相反,如果您设法以某种可行的方式使房间中的每个人都适合,那么您将展示出独立的大小为k的集合,对应于大房间中的k个人(您知道在k个人中在那里,因为每个房间都必须装满)。
因此,当且仅当相应的房间分配问题可以解决时,k
中才会有一组独立的大小G
。
这证明了这种减少,因此表明您的问题是NP-Hard。