Algorithm 不可区分代表制有效解?

Algorithm 不可区分代表制有效解?,algorithm,complexity-theory,Algorithm,Complexity Theory,我们有S1,S2,…,Sn组。这些集合不必是不相交的。我们的任务是为每个集合选择一个具有代表性的成员,以便选择的元素总数尽可能少。一个元素可以存在于多个集合中,并且可以表示它所包含的所有集合。有没有一种算法可以有效地解决这个问题?重述之后,回答这个问题更容易:让原始集合S1、S2、…、Sn成为宇宙的元素,让原始集合成员成为集合本身:T1、T2、…、Tm(其中Ti包含元素{Sj},它们是包含相应成员的原始集合) 现在我们必须用集合T1,T2,…,Tm覆盖宇宙S1,S2,…,Sn。确实如此。这是一个

我们有S1,S2,…,Sn组。这些集合不必是不相交的。我们的任务是为每个集合选择一个具有代表性的成员,以便选择的元素总数尽可能少。一个元素可以存在于多个集合中,并且可以表示它所包含的所有集合。有没有一种算法可以有效地解决这个问题?

重述之后,回答这个问题更容易:让原始集合S1、S2、…、Sn成为宇宙的元素,让原始集合成员成为集合本身:T1、T2、…、Tm(其中Ti包含元素{Sj},它们是包含相应成员的原始集合)


现在我们必须用集合T1,T2,…,Tm覆盖宇宙S1,S2,…,Sn。确实如此。这是一个众所周知的NP难问题,因此没有有效的算法来解决它(除非理论家通常说P=NP)。正如你在维基百科页面上看到的,有一个贪婪的近似算法;它是有效的,但近似比不是很好。

不想窃取Evgeny的荣誉,但这里有一个相当简单的方法,可以更严格地说明海报问题的一般情况是NP难的

考虑从(V,E)中的顶点V寻找最小集X的问题,其中E中的每一条边都与X中的至少一个顶点相邻

边可以由无序的两元素集{va,vb}表示,其中va和vb是V中不同的元素。请注意,表示为{va,vb}的边e与vc相邻,当且仅当vc是{va,vb}的元素

因此,最小顶点覆盖问题与寻找V的最小大小子集X相同,其中由E中的边定义的每个边集{va,vb}包含X中的元素

如果有一个算法可以有效地解决原始问题,那么就有一个算法可以有效地解决上述问题,因此也可以有效地解决最小顶点覆盖问题。

我假设“有效”是指多项式时间

Evgeny Kluev是正确的,这个问题是NP难的。它的决策版本被称为,并且在这个概念引入后不久就被证明是我们现在所称的NP完全。虽然Evgeny的归约是从击中集问题到集覆盖问题,但不难看出显式的逆归约


给定一个集合C={C1,C2,…Cm},其并集为U={u1,u2,…,un},我们想找到一个最小基数子集C',其并集也等于U。在初始问题中,将Si定义为{Cj in C | ui是Cj}的一个元素。然后,S={S1,S2,…,Sn}的最小命中集等于我们所需的C'.

如果你能接受接近最优的解决方案,那么需要考虑的两种算法是模拟退火算法和遗传算法(它们可能会得到最优解,但不一定)。模拟退火可以用于生产电子CAD自动定位(因为我是Wintek自动定位程序开发团队的一员)。

是的,设置封面是NP难的。但是,将任意问题简化为NP难问题并不会使原来的问题变成NP难问题。@sentinel:没错。但在这种特殊情况下,并没有归结为NP难问题。相反,我们有一个重述,或者,换句话说,NP难问题的同一性。我必须仔细阅读它,因为我急于不同意这个问题没有一个有效的算法,但叶甫根尼的答案显然是正确的答案。你可以改进你的答案,展示如何减少这个问题的集合覆盖率,这将证明这个问题是NP难的。这个问题似乎不需要他覆盖
{S1,…,Sn}
,而是要确定至少一个集合中存在的最小元素集,以及所有集合中的整体元素集。例如,如果
S1={1,2}
S2={2,3,4,5}
,则元素2对这两个集合都具有代表性,因此代表性的最小数量为1。这与集合覆盖问题不同。@Shahbaz Evgeny的意思是让U={S1,S2}成为你的宇宙,定义T1={S1},T2={S1,S2},T3=T4=T5={S2}(每个Ti是包含i的所有集合的集合)。我们可以用T2覆盖宇宙,这与{2}是最小击中集这一事实相对应。你能定义一个有代表性的成员吗?如果一个元素对所有集合都是公共的,那么它是所有集合的代表吗?答案是这个元素?看起来你寻求的是。如果是这样的话,我会发布一个详细的答案。@rrufai,不一定。例如
S1={1,2},S2={2,3},S3={3,4}
。他的问题的答案是2,即
2
3
可以被选为三组的代表,这是最小的数字。如何用不相交集解决这个问题?你愿意联合
S1
S2
,因为他们共用一个号码吗?然后你也可以联合
S2
S3
,但这就剩下最后一组了。@Shahbaz:是的,你说得对。这行不通。让S.e代表S的某些元素。你可以将所有可能的组合联合起来——联合(S1.e,S2.e),联合(S1.e,S3.e),联合(S2.e,S3.e)——所有的n(n-1)/2,但联合是破坏性的。当您调用union时,基集不断变化。您所描述的不是命中集问题。在命中集合问题中,集合C'只需要每个Cj中有一个元素。因此,Cj的并集不一定等于U。@rrufai我们正在寻找的C'是C上集合覆盖问题的(优化形式)解。因此,C'的并集必须等于C的并集(我称之为U)。通过适当地定义S(可以在多项式时间内完成),S上的击中集问题(的优化形式)的解决方案产生C上的集合覆盖问题的解决方案。如果我们有一个总是解决击中集问题的多项式时间算法,NP必须