求解任意图的最小支配集(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.
求解任意图的最小支配集(Minimun Dominating Set)的更多相关文章
- POJ3659 Cell Phone Network(树上最小支配集:树型DP)
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...
- POJ 3398 Perfect Service --最小支配集
题目链接:http://poj.org/problem?id=3398 这题可以用两种上述讲的两种算法解:http://www.cnblogs.com/whatbeg/p/3776612.html 第 ...
- POJ 3398 Perfect Service(树型动态规划,最小支配集)
POJ 3398 Perfect Service(树型动态规划,最小支配集) Description A network is composed of N computers connected by ...
- POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法
POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ...
- POJ 3659 Cell Phone Network(树的最小支配集)(贪心)
Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6781 Accepted: 242 ...
- 树形DP求树的最小支配集,最小点覆盖,最大独立集
一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合时此点还需要被覆盖,被覆盖也有两种状态,即被子节点覆盖或者被父节点覆盖.总结起来就是三种状态,现对 ...
- 树形DP 树的最小支配集,最小点覆盖与最大独立集
最小支配集: 从V中选取尽量少的点组成一个集合,让V中剩余的点都与取出来的点有边相连. (点) 最小点覆盖: 从V中选取尽量少的点组成一个集合V1,让所有边(u,v)中要么u属于V1,要么v属于V1 ...
- 树的问题小结(最小生成树、次小生成树、最小树形图、LCA、最小支配集、最小点覆盖、最大独立集)
树的定义:连通无回路的无向图是一棵树. 有关树的问题: 1.最小生成树. 2.次小生成树. 3.有向图的最小树形图. 4.LCA(树上两点的最近公共祖先). 5.树的最小支配集.最小点覆盖.最大独立集 ...
- 求树的最大独立集,最小点覆盖,最小支配集 贪心and树形dp
目录 求树的最大独立集,最小点覆盖,最小支配集 三个定义 贪心解法 树形DP解法 (有任何问题欢迎留言或私聊&&欢迎交流讨论哦 求树的最大独立集,最小点覆盖,最小支配集 三个定义 最大 ...
随机推荐
- sublime +react+es6开发环境
Babel Sublime3才有的插件,支持ES6.JSX语法高亮. 菜单->View->Syntax->Open all with current extension as...- ...
- emulator: Trying to vcpu execute at eip:6d4053
- faster-rcnn目录介绍
data 用来存放pretrained模型,比如imagenet上的,以及读取文件的cache缓存 experiments 存放配置文件以及运行的log文件,另外这个目录下有scripts可以用end ...
- C++ std::unordered_multiset
std::unordered_multiset template < class Key, // unordered_multiset::key_type/value_type class Ha ...
- [Training Video - 3] [Groovy in Detail] Non-static and Static variables, objects and object referances
log.info "starting" // we use class to create objects of a class Planet p1 = new Planet() ...
- Smarty模板的引用
(1)include用法和php里的include差不多(2)smarty的include还具备自定义属性的功能例如 {include file="header.tpl" titl ...
- SQL虚拟数字辅助表
虚拟数字辅助表是一个整数序列,可以用来完成多种不同的任务,如生成日期跟时间值序列,及分裂值列表.要用查询逻辑产生一个大的整数序列,可以使用交叉连接(cross join). 交叉联接(cross jo ...
- k8s启动Pod遇到CrashLoopBackOff的解决方法
1.用kubectl get pod 当看到上面的状态后执行第2步 2.查看pod详情 [root@cc hzb]# kubectl describe pod ceph-mysql-hzb-pod 找 ...
- C++11新特性之auto
auto的使用 c++11引入了auto类型说明符,auto让编译器通过初始值来推算变量的类型,所以auto定义的变量必须有初始值. 使用auto也能在一条语句中声明多个变量,因为一条声明语句只能 ...
- HDU 5119 Happy Matt Friends(DP || 高斯消元)
题目链接 题意 : 给你n个数,让你从中挑K个数(K<=n)使得这k个数异或的和小于m,问你有多少种异或方式满足这个条件. 思路 : 正解据说是高斯消元.这里用DP做的,类似于背包,枚举的是异或 ...