数据结构实验之图论九:最小生成树_初高中数学竞赛训练----图论初步2

例题中有2019年罗马尼亚大师赛第3试题

树:一个连通图,如果没有一个环,则叫树。

森林:若干个独立的树形成一个森林。

链:一个特殊的树是节点中,除去两个节点的度为1,其它均为2,叫做链。

二叉树:如果一个树只有一个节点的度为2,其它的节点的度要么为3,要么为1,那这样的树叫二叉树。

树,链,二叉树之所以重要是因为这些图可以灵活表达计算机内部基本数据结构。例如我们打开一个应用软件,按下一个功能键,会有菜单弹出或者窗口弹出,管理这些菜单与窗口最好的办法是将其组织成树结构。链是计算机内部维护一个动态数组的最佳结构,通过插入,删除节点,只需要修改边指针,而不需要真实移动数据。二叉树可以做分类,编译。能够灵活运用这些基本结构,并用程序语言表达出来,是程序员的基本功。那些年薪几十万,上百万的程序员对此都有相关的知识与运用经验,而习得这些经验与做数学习题差不多,也许更简单一点,就是要多编写程序,但题量会大一点,要求格式更严谨一点而已。

不论是树还是链,其顶点数如果是n的话,边数一定是n-1.

定理:n个顶点,n-1条边的图一定是树。

证明:用归纳法

n=1,命题成立

假设

n=k时命题也成立,我们看n=k+1的情况,考虑k+1个顶点,k+1条边这样的图中的一条最长路径,如果有一个端点a,如果d(d)>1,则必然有环,因为否则的话,可以添加一条边到这条最长路径中,使得新路径长度为增加1.删去节点a,设与a相邻的一个节点为b,同时删除边{a,b},就剩下k个节点,k-1条边的连通图了,按归纳假设这是棵树,故n=k+1时命题成立。

例题1.考虑平面的若干点,任意两点之间的直线段长度都不相同,如果将每个点与其距离最近的点连成一条直线段,求证:所画出的线段不会形成一个封闭的多边形。

证明:

首先将这些点当成一个图的顶点,按题设的办法将做了的直线段对应成图的一条边,形成图G,假设G中有环。

如下图

05322974bda932639d6e5839db9159a7.png

由于任意两点之间的直线距离最短,故这个环路上所有边对应的直线段长度均不相同,不妨设最长的线段长度为D,对应边为{a,b},设a1是与a相邻的顶点,a2是与b相邻的顶点,边{a,a1},{b,b2}对应的线段长度分别为D1,D2,则D>D1,D2.故从a出发做出的直线段不能为b,从b出发的直线段也不能为a。也就是说按题设根本做不出边{a,b}来。因此这个图中没有环路。

但即使没有环路,也可能有如下图这样两种方式形成闭合的图形。

c58e10f6262f8a6b4497dcdd733a6810.png

我们接下来证明,按题目要求做出的直线段是不能出现交叉现象的。

反证法

假设作出的线段,如下图出现了交叉

faba17bc16250be56dc454d992a54fe1.png

虚线连接a,d;d,b;b,c;c,a

1201a8da9473396924f36cbc01b50459.png

则按照题设直线段的做法有:

ab

4ab2ab+2dc

另一方面,设ab,cd相交于w点

则:

wa+cw>ac,wc+wb>cb,wb+wd>bd,wd+wc>ad

相加得

2ab+2cd>ab+bc+cd+da矛盾

这就证明本题。

割边:如果一个连通图中去掉一个边,就成为非连通的了,这条边叫连通图的一条割边。对于树来说,没条边都是割边。

生成树:若图G的的一个子图T包含所有的顶点,且为一棵树,则称T为图G的生成树。

在图G中而不在生成树T中的边,称为对应于树T的弦,所有弦的集合是树T的补,弦的数目就是图G的圈数,记作N(G),树枝的数目称为图的秩,记作及R(G)。如果G有n个结点m条边,则R(G)=n-1,N(G)=m-n+l。R(G)+ N(G)=m。

