Algorithm 计算最大独立集算法的正确性

Algorithm 计算最大独立集算法的正确性,algorithm,graph,graph-theory,Algorithm,Graph,Graph Theory,我试图找到一个无向图的最大集,下面是我使用的算法: 1) 选择边数最少的节点 2) 清除所有的邻居 3) 从其余节点中,选择边数最少的节点 4) 重复这些步骤,直到覆盖整个图形 有人能告诉我这是否正确吗?如果不是,那么为什么这种方法计算图中的最大独立集是错误的?任何图中都没有一个确定的最大独立集;以3个节点上的循环为例,每个节点形成一个最大独立集。您的算法将为您提供一个图的最大独立集,而不保证它具有最大基数。另一方面,在图中查找最大独立集是NP完全的(因为该问题与查找最大团的问题是互补的),所以

我试图找到一个无向图的最大集,下面是我使用的算法:

1) 选择边数最少的节点 2) 清除所有的邻居 3) 从其余节点中,选择边数最少的节点 4) 重复这些步骤,直到覆盖整个图形


有人能告诉我这是否正确吗?如果不是,那么为什么这种方法计算图中的最大独立集是错误的?

任何图中都没有一个确定的最大独立集;以3个节点上的循环为例,每个节点形成一个最大独立集。您的算法将为您提供一个图的最大独立集,而不保证它具有最大基数。另一方面,在图中查找最大独立集是NP完全的(因为该问题与查找最大团的问题是互补的),所以可能没有一个有效的算法。

您所描述的将选择一个最大独立集。我们可以这样看:

  • 这就产生了一个独立的集合。相反,假设它没有。然后必须有两个节点通过添加到生成的集合中的边连接。先选取其中一个(称为u,另一个为v),然后将其添加到集合中时,您将从集合中删除其所有相邻节点,包括节点v。那么v就不会被加入到集合中,这就产生了矛盾

  • 这产生了一个最大独立集。自相矛盾,假设它没有。这意味着有一些节点v可以添加到由算法生成的独立集,但没有添加。由于未添加此节点,因此算法必须已将其从图形中删除。这意味着它必须与已添加到集合中的某个节点相邻。但这是不可能的,因为这意味着节点v不能添加到生成的独立集,而不使结果不是独立集。我们有一个矛盾


  • 希望这有帮助

    在评论中澄清情况后,您的解决方案是正确的。 根据本文的推论3,甚至更好 你得到了很好的子集顺序近似。
    Greedy对度最大为d的图中的(未加权)MIS给出1/(d+1)-近似值

    您想要一个最大独立集(一个在不删除节点的情况下无法增大大小的集)还是一个最大独立集(一个其大小在图中所有独立集中最大的集?)我想要最大集,不是最大设置。在第一步中,我选择节点数最少的节点,只是为了最大化输出,但我不需要最大值。我也可以选择任何随机节点。这可能更适合。感谢您的澄清-我只是想确保我正确地分析了您描述的算法。@WaleedKhan-cstheory更多用于CS中的研究级问题。这个问题非常适合SO或cs.stackexchange.com。我认为问题在于算法是否会找到最大独立集,而不是最大独立集。我意识到我刚才没有正确回答他的问题,编辑:)