当前位置: 首页 > 编程日记 > 正文

最小树形图及其生产方法

诸位看官,这是我第一次在整篇文章的所有图片里面加水印。小弟写博客的时间不长,就有两篇博客被盗用并未注明原文网址。这一方面使我痛心不已,另一方面迫使我不得不重新考虑一下版权保护问题。小弟不是吝啬鬼,如果影响阅读或者是确实需要我的图片的,请私信我,我将免费为有需求的看官提供图片。谢谢了!


最小树形图(Arborescence,亦称Directed Rooted Tree)是有向图的最小生成树(Minimum Spanning Tree)。本博客旨在详细的介绍最小树形图的生成方法,但不涉及具体的数学推导。先看一副有向权重图:
我们该如何求这幅图的一个最小树形图呢?我们在这里给出求最小树形图的一个流程图,该流程图是经典的Zhu-Liu算法:

上图中已经详细的给出了最小树形图的全部步骤,现在给出如何解决Step2中更新“以前指向该环中的任意节点的路径”的办法。假定环路中存在一点v,环中有一条边e1指向该点。环外有一条边e2指向该点。则e2更新后,新边的权重e2_new=e2_old-e1(环外边权重减环内边权重)
下面是针对本文开始所给出的图生成最小树形图的完整步骤:
算法开始(原图):
现在指定根节点为V1,即生成根节点为V1的最小树形图。(也可指定其他节点,这里以V1为例)
根据流程图中Step1的规则,根节点V1不用选择指向该点的最小权重边;指向V2的最小权重边为a5;指向V3的最小权重边为a4;指向V4的最小权重边为a7;指向V5的最小权重边为a8;指向V6的最小权重边为a10;指向V7的最小权重边为a14;如下图:
上图中有两个环,分别为由V2-V3组成的环和由V4-V5-V6组成的环。现在根据Step2分别对两个环路进行治理。
首先治理V2-V3环:
第一步:缩环为点,如下图左侧的大圆点(缩环为点后a4,a5边被取消,其余所有边保留)
第二步:对于所有从大圆点出去的边,其权重保持不变;对于所有指向大圆点的边,更新其权值。在这里采用W[e]表示边e的权重;用W[e]_New表示边e更新后的权重;W[e]_Old表示边e更新前的权重。
W[a1]_New = W[a1]_Old - W[a5] =9-7=2
W[a9]_New = W[a9]_Old - W[a4] =8-3=5
W[a13]_New = W[a13]_Old - W[a4] =4-3=1
边缘权重更新后的图如下图所示:

其次治理V4-V5-V6环:
第一步:缩环为点,如下图右侧的大圆点(缩环为点后a7,a8,a10边被取消,其余所有边保留)
第二步:对于所有从大圆点出去的边,其权重保持不变;对于所有指向大圆点的边,更新其权值。
W[a3]_New = W[a3]_Old - W[a8] =5-3=2
W[a6]_New = W[a6]_Old - W[a7] =9-4=5
W[a11]_New = W[a11]_Old - W[a10] =9-5=4
W[a15]_New = W[a15]_Old - W[a10] =8-5=3
边缘权重更新后的图如下图所示:

对于新到的图,按照Step1中的描述,重新寻找除V1以外,指向其他节点的最小边。其结果如下图所示:

指向V2V3节点的最小边为a13,指向V7节点的最小边为a14;指向V4V5V6节点的最小边为a3。原论文中证明,a3,a14,a13一定是以V1为根的最小树形图的边集的子集,现在对V2V3节点和V4V5V6节点做展开操作。我们回到原图中(权重全部恢复到原图的权重),并标记a3,a14,a13这三条边,如下图:

不难发现如果从根节点V1发出的信息想要顺畅的流到V4,则只能选择a7;同理,如果从V1出发的信息流想要顺畅的流到V6,则只能选择经V4到V6的a10。因此,a7,a10在边集内。同理如果从V1发出的信息想要流向V2,则只能选择经V3到V2方向的a5。此时所有的节点都有边相连。新从根节点V1,可以顺有向边的方向到任意节点,如下图:

上图即是以 V1 为根节点的最小树形图。

转载于:https://www.cnblogs.com/hdu-zsk/p/8167687.html

相关文章:

【数据库】MySQL的C语言接口学习

0、【初始化】 MYSQL* mysql_init(MYSQL *mysql); 1、【设置连接选项】 int mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg); 2、【连接】 MYSQL* mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, cons…

程序员单身比例有多高?【2019开发者图鉴】告诉你

编辑 | Jane 出品 | AI科技大本营 本次调查共 8 个问题,根据这些数字我们整理了《2019开发者图鉴》,下面营长将发现的一些有意思的数字分享给大家: 性别与年龄 本次参与调查的男女比例约为 8:2(男8女2)。 …

26.2. Web UI

http://localhost:3000/ 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

VC++ 6.0的小花招