生成树的算法

去圈法:

如果连通图G无回路,根据的定义,则G本身就是一棵生成树。如果连通图G有回路,去掉回路的任一条边得到生

成子图G1,显然G1仍然是连通的,如果G1不含回路,则G1就是G的生成树,否则又可去掉回路的任一条边得到另一个生成子图,只要生成图还有回路,就去掉回路的一条边,由于图的有限性,最后一定得到不含回路的生成子图T,由于每次去掉回路的一条边,并不破坏图的连通性,所以T是G的生成树。这种办法可以产生图的生成树。

生长法:在G中任找一条边e1,然后找一条不与e1形成回路的边e2,再找一条不与边集合(e1,e2)形成回路的边e3,如此继续下去使找的边都不与已找到的边集合形成回路,直到过程不能进行下去为止,则所有找到的边集

合{e1,e2,e3,...,em}构成的图就是G的一棵生成树。

设T是图G的一棵生成树,由T的树枝和一条弦构成的回路称为对应于这条弦的基本回路,基本回路的集合,称为基本回路集。如左图是右图的一棵生成树则对应于

弦e1的基本回路是C(e1)={e1,e6,e7}

对应于弦e2的基本回路是C(e2)={e2,e7,e8}

对应于弦e4的基本回路是C(e4)={e4,e3,e8,e9}

对应于弦e5基本回路是C(e5)={e5 e6 e9}

树T的基本回路集是C={C(e1)C(e2)C(e3)C(e4)}

b7c452400f770dbed33ab9228efcb095.png

如果我们给图上的每个边赋权,那么就得到一个赋权的图。例如结点是城市,边的权表示两个城市间的距离,

从一个城市出发走遍各个城市,如何选择最优的旅行路线.又如城市间的通信网络问题,如何布线,使得总的线路长度最短,等等就是要找一棵生成树,且使得生成树的边权的和最小。这样的生成树叫最小生成树。

最小生成树的Kruskal算法:

设G是有n个结点,m条边(m≥n-1)的连通图.

1.将所有边按照权升序排序:e1, e2, e3,… ,em,T=Φ

2.i=1.。。。。。m做如下操作

如果T∪{ ei }有回路,则去掉ei,返回2

T=T∪{ ei };

如果i=n,T就是最小生成树,结束

否则i++,返回2.

例题2.连通图G中每条边赋予一个数,设c为最小值,如果G中存在一个具有s条边的基本回路,求证:这个图至少有s个不同的最小生成树。

证明:利用上面的kruskal算法,中间 的支撑树集合T,在选前s-1条边时,必然都是从这个基本回路中选出的边,从s个边中,每次选s-1条边,总计有s种不同的选法。而这s个s-1条边的集合各不相同,所以最终生成的最小生成树至少也有s个。

做为高中联赛题目,不说kruskal算法,直接求证本题,应该是不算太难的题。那就需要把kruskal算法的基本思想先说清楚,然后再填上上面的答案,才能得分。这是常见的高联出题方法。

一个连通图G的顶点数为n,边数为e,则生成树的边为n-1,故弦数为e-(n-1)=e-n+1,每个弦对应于一个基本回路。

所以有定理:顶点数+基本回路数=n-1+e-n+1=e。

线性电路基本分析方程

假设一个电路图,只有电池与电阻元件,总计为e个,电路图上的每个元件对应于图的一条边,直连不同元件的线路端点,收缩为成一个顶点,总计有n个顶点。下图表达简单的电路图变换成图论中的图。

e43797abc9cf92e938e1518ce8a72800.png

