这个问题出现在现实世界中,但我已将其翻译成更通用的“类似教科书”的表述。我怀疑它是NP,但我特别感兴趣的是知道它是否有名字或者是众所周知的,因为我认为我不能成为第一个遇到它的人。 ; - )
想象一下,有N位客人参加聚会。每位客人都可以将他/她的“招牌菜”带到聚会上,或者什么都不带。每位客人都喜欢或讨厌其他客人可能带来的每道菜(由于他们都是老朋友,所以这是事先知道的!),但他们都喜欢自己的菜肴。
是否有一种确定性算法不会花费指数时间来找到满足约束的最小菜肴,所有客人都会发现至少一道菜是他们喜欢的?我说“最小”,但实际上可能有多种解决方案,如果可能,我想知道所有这些。
或者,以更抽象的方式,想象一个方形矩阵,其中所有元素都是0或1,并且所有对角元素都是1.什么是最小的行集合,使得总和(或二进制OR)每组中的行都没有零? (行将是菜肴,列将是客人,1意味着客人喜欢菜,而对角元素是1,因为每个人都喜欢自己的菜。)
这可以推广到非平方矩阵,或者通过去除diagonal = 1规则(尽管后者保证总会有至少一个解)。但我现在不关心这些案件......
我已经有一个程序通过详尽的搜索来解决它,并且对于大约20的N来说足够快,但它需要指数时间。我想我可能需要重复使用随机算法来找到更大的N值的足够好的解决方案。
加
哇,谢谢你的快速回答! “设置封面”,这就是我要找的名字。 :)答案 0 :(得分:22)
这称为SET COVER问题,它是NP完全的。
答案 1 :(得分:0)
集合封面问题,如Antti Huima所链接的维基百科文章所述,缺乏每位客人喜欢自己菜肴的特色。另外,我不知道这是否有任何区别。