从农夫过河问题理解顶点覆盖、团和独立集
农夫过河问题
经典的农夫过河问题,相冲突的生物之间有连线,每次携带走某几个生物后,要保证剩下的没有连线存在。问船的容量最小是多少呢?
视频:【Numberphile】农夫过桥问题和阿尔昆数
直观的思路就是,找最少需要几只手盖住顶点后能消除所有连线(即最小覆盖):
但有时只有最小顶点覆盖个位置是不够的。
如下面的例子,最小顶点覆盖显然是1,把狼盖住就行了:
但船若只有1个额外位置是不行的,一个来回之后就卡住了:
这就需要再额外增加一个位置,也就是最小顶点覆盖数+1个位置。这时只要总是把狼带在身边,就能用剩下的位置一个个运送其它生物了。
所以最多只需要最小顶点覆盖数+1个位置,而有时只需最小顶点覆盖数个位置即可。关于确定什么时候需要+1是NP难的问题。
农夫过河问题可以归纳成顶点覆盖问题。下面引入顶点覆盖的具体概念,并与团和独立集作对比。
点覆盖 (vertex covering set)
设C ⊂ V (G) ,若 G 的每条边至少有一个端点属于 C,则称 C 是 G 的一个点覆盖。若对任给的v ∈C ,C −{v}不再是 G 的点覆盖,则称点覆盖 C 是一个极小点覆盖。图 G 的含点数最少的点覆盖称为最小点覆盖,其点数称为 G 的点覆盖数,记为 β (G) 或 β 。
C1 = {v0, v1, v3, v5, v7} 和 C2 = {v1, v2, v3, v4, v5, v6, v7, v8}都是G的点覆盖,且都是极小点覆盖。其中C1是最小点覆盖,β (G) =4。
团(clique)
设 K ⊂ V (G),若导出子图G[K] 是完全图(每对不同的顶点之间都恰连有一条边相连),则称 K 是 G 的一个团。若给团 K 添加V (G) \ K 中任何顶点,导出子图都不再是团,则称 K 是一个极大团。图 G 的含顶点数最多的团称为 G 的最大团,其顶点数称为 G 的团数,记为Cl(G) 。
k1 = {v0, v1, v2},k2 = {v0, v2, v3},k3={v0, v2, v3, v4}都是G的团。
其中k1是极大团,k2则不是。k3是G的最大团。
点独立集(vertex independent set)
设 I ⊆ V(G),若 I 中任二顶点均不相邻,则称 I 为图 G 的一个点独立集(简称独立集);若对∀u ∈V (G) \ I , I U {u}都不再是 G 的独立集,则称独立集 I 为图 G 的一个极大点独立集。G 的含点数最多的点独立集称为最大点独立集,
I1 = {v0}, I2 = {v1, v4, v7},I3 = {v1, v3, v5, v7}都是G的独立集,且都是极大独立集。其中I3是最大独立集。
相互联系
对任意的无向图G=<V, E>和子集V’ ⊆ V,下面命题是等价的:
- V’是G的顶点覆盖
- V - V’ 是G的独立集
- V - V’ 是G补图的团
顶点覆盖和独立集是互补关系。顶点覆盖包含了所有连线,盖住后剩下的点之间就没有任何连线了,便形成了独立集。
独立集就是补图的团。独立集的点之间没有任何连线,在补图中就有所有连线,便形成了团。
从农夫过河问题理解顶点覆盖、团和独立集相关推荐
- c语言课程农夫过河问题实验心得,农夫过河实验报告
<农夫过河实验报告>由会员分享,可在线阅读,更多相关<农夫过河实验报告(22页珍藏版)>请在人人文库网上搜索. 1.数据结构与算法综合实验"课程设计报告题目:农夫过河 ...
- 农夫过河问题(图结构)
[题目介绍]: 所谓农夫过河问题是指农夫带一只狼.一只羊和一棵白菜在河南岸需要安全运到北岸.一条小船只能容下他和一件物品只有农夫能撑船.问农夫怎么能安全过河. 当然,狼吃羊,羊吃白菜,农夫不能将这 ...
- 图结构解决农夫过河问题(二附源代码)
[什么是图结构]:图结构就是所有数据元素都可以连接,跟树结构有很大区别. 图结构包括两大部分: 1.顶点:所有的数据元素,每个元素就是一个顶点(数字1.2.3.4.5.6). 2.边:连接两个元素之间 ...
- 顺序队列模板简单应用算法设计:农夫过河(这个比较难,我自己都觉得难)
文章目录 问题描述 : 输入说明 : 输出说明 : 输入范例 : 输出范例 : 思路分析 伪码实现 事故现场 第一次提交 分析与总结 如有不妥,或者疑问,请加扣扣651378276,一起商议学习进步 ...
- java数据结构 农夫过河,数据结构农夫过河
农夫过河问题(C++编写)_电子/电路_工程科技_专业资料.1.问题描述从前,一... 农夫过河的安全步骤: NO1:农夫,狼,羊,白菜都在河的左岸 NO2:农夫带羊到... 南阳理工学院 " ...
- 农夫过河(基于C语言)
文章目录 一.农夫过河问题简介 二.解题思路 三.代码实现 1. 物体编码 2. 获取物体的位置 3. 判断河岸两侧状态是否和平 4. 农夫运送过程(核心) 5. 完整代码 四.学习总结 五.参考资料 ...
- C语言位运算农夫过河,位运算常见操作和农夫过河问题(C++实现)
二进制常见操作 二进制数中 1 的个数 解法 1 用 n & 1 判断最右边一位是否为 1,右移之后继续判断最右边一位,重复直到 n = 0.时间复杂度为 O(log2n) #include ...
- c语言课程农夫过河问题实验心得,农夫过河实验报告.docx
农夫过河实验报告 "数据结构与算法综合实验"课程设计报告题目: 农夫过河问题学 院计算机科学技术年 级2014级专 业计算机科学与技术学 名高晗日 期2016年3月30日星期三成 ...
- c语言实现农夫过河问题,傻瓜式讲解,看不明白来打我
农夫过河问题本站可以搜索到很多博客,笔者是初学c语言,功底不深,没能力创造源代码,只是看了一篇大佬的文章对该问题进行描述之后,产生了一点自己的想法,我想以我能理解的方式分享给许多初学c语言朋友们,笔者 ...
最新文章
- 压缩和归档及vi的使用
- python学生管理系统教学_Python项目:学生信息管理系统(完整版)
- 加密和解密算法 Asp.net
- C++ 有符号整数和无符号整数修饰符之间的差别
- 多元线性回归分析问题
- 《数据结构与算法》实验报告——二叉树的遍历
- 【Code-Snippet】TextView
- 洛谷 P2596 [ZJOI2006]书架 解题报告
- 再好的代码没有电也跑不了
- linux运行bin not found,自己制作根文件后,程序-/bin/sh:XXX:not found错误
- 数据结构——一些小点
- 超级终端连接华为交换机_Win8系统使用超级终端连接华为交换机的方法
- tomcat修改端口号 / 同时运行多个tomcat
- 虚拟机ping百度失败:PING www.a.shifen.com (163.177.151.110) 56(84) bytes of data.光标就一直闪
- 软件工程 实践者的研究方法 第三章答案
- python爬取喜马拉雅音频
- java压缩文件夹并加密
- Java小白常见异常|ArithmeticException算数异常的解决过程
- JQuery之Ajax方法
- 学计算机怎么入校,计算机摇号入学到底是如何进行随机录取的?一文了解!