zoukankan      html  css  js  c++  java
  • 求解任意图的最小支配集(Minimun Dominating Set)

    给定一个无向图G =(V,E),其中V表示图中顶点集合,E表示边的集合。G的最小控制顶点集合为V的一个子集S∈V;假设集合R表示V排除集合S后剩余顶点集合,即R∩S=∅,R∪S=V;则最小控制顶点集合S满足约束条件:R中任意一个顶点至少与S的一个顶点直接相连。给定一个图,求出最小控制集。

    控制集定义:

    控制集又称支配集(Minimun Dominating Set),支配集是图G中的顶点集合S ⊆ V,满足对于任何顶点v∈V,要么v∈S,要么v与集合S中至少一个顶点相邻。

    最小控制集:

    对于支配集S0,不存在任何支配集S1,使|S1|<|S0|,则称S0是图G的最小支配集,γ(G)=|S0|称为图G的支配数;

    最小支配集的性质:

    1)求最小支配集问题被证明属于NP完全问题,即对于给定问题域的输入规模,目前尚无足够的手段证明该问题能够被判定在多项式时间内求解。

    2)在含n个点的任意图中,若任意点的度大于等于3,则该图的最小支配集小于等于3n/8。

    3)对于特殊图,如树,可使用贪心或dp的方法解决问题。

    将图论问题转化为数学问题:

    为了方便说明,我们定义图中节点vi的闭邻集为N[vi],若vi为支配点赋值为1,否则赋值为0。根据支配集的定义,我们可以看出,图A中每个点要满足的条件即为N[i]的和大于等于一,也就是说,vi及其临集中至少含有一个支配点,而最小支配集则要求v1…vn的和最小,转化为数学公式,也就是特殊的0-1整数规划问题。

    设计算法:

    输入:一个任意图,格式为,第一行n表示n个节点,接下来任意行,每行两个数,a,b表示a到b有一条无向边。

    输出:最小支配集(节点编号)

    1)遍历邻接表,找出度为0的节点,直接加入支配集,度为1的节点,其相邻节点加入支配集,并加入支配集,度为1的节点记录为精确取值。

    2)将邻接集合按从大到小排序,贪心选择最大的设为支配集,并动态维护邻接集合,直到支配集满足条件,将此支配集设为约束条件。

    3)开始深度搜索,首先对该集合判断是否满足条件,若满足,和当前约束条件比较,若小于当前上界,代替约束条件。

    4)按顺序遍历节点,若已经明确加入支配集则跳过该节点,若已经超过上界,返回,否则分别将该节点置为0和1,跳到步骤4。

    这个算法的朴素时间复杂度是O(2^n)的,理论上一般要优于这个时间复杂度。

    Grandoni算法的时间复杂度为O(2^0.61n),有兴趣的可以去看看论文:路纲, 周明天, 唐勇,等. 任意图支配集精确算法回顾[J]. 计算机学报, 2010, 33(6):1073-1087.

  • 相关阅读:
    JavaScript向input标签的value赋值
    thinkphp关于本地引用图片
    jquery中得到input的值
    HTML的video标签,不能下载视频代码
    PHP数据库类
    MySQL数据库之MyISAM与InnoDB的区别
    php函数ob_start(),解决header输出头报错问题
    eps图片中文乱码问题
    感悟----程序员需要养成的习惯
    <前m大的数>的妙解
  • 原文地址:https://www.cnblogs.com/flyuz/p/10255934.html
Copyright © 2011-2022 走看看