表明以下问题是NP完全的。
电视问题是选择电视节目作为每周的电视之夜,这样 一群人中的每个人都看到他们喜欢的东西。你是 给定该组中的人员列表(P1,...,Pn)和 可能的节目(S1,...,Sk)。对于每个演出Si,都有一个子集 希望这样做的人中有选择的。你也得到w 您可以选择显示的星期数。问题是 是否有这么多电影,每个人都喜欢 其中至少一个。
我无法弄清楚哪个np问题可以解决以及如何建立证书。
答案 0 :(得分:1)
您可以将此模型建模为Set cover problem。您有元素{P1,...,Pn},其中的k个子集T1,...,Tk定义为Ti = {Pj:Pj喜欢Si}。然后,您想找到子集的最小集合,以使它们的并集成为整个人的集合。确定必要子集的数目是否小于或等于一个数目是NP完全的。寻找子集的实际最佳集合是NP难的。
答案 1 :(得分:0)
正如马特(Matt)上文所述,您的问题是固定封面问题。为了证明它是NP完全的,我们必须证明它在NP中,并且可以将已知的NP完全问题归结为您。如建议的那样,我将使用“顶点覆盖”作为我们已知的NP完全问题。
NP证明
为此,我们需要将问题表述为决策问题,并提供可以在P时间内验证的证书。我们的决定问题将是我们最多可以使用k个节目满足所有人。证书将是演出的子集(我们将其称为X子集)。要验证此证书,我们需要验证:
1)X是S的子集
这可以简单地通过遍历X并验证每个项目都出现在S中来完成。这可以在线性时间内完成。
2)| X | <= k
这也可以通过在X上递增计数值并将其与k进行迭代来迭代来解决。
3)所有人都满意
这可以通过遍历P并检查每个人是否由X中的选择来解决。在最坏的情况下,大多数人可以满足许多人的需求,这可以在O(P ^ 2)中完成。时间。
由于所有这些步骤都需要多项式时间,因此问题出在NP。
减少顶点覆盖问题的NP完整证明
顶点覆盖是一个问题,它涉及找到顶点的最小子集,以使每个边在该顶点子集中都有一个端点。此问题的输入是图形G(V,E)和k(顶点数)。为了将这个问题减少到您上面所述的布景实例,让k =满足每个人所需的最小演出数量,P = E,Sn =入射到n的边的集合。
该变换可以轻松地在多项式时间内完成,因为最昂贵的是最后一个变换(Sn =入射到n的边的集合),这需要O(V * E)时间。
现在,如果G具有一个大小为k的顶点覆盖G',那么在我们的问题中X是代表G中顶点的子集的集合。这意味着| X |。 = k。更进一步,X是P的集合覆盖,因为每个边(u,v)在G'中至少具有u或v(因为它是顶点覆盖),这意味着u或v在我们的集合覆盖问题中在X中。
这一切的意思是,如果您将顶点覆盖问题表示为您的问题,则找到解决方案也可以解决转换后的顶点覆盖问题,因为每个子集都代表G中的一个顶点,并且由于每个人都占了每个边,在顶点覆盖问题中也占了