Visual Studio系列中产品中,Visual Studio 6.0是最经典的一个版本,虽然后来有Visual Studio .NET 2003,以及2005,也确实添加了很多让我觉得激动的特性,但是从使用细节的细腻程度上来看,VS 6.0无疑是最棒的。…

【linux】嵌入式中 crontab的使用

0、编辑 执行:crontab -e 执行命令后,将出现一个编辑界面,内容格式如下 Minute Hour Day Month Dayofweek command 分钟 小时 天 月 天每星期 命令 每个字段代表的含义如下: Minute 每个小时的第几分钟执行该任务 Hour 每天的第几…

程序员该怎么做,才能成为coding王者?

每当做编程题目时,大多数人都会靠基本的直觉,遵循一些固定的步骤来有效地解题。不管是有意还是无意,在做编程题目的时你会下意识地遵循一些步骤,在阅读完这篇文章后你就可以将这些步骤和这篇文章联系起来,从而就可以更…

27.3. source code

tar zxvf bandwidthd-2.0.1.tgz cd bandwidthd-2.0.1 ./configure --prefix/srv/bandwidthd-2.0.1 make make install 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

WF4.0实战(一):文件审批流程

http://www.cnblogs.com/zhuqil/archive/2010/04/13/DocumentApprovalProcess.html转载于:https://www.cnblogs.com/Little-Li/archive/2010/06/01/1749392.html

AI科技大本营在线公开课大放送(附演讲PPT)

新年新思!新一年,每个人的梦想都闪耀着多彩光芒,对于AI领域的每一位学习者和从业者,我们充满渴望,怀揣梦想,心系对技术的不懈追求。AI科技大本营同样也有自己的新年梦想和脚踏实地的规划,比如今…

《微信跳一跳》安卓手机刷分软件搭建及攻略

2019独角兽企业重金招聘Python工程师标准>>> 元旦期间被微信小程序的游戏刷屏幕了。手笨脚笨的我也尝试了下这新出的小玩意,实在话手脚不协调最高仅仅90分,处于做技术的角度,直觉上可以技术上模拟解决,凑好朋友在微信群…

【libevent】libevent库学习总结(一)——基础

libevent库学习总结(一)——基础 一、基础 1.1、 介绍 Libevent是一个用于开发可伸缩网络服务器的事件通知库。Libevent API提供了一种机制来执行回调函数,当某个特定事件发生在文件描述符上或超时到达之后。此外,Libevent还支…

AS1.0(2.0)中的XML示例

虽然Flash早就升级为AS3.0&#xff0c;但是FMS的服务端编程依然仅支持AS1.0(2.0)&#xff0c;服务端与.net通讯的最简单方式莫过于请求一个RESTful的webService或wcf&#xff0c;通过它们返回的xml来获取数据。 var _xml:XML new XML("<ArrayOfstring xmlns\"htt…

【Qt】Qt发布可执行程序(打包依赖库)

Qt发布可执行程序&#xff08;打包依赖库&#xff09; 0、编译出可执行文件 如&#xff1a;xxx.exe 1、将xxx.exe拷贝到一个目录下面 2、启动Qt终端交互界面程序 如&#xff1a;Qt 5.6 for Desktop&#xff08;MinGW&#xff09; 3、进入xxx.exe所在的目录 4、执行命令…

小编说之“常见问题答疑”

2019独角兽企业重金招聘Python工程师标准>>> 关于前嗅Forespider爬虫的常见问题答疑 奋战在一线为客户答疑的狗蛋儿给小编提供了很多客户经常会问到的问题的素材&#xff0c;小编帮大家整理了一些&#xff0c;快来看看是不是都用的上吧&#xff01; 一、采集预览没有…

给AI开发者的新年礼物,技术公开课大放送(附演讲PPT)

各位AI科技大本营的伙伴大家好&#xff0c;营长携编辑组的全体成员给大家拜年了&#xff01; 新年新思&#xff01;新一年&#xff0c;每个人的梦想都闪耀着多彩光芒&#xff0c;对于AI领域的每一位学习者和从业者&#xff0c;我们充满渴望&#xff0c;怀揣梦想&#xff0c;心系…

通用权限管理组件使用说明书V3.0 错误校正 感谢自由软件职业者Helper(767870484)...

有时候&#xff0c;真想做个像样的东西出来&#xff0c;但是往往各方面的能力都不够&#xff0c;这么多人&#xff0c;Helper&#xff08;767870484&#xff09;仔细认真的阅读了这个帮助手册、并给给于了指正&#xff0c;在这里非常感谢&#xff0c;你的劳动成果已经被通用权限…

Reddit欲融资3亿美元,由腾讯领投

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;AI科技大本营消息&#xff0c;据 TechCrunch 报道&#xff0c;多个信源透露&#xff0c;美国社交网站 Reddit 将融资 1.5 亿到 3 亿美元&#xff0c;D 轮融资将由中国科技巨头腾讯公司领投&#xff0c;投前…