根据基尔霍夫定律,流入流出一个节点(顶点)的电流代数和为0,任意一个电路回路的电压代数和为0。注意到一个树中,每个节点连出的边不完全相同,可以形成n-1个独立的电流方程。每个基本回路都有一条弦是唯一的,可以形成e-n+1个独立的回路电压方程,用电阻乘以电流代表一个电阻元件的电压,只要这些电阻阻值确定,电池电压确定,就可得到e个独立的以流过每个元件电流为变量的一次方程组,这个方程组是有唯一解的。这就是电路分析的基本方法,也是图论理论的一个来源,而现今是现代集成电路CAD软件分析中,研究电路电气响应特性的核心方法。

树搜索算法

深度优先搜索算法(DFS)

深度优先搜索的基本思想是在搜索其它他顶点之前,尽可能深地渗透到树的深层中。这个想法可以描述如下:

f1054d97ce489496b440222dc7786eec.png

处理次序:a -> b --> d --> i -> j -> k -> e -> c -> f -> i -> g -> h

宽度优先搜索算法(BFS)

宽度优先搜索的基本思想是在深入到树中之前,尽可能多地处理上层顶点。这个想法可以描述如下:

4965e9eea3e226b12f9ae754b4c91c7e.png
f6f065d3acb867cc0676cfa2f93bd7b6.png
6e6171a732ef9644cef88875d9f785c1.png
393a44ffc5af2ae717fd16f62c34dfc5.png
7803ae47a47b7570421d8752f5e920e9.png
f198adc2740499b52942416ca1242040.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式

