我给出的启发式解决方案是:
我已经得到了这样的问题:"证明这种启发式最多只是顶点覆盖的最佳解决方案的两倍"。我怎么能表明这个?
答案 0 :(得分:0)
坏消息:启发式方法不起作用。 严格地说,1个孤立的顶点是问题的反例。 尽管如此,启发式算法根本不提供顶点覆盖解决方案,即使您针对孤立顶点和2点派系进行校正也是如此。 看看完全连通的图形,顶点数量从1到3:
1 - 严格地说,孤立的顶点不是叶子(它有0度,而叶子是1度的顶点),所以启发式会保留它,而顶点覆盖不会
2 - 启发式将丢弃两个叶子,而顶点覆盖将至少保留其中一个
3 - 启发式将留下1个顶点,而顶点覆盖必须保留此clique的至少2个顶点
答案 1 :(得分:0)
我假设图表是连接的(如果不是这样,我们可以分别为每个组件解决这个问题。)
我还假设一个dfs-tree是root的,一个leaf是一个顶点,在root的dfs-tree中没有子节点(这很重要。如果我们用不同的方法定义它,算法可能会不行)。
我们需要向事物展示:
算法返回的顶点集是顶点覆盖。实际上,在任何无向图的dfs树中只能存在类型的边:树边(这样的边缘至少被覆盖,因为它的端点不是叶子)和后边缘(再次,它的一个端点)不是叶子,因为后缘从顶点到它的祖先。叶子不能是叶子的祖先)。
让我们考虑dfs-tree并忽略剩下的边缘。我将展示使用少于一半的非离开顶点覆盖树边缘是不可能的。设S是最小顶点覆盖。考虑一个顶点v
,这样v
不是一个叶子而v
不在S
中(也就是说,v
由有问题的启发式返回但它不在最佳答案中)。 v
不是叶子,因此dfs-tree中有一个边v -> u
(其中u
是v
的后继者)。边v -> u
由S
覆盖。因此,u
位于S
。让我们从启发式返回的顶点定义映射f
,这些顶点不在S
中作为f(v) = u
(其中v
和u
具有相同的位置意思与前一句一样)。请注意,v
是dfs-tree中u
的父级。但是树中的任何顶点都只能有一个父级!因此,f
是注射。这意味着启发式返回但不在最佳答案中的集合中的顶点数量不大于最佳答案的大小。这正是我们需要展示的内容。