我正在解决一个算法问题并设法分解它。 这是我遇到的子问题:
我有n套,假设{1,2},{2,3},{3,4}
我需要找到在这n组中每个都至少有一个元素的最小集合,这里的解决方案是:{2,3}
。
这不是一个贪婪的问题,考虑{1},{1,3},{1,3,4},{2,3,4},{2,3},{2}
解决方案是{1,2}
,即使3
的频率最高。
也许这个算法也有一个共同的名称,我试图搜索,但没有找到任何有用的东西。
答案 0 :(得分:4)
这听起来像minimum vertex cover problem,这是NP完全的。
如果它们在同一个集合中共存,则让每个值都是顶点并且两个顶点相邻。通过这种结构,任何组中的任何元件与盖顶点之间的距离最多为1,因此最小顶点盖将覆盖这些组。考虑它的另一种方法是,如果一个集合不包含覆盖顶点,那么集合中必须至少有一个边缘不包括构造的覆盖顶点。这与cover属性相矛盾,但是因此每个set都包含一个覆盖顶点。