Spring Data JPA的运行原理:PersistenceContext(name"entityManagerFactory") private EntityManager em; Test public void test1(){ //org.springframework.data.jpa.repository.support.SimpleJpaRepositor yfba8bf //System.out.println(this.u…

467python教程_Magnus Lie Hetland的《Python基础教程(第3版)》自学笔记(持续更新中)...

转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注。Python基础教程.jpg快速上手:基础知识交互式解释器在Python交互式解释器的提示符>>>后面输入help()可以获取指南,在IDLE中,还可…

java 获取所有带指定注解的类名_SXT DAY023 反射和注解

1. 反射机制介绍_Class对象获取反射机制是 Java 的动态性之一 动态语言:在程序运行时,可以改变程序的结构或变量的 类型。反射机制的常见作用动态的加载类、动态的获取类的信息(属性,方法,构造 器) 动态构造对象 动态调用类和对象的任意方法、…

tomcat勾连mysql_tomcat9.0启动脚本startup.bat的分析

1、 Apache Tomcat的下载和安装从Apache官网https://tomcat.apache.org/可以下载各种版本的tomcat软件,下载的文件格式可以是zip/tar.gz/exe形式的。如下图所示,在64位windows中使用tomcat,我们可以下载"64-bit Windows.zip",直接解…

安卓能硬改的手机机型_【每日新闻】小米11部分镜头参数爆料;华为重新采购手机零部件 重启4G手机生产...

数据铸造影响力关注每日行业热点资讯,掌握业界动态趋势,以下是今天的精彩内容:1、小米11部分镜头参数爆料:超大底50MP主摄,长焦达12MP或48MP2、华为重新采购手机零部件 重启4G手机生产1、小米11部分镜头参数爆料&#…

kafka集群为什么需要三个节点_大白话带你认识 Kafka

前言应大部分的小伙伴的要求,在Yarn之前先来一个kafka的小插曲,轻松愉快。一、Kafka基础消息系统的作用应该大部份小伙伴都清楚,用机油装箱举个例子所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实…

mysql对日期的操作_MySql对日期的操作

1、计算俩个日期之间所差的天数select datediff(2018-09-18,2018-09-01)2、计算日期是这周的星期几select dayofweek(2018-09-18)1.因为外国一般都是把星期天认为是一周的开始,所以用这种方法一般都得减去一天才是这周的星期几select date_format(2018-09-17,"…

sql移动加权计算利润_计算机视觉中的半监督学习

作者:Amit Chaudhary编译:ronghuaiyang导读图解半监督的各种方法的关键思想。计算机视觉的半监督学习方法在过去几年得到了快速发展。目前最先进的方法是在结构和损失函数方面对之前的工作进行了简化,以及引入了通过混合不同方案的混合方法。…

.net 启动mysql数据库连接_[ASP.net教程]mysql数据库连接方式(.net)

[ASP.net教程]mysql数据库连接方式(.net)0 2014-07-17 18:01:001.通过ado.net连接(数据库连接串中为中文貌似无法使用)需要添加MySql.Data.dll(可通过安装mysql-connector-net-6.8.3.mis获得)引用MySql.Data.dll调用方式string connectionString “serverlocalhost;port3306;da…

overflowhidden把内容遮住了怎么办_图片有水印怎么办?不用PS,有这4招就够了!...

图片是我们在做 PPT 时经常会使用到的高频元素。往往会在搜索引擎中搜到很多带有水印的图片,怎么办呢?固然 PS 等软件去水印很给力,但是对于连 PPT 都还没有用得很熟悉的同学,让他们再去下载安装 Photoshop 软件,仅仅只…

mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())

一、Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计 ,并且每一组的每一行都可以返回一个统计。 分析函数和聚合函数的不同之处是什么…

传递给系统调用的数据区域太小怎么解决_一口气说出“分布式追踪系统”原理!...

“ 在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成。图片来自 Pexels这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用&#xf…

语义分割和实例分割_一文读懂语义分割与实例分割

以人工智能为导向的现代计算机视觉技术,在过去的十年中发生了巨大的变化。今天,它被广泛用于图像分类、人脸识别、物体检测、视频分析以及机器人及自动驾驶汽车中的图像处理等领域。图像分割技术是目前预测图像领域最热门的一项技术,原因在于…

游戏自审自查报告_开发的射箭小游戏上线了,分享一下我在开发过程中遇到的问题...

利用业余时间开发的微信小游戏-射箭救人质上线了,主要玩法就是操作弓箭射断绳子把人救下来就可以了。图片资源是我找一个朋友做的。开发过程不算太顺利。磕磕绊绊做了12关。希望大家支持下。谢谢。分享一下我在开发中遇到的问题和部分解决方案、希望对大家有所帮助。…

java 抛出异常的目的_Java实验八,异常

一.实验目的1. 掌握自定义异常类的编写;2. 掌握使用try-catch语句来处理异常。二.实验内容及要求车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品:1. 编写一个Exception的子类DangerException,该子类可以…

postmapping注解_Swagger常用注解

在使用swagger时候如果掌握一些注解的使用,则在开发过程中测试的时候可以事半功倍,尤其在与前端技术进行联调,前端技术在访问swagger中的每个api时,可以很清楚的知道每个url对应的请求类型、参数类型、参数是否非必输、参数个数等…

java map 多个值_java 一个函数EnumMap返回多个值

在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!!网上这个问题的解决方法:1、使用map返回值;这个方法问题是,你并不知道如何返回值的key是什么&#xff0c…

调用别的方法的返回值_Spring boot如何实现异步调用

Spring boot如何实现异步调用异步调用:一个可以无需等待被调用函数的返回值就让操作继续进行的方法举个例子异步调用就是你 喊 你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你 ,你就去做别的了。同步调用就是你 喊 你朋友吃饭 ,你朋…

照片识别出错_AI跨年龄人脸识别技术在跨年龄寻亲的应用简析

9月3日,央视财经《经济半小时》栏目播出了一段有关失踪儿童找回的视频新闻。在这则新闻中,跨年龄人脸识别技术是最为核心的功臣,深圳警方利用跨年龄人脸识别技术,根据一张3岁孩童的儿童照片找回了失踪了十几年的孩子,让…

分段线性判别法 java_线性判别分析(Linear Discriminant Analysis)(二)

4. 实例将3维空间上的球体样本点投影到二维上,W1相比W2能够获得更好的分离效果。PCA与LDA的降维对比:PCA选择样本点投影具有最大方差的方向,LDA选择分类性能最好的方向。LDA既然叫做线性判别分析,应该具有一定的预测功能&#xff…