【libevent】libevent库学习总结(二)——编程步骤

一、libevent编程步骤 0、分配并初始化event_base&#xff0c;两种方法 0.1 event_base_new&#xff1a;线程安全&#xff0c;代替event_init&#xff1b; 0.2 event_init&#xff1a;线程不安全&#xff0c;不推荐使用&#xff0c;仅仅是为了向后兼容 1、创建event&#xf…

HP交换机配置命令

1.命名hostname 7-West-4F-2510 2.设置管理IPvlan 1ip address 192.168.41.123 255.255.255.03.修改支持的默认vlan数max-vlans 64max-vlans //修改vlan的数量&#xff0c;默认只有8个&#xff0c;修改后需重启后才可生效4.重启reload //重启交换机5.配置v…

【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed

【Qt】Qt程序编译成功&#xff0c;执行时报错&#xff1a;程序异常结束&#xff0c;crashed 错误打印信息 Starting E:*exe… 程序异常结束。 E:*.exe crashed. 原因 使用到外部库&#xff0c;编译时&#xff0c;指定了库连接&#xff0c;但是在程序运行时找不到库&#xf…

近900000条if-then关系图谱,让神经网络“懂”常识推理

编译整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“神经网络能学习日常事件的常识推理吗&#xff1f;能&#xff0c;如果在 ATOMIC 上训练的话。”ATOMIC&#xff08;原子&#xff09; 是一个机器常识图集&#xff0c;一个用自然语言建立的 870, 000 个…

weex 阶段总结

新年伊始&#xff0c;回顾过去的一年&#xff0c;收获很多&#xff0c;之前一直在研究weex&#xff0c;说心里话感觉心好累&#xff0c;官方文档不全&#xff0c;社区不活跃&#xff0c;遇到很多坑&#xff0c;官方发布的版本有时都有坑&#xff0c;搞得我都不敢更新版本了。 但…

DOS批处理高级教程精选(六)

为什么80%的码农都做不了架构师&#xff1f;>>> 第五章 set命令详解 很久没发贴了,今天来写点讲BAT的新手教学贴! 在上一贴中我简单的介绍了一下SET设置自定义变量的作用,现在我来具体讲一下set的其他功能. 一、用set命令设置自定义变量 显示、设置或删除 cmd.exe …

8.11. Migrating MySQL Data into Elasticsearch using logstash

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html 8.11.1. 安装 logstash 安装 JDBC 驱动 和 Logstash curl -s https://raw.githubusercontent.com/oscm/shell/master/database/mysql/5.7/mysql-connector-java.sh | bash curl -s https://ra…

佩奇扑街、外星人疯狂!Python 告诉你大年初二应该看哪部电影

作者 | 罗昭成责编 | 唐小引转载自 CSDN资讯&#xff08;ID&#xff1a;CSDNnews&#xff09;引言2019 年 1 月&#xff0c;《啥是佩奇》短片在互联网快速传播&#xff0c;各大社交平台形成刷屏之势。不到 24 小时&#xff0c;官博发出的视频已经收获 2800 万次观看&#xff0c…

【POCO】POCO学习总结(二)——配置选择

使用方法: configure {options} options总结 –help&#xff1a;打印帮助 –config< config_name> 使用给定配置&#xff0c;在poco-1.7.8p3-all/build/config目录下&#xff0c;可以在对应的配置文件中修改编译工具的路径和名字&#xff0c;编译时的选项等。 AIX Darw…

告别排队!用Python定时自动挂号和快捷查询化验报告

作者 | 阿文来源 | 程序人生&#xff08;ID: coder_life&#xff09;我什么要做这个事情去年单位体检查出问题来&#xff0c;经过穿刺手术确诊是个慢性肾脏病2期&#xff0c; IGA 肾病三期&#xff0c;可能大家对于这个病并不是很了解&#xff0c;但是另外一个词可能大家都听过…

【POCO】POCO学习总结(三)——交叉编译

最小功能编译 编译选项&#xff1a;–minimal &#xff1a;只构建XML, JSON, 工具 and 网络 1 修改配置文件 $ vi poco-1.7.8p3-all/build/config/ARM-Linux13 LINKMODE ? SHARED 14 TOOL ? arm-linux 15 POCO_TARGET_OSNAME Linux 16 POCO_TARGET_OSARCH ? armv7l 主要…

转:入侵网站必备-sql server

来源&#xff1a;http://www.bitscn.com/plus/view.php?aid28692 1.判断有无注入点 ; and 11 and 12 2.猜表一般的表的名称无非是admin adminuser user pass password 等.. and 0(select count(*) from *) and 0(select count(*) from admin) ---判断是否存在admin这张表 3.猜…

27.5. PROCEDURE ANALYSE()

数据列优化 SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]]) 原文出处&#xff1a;Netkiller 系列 手札 本文作者&#xff1a;陈景峯 转载请与作者联系&#xff0c;同时请务必标明文章原始出处和作者信息及本声明。