Algorithm 结果表明,顶点覆盖的启发式解最多是最优解的两倍

Algorithm 结果表明,顶点覆盖的启发式解最多是最优解的两倍,algorithm,graph,graph-algorithm,heuristics,vertex-cover,Algorithm,Graph,Graph Algorithm,Heuristics,Vertex Cover,我得到的启发式解决方案是: 在图形上执行深度优先搜索 删除所有的叶子 剩下的图形成一个顶点覆盖 我被问到一个问题:“证明这个启发式算法最多是顶点覆盖最优解的两倍”。我怎样才能证明这一点呢?坏消息:启发式不起作用。 严格地说,1个孤立顶点是这个问题的反例。 尽管如此,启发式根本不提供顶点覆盖解决方案,即使您对孤立顶点和两点系进行了纠正。 看看顶点数为1到3的完全连通图: 1-严格地说,孤立顶点不是叶(它的阶数为0,而叶是阶数为1的顶点),因此启发式将保留它,而顶点覆盖将不保留它 2-启发式将丢

我得到的启发式解决方案是:

  • 在图形上执行深度优先搜索
  • 删除所有的叶子
  • 剩下的图形成一个顶点覆盖

我被问到一个问题:“证明这个启发式算法最多是顶点覆盖最优解的两倍”。我怎样才能证明这一点呢?

坏消息:启发式不起作用。 严格地说,1个孤立顶点是这个问题的反例。 尽管如此,启发式根本不提供顶点覆盖解决方案,即使您对孤立顶点和两点系进行了纠正。 看看顶点数为1到3的完全连通图:

1-严格地说,孤立顶点不是叶(它的阶数为0,而叶是阶数为1的顶点),因此启发式将保留它,而顶点覆盖将不保留它

2-启发式将丢弃两片叶子,而顶点覆盖将保留至少一片叶子


3-启发式将保留1个顶点,而顶点覆盖必须保留此组的至少2个顶点

坏消息:启发式不起作用。 严格地说,1个孤立顶点是这个问题的反例。 尽管如此,启发式根本不提供顶点覆盖解决方案,即使您对孤立顶点和两点系进行了纠正。 看看顶点数为1到3的完全连通图:

1-严格地说,孤立顶点不是叶(它的阶数为0,而叶是阶数为1的顶点),因此启发式将保留它,而顶点覆盖将不保留它

2-启发式将丢弃两片叶子,而顶点覆盖将保留至少一片叶子


3-启发式将保留1个顶点,而顶点覆盖必须保留该团的至少2个顶点

我假设图是连通的(如果不是这种情况,我们可以分别为每个组件解决此问题)

我还假设dfs树是根目录树,而叶子是根目录树中没有子节点的顶点(这很重要。如果我们定义不同,算法可能无法工作)

我们需要向大家展示:

  • 该算法返回的顶点集是顶点覆盖。实际上,任何无向图的dfs树中只能有几种类型的边:树边(这样的边被覆盖,因为至少有一个端点不是叶)和后边(同样,它的一个端点不是叶,因为后边从一个顶点到它的祖先。叶不能是叶的祖先)

  • >P>让我们考虑DFS树,忽略其余的边。我将说明使用少于一半的非离开顶点覆盖树边是不可能的。设S为最小顶点覆盖。考虑一个顶点<代码> v<代码>,使得<>代码> v>代码>不是一个叶子,<>代码> v >不是<代码> s>代码>(即,<代码> v<代码>是由启发式的问题返回的,但它不是最优答案)。code>v不是叶子,因此dfs树中有一条边
    v->u
    (其中
    u
    v
    的后续项)。边缘
    v->u
    S
    覆盖。因此,
    u
    位于
    S
    中。让我们从不在
    s
    中的启发式返回的顶点定义一个映射
    f
    ,作为
    f(v)=u
    (其中
    v
    u
    的含义与上一句相同)。请注意,
    v
    是dfs树中
    u
    的父级。但树中的任何顶点只能有一个父节点!因此,
    f
    是一种注入。这意味着启发式返回的集合中但不是最优答案中的顶点数不大于最优答案的大小。这正是我们需要展示的


    我假设图是连通的(如果不是这样,我们可以分别为每个组件解决这个问题)

    我还假设dfs树是根目录树,而叶子是根目录树中没有子节点的顶点(这很重要。如果我们定义不同,算法可能无法工作)

    我们需要向大家展示:

  • 该算法返回的顶点集是顶点覆盖。实际上,任何无向图的dfs树中只能有几种类型的边:树边(这样的边被覆盖,因为至少有一个端点不是叶)和后边(同样,它的一个端点不是叶,因为后边从一个顶点到它的祖先。叶不能是叶的祖先)

  • >P>让我们考虑DFS树,忽略其余的边。我将说明使用少于一半的非离开顶点覆盖树边是不可能的。设S为最小顶点覆盖。考虑一个顶点<代码> v<代码>,使得<>代码> v>代码>不是一个叶子,<>代码> v >不是<代码> s>代码>(即,<代码> v<代码>是由启发式的问题返回的,但它不是最优答案)。code>v不是叶子,因此dfs树中有一条边
    v->u
    (其中
    u
    v
    的后续项)。边缘
    v->u
    S
    覆盖。因此,
    u
    位于
    S
    中。让我们从不在
    s
    中的启发式返回的顶点定义一个映射
    f
    ,作为
    f(v)=u
    (其中
    v
    u
    的含义与上一句相同)。请注意,
    v
    是dfs树中
    u
    的父级。但树中的任何顶点只能有一个父节点!因此,
    f
    是一种注入。这意味着启发式返回的集合中但不是最优答案中的顶点数不大于最优答案的大小。这正是我们需要展示的


    是问题的启发性部分,还是你自己的建议作为问题的启发性“显示有