《图的基础概念》

news2024/9/23 5:27:32

【一】图的基本概念

图是由顶点集合和顶点之间的关系组成的一部分:G=(V,E),其中:

 

顶点集合V = {x|x属于某个数据对象集}是有穷非空集合;

E = {(x,y)|x,y 属于 V} 或者 E = {<x, y>|x,y 属于 V && Path(x, y)} 是顶点间关系的有穷集合,也叫做边的集
(x, y) 表示 x y 的一条双向通路,即 (x, y) 是无方向的; Path<x, y> 表示从 x y 的一条单向通路,即 Path<x, y>
是有方向的。
顶点和边: 图中结点称为顶点 ,第 i 个顶点记作 vi 两个顶点 vi vj 相关联称作顶点 vi 和顶点 vj 之间有一条边
图中的第 k 条边记作 ek ek = (vi vj) <vi vj>
有向图和无向图: 在有向图中,顶点对 <x, y> 是有序的,顶点对 <x y> 称为顶点 x 到顶点 y 的一条边 ( ) <x,
y> <y, x> 是两条不同的边 ,比如下图 G3 G4 为有向图。在 无向图中,顶点对 (x, y) 是无序的,顶点对 (x,y)
称为顶点 x 和顶点 y 相关联的一条边,这条边没有特定方向, (x, y) (y x) 是同一条边 ,比如下图 G1 G2
无向图。注意: 无向边 (x, y) 等于有向边 <x, y> <y, x>
完全图:在 n 个顶点的无向图中 ,若 n * (n-1)/2 条边 ,即 任意两个顶点之间有且仅有一条边 ,则称此图为
无向完全图 ,比如上图 G1 ;在 n 个顶点的有向图 中,若 n * (n-1) 条边 ,即 任意两个顶点之间有且仅有方向
相反的边 ,则称此图为 有向完全图 ,比如上图 G4
出度之和 ,其中顶点 v 入度是以 v 为终点的有向边的条数 ,记作 indev(v); 顶点 v 出度是以 v 为起始点的有向
边的条数 ,记作 outdev(v) 。因此: dev(v) = indev(v) + outdev(v) 。注意:对于 无向图,顶点的度等于该顶
点的入度和出度 ,即 dev(v) = indev(v) = outdev(v)
路径:在图 G = (V E) 中,若 从顶点 vi 出发有一组边使其可到达顶点 vj ,则称顶点 vi 到顶点 vj 的顶点序列为从
顶点 vi 到顶点 vj 的路径
路径长度:对于 不带权的图,一条路径的路径长度是指该路径上的边的条数 ;对于 带权的图,一条路径的路
径长度是指该路径上各个边权值的总和
tips:有向完全图只是单纯的在无相完全图上面的每一条边上加上一个相反的边而已,所以求解的时候乘以2或者除以2即可。
联通图:在无向图中,若从顶点v1到顶点v2有路径,则顶点v1和顶点v2是联通的,如果图中任意一对顶点都是联通的,则这个图就是连通图。
强连通图:在有向图中任何一对顶点都是互相联通的,那么称此图为强联通图。
生成树:一个连通图的最小连通子图称为该图的生成子树,有n个顶点的连通图的生成树有n个顶点和n-1条边。
【二】图的存储结构
因为图中既有节点,又有边(节点与节点之间的关系),因此,在图的存储中,只需要保存:节点和边的关系即可。节点保存比较简单,只需要一段连续的空间即可,那边关系怎么保存呢?那就涉及到一个叫临接矩阵的概念了。
邻接矩阵:因为节点和节点之间的关系就是联通与否,即为0或者1,因此邻接矩阵(二维数组)即是:先用一个数组将定点保存,然后采用矩阵表示节点和节点之间的关系。

 1.无向图的邻接举证是对称的,第i行(列)元素之和就是顶点的度,有向图的临接矩阵则不一定是对称的,第i行(列)元素之后就是顶点的i的出(入)度。

2.如果边带有权值,并且两个节点之间是联通的,上图中的边的关系就使用权值代替,如果两个顶点不通,就使用无穷大代替。

 使用邻接矩阵存储图的优点就是能过去快速的知道这两个顶点是否连通,缺陷是如果顶点比较多,边比较少时,矩阵中存储了大量的0成为系数矩阵,比较浪费空间,并且要求两个节点之间的路径不是很好求。

邻接表:使用数组表示顶点的集合,使用链表表示边的关系

1.无相图邻接表存储

 注意:无向图中,同一条边在邻接表中出现了两次,如果想知道顶点vi的度,只需要知道顶点vi边链表集合中节点的数目即可。

有向图的邻接表存储:

 注意:有向图中每条边在邻接表中只出现一次,与顶点vi对应的邻接表所含节点的个数,就是该节点的出度,但是如果你想要找到节点的入度,你必须去检查所有顶点对应的边链表,看看有多少顶点的目的值是i。

【三】图的遍历:

给定一个图G和任意一个顶点v0,从v0出发,沿着图中各边访问图中的所有顶点,且每个顶点仅被遍历一遍,遍历就是对个个顶点进行操作的意思。

广度和深度优先遍历:

广度优先遍历:

比如现在要找东西,假设有三个抽屉,东西在哪个抽屉我们是不清楚的。

广度优先遍历的做法是: 打开蓝色盒子之后看看有没有,没有的话再打开红色的盒子,依次类推,直到找到。

深度优先遍历的做法是:打开蓝色盒子之后不管有没有,直接打开红色盒子,也不管有没有,再打开绿色盒子。然后检查绿色盒子有没有,绿色盒子没有去看红色盒子,直到找到,以此类推。

 【四】最小生成树

连通图的每一颗生成树,都是原图一个极大无环子图,即:从中删除任何任何一条边,生成树就不在联通,反之,再其中引入任何一条新边,都会形成一条回路。

若连通图由n个顶点,则其生成树必含n个顶点和n-1条边,因此构造最小生成树准则有三条:

1.只能使用图中的边来构造最小生成树

2.只能使用n-1条边来链接图中的n个顶点

3.选用的n-1条边不能构成回路

a.krushal算法

任给一个有n个顶点的联通网络N={V,E};

首先构造一个由这n个顶点组成、不含任何边的图G={V,NULL},其中每个顶点自成一个连通分量,然后不断从E中取出权值最小的一条边(如果相同任取其一),若该边的两个顶点来自不同的联通分量,就将这个边加入到G中,如此重复,直到所有顶点都在同一个联通分量上。如此重复,直到所有顶点再同一个联通分量上。

核心:每次迭代时,选出一条具有最小权值,且两端点不在同一联通分量上的边,加入生成树。

以上就是这期的全部内容了,如果哪里有地方理解错了,还请位于评论区斧正,如果没有问题的话,还请一键三连,毕竟码字不易。

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

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

相关文章

ElasticSearch6.x版本的SpringBoot增删改查操作和ElasticSearch6.x版本的过滤查询

文章目录一、SpringBoot操作ElasticSearch前期准备工作二、SpringBoot增删改查ElasticSearch1.新增修改2.删除3.查询三、ElasticSearch中的过滤查询1.概念介绍2.过滤语法3.常见的过滤器类型① term filter② terms filter③ ranage filter④ exists filter⑤ ids filter一、Spr…

【阶段二】Python数据分析Pandas工具使用05篇:数据预处理:数据的规范化

本篇的思维导图: 数据预处理:数据的规范化 数据标准化(归一化)处理是数据挖掘的一项基础工作。不同评价指标往往具有不同的量纲,数值间的差别可能很大,不进行处理可能会影响数据分析的结果。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按…

LEETCODE 98. 验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1&#xff1a; 输入&a…

+ 数学与算法系列之牛顿、二分迭代法求解非线性方程

1. 前言 前文介绍了如何使用“高斯消元法”求解线性方程组。 本文秉承有始有终的态度&#xff0c;继续介绍“非线性方程”的求解算法。 本文将介绍 2 个非线性方程算法&#xff1a; 牛顿迭代法。二分迭代法。 牛顿迭代法&#xff08;Newtons method&#xff09;又称为牛顿…

C#,图像二值化(13)——基于双峰平均值的全局阈值算法与源程序

1、图像二值化概述 图像二值化是将彩色图像转换为黑白图像。大多数计算机视觉应用程序将图片转换为二进制表示。图像越是未经处理&#xff0c;计算机就越容易解释其基本特征。 二值化过程 在计算机存储器中&#xff0c;所有文件通常以灰度级的形式存储&#xff0c;灰度级具有…

Linux Free 命令

目录 Free命令有什么用 各项名词解释 服务器实际可用内存看哪个值 为什么free2是实际可用内存 结论 Free命令语法 Free命令有什么用 熟悉的都知道&#xff0c;这是用来Linux主机内存使用情况的。如下&#xff1a; 各项名词解释 可以把上图看为3部分&#xff0c;分别是 M…

介绍一个Python可视化神器,绘制出来的图表惊艳了所有的人!!

新年快乐&#xff0c;时间过得真的是很快&#xff0c;已经到了新的一年了&#xff0c;今天小编给大家来介绍一款十分好用的可视化模块&#xff0c;D3Blocks&#xff0c;不仅可以用来绘制可动态交互的图表&#xff0c;并且导出的图表可以是HTML格式&#xff0c;方便在浏览器上面…

【小程序】模板与配置

文章目录WXML 模板语法数据绑定事件绑定bindtap 的语法格式bindinput 的语法格式实现文本框和 data 之间的数据同步条件渲染wx:ifhidden列表渲染WXSS 模板样式rpx样式导入全局样式和局部样式全局配置windowtabBar页面配置网络数据请求配置 request 合法域名发起 GET 请求发起 P…

XMLHttpRequest的基本使用

1、什么XMLHttpRequest XMLHttpRequest&#xff08;简称 xhr&#xff09;是浏览器提供的 Javascript 对象&#xff0c;通过它&#xff0c;可以请求服务器上的数据资源。之前所学的 jQuery 中的 Ajax 函数&#xff0c;就是基于 xhr 对象封装出来的。 2、使用xhr发起GET请求 步骤…

Java --- spring6的Bean的作用域

目录 一、bean的作用域为单例 二、bean的作用域为多例 三、Bean作用域的Scope属性的其它值 四、Bean作用域的自定义Scope 一、bean的作用域为单例 public class SpringBean {public SpringBean() {System.out.println("构造方法被调用");} } spring配置文件 &…

Java中的Future详解

1. Future的应用场景 在并发编程中&#xff0c;我们经常用到非阻塞的模型&#xff0c;在之前的多线程的三种实现中&#xff0c;不管是继承thread类还是实现runnable接口&#xff0c;都无法保证获取到之前的执行结果。通过实现Callback接口&#xff0c;并用Future可以来接收多线…

python 生成csv中文出现乱码问题解决

最开始的核心代码如下: with open("/hardisk/exeport.csv", "w") as f: 核心代码 f.writelines("时间,事件描述,源ip,源端口,目的ip,目的端口,协议,告警等级,接口,告警次数,事件英文详述" "\r") for v in raw: f.write(str(v).re…

Python 二维码的读取与生成:使用链接生成二维码、读取二维码里的链接

Python 二维码的读取与生成演示① 使用链接生成二维码② 读取二维码里的链接[ 文章推荐 ] Python 绘制中国地图&#xff1a;使用 pyecharts 最新版本绘制中国地图实例详解&#xff0c;个性化地图定制及常用参数解析 ① 使用链接生成二维码 通过 pip install qrcode 安装 qrco…

C#语言实例源码系列-游戏-实现贪吃蛇

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

云原生技术在离线交付场景中的实践

作者介绍&#xff1a;郭逊&#xff0c;交付部总监&#xff0c;7年运维经验&#xff0c;云原生深度爱好者软件产品只有交付到用户手中才有价值&#xff0c;本人在面向政府等 ToG 场景的软件交付领域具有数年的工作经验&#xff0c;深知其中痛点。今天借助这篇文章&#xff0c;分…

启动报名:首届“星河杯”隐私计算大赛正式上线

当前&#xff0c;隐私计算技术发展迅速&#xff0c;行业应用稳步增长&#xff0c;逐渐成为实现数据安全流通的关键技术路径之一。然而&#xff0c;隐私计算发展过程中仍面临技术应用瓶颈、行业影响有限等挑战&#xff0c;亟需加快技术攻关、提升行业影响、深化产业应用。在此背…

PyFlink1.16.0 使用说明:建表及连接Mysql数据库

PyFlink1.16.0 使用说明&#xff1a;建表及连接Mysql数据库引言安装运行环境PyFlink创建作业环境一、创建一个 Table API 批处理表环境二、创建一个 Table API 流处理表环境三、创建一个 DataStream API 数据流处理环境PyFlink建表一、从Python List对象创建一个 Table二、创建…

理解Cookie 和 Session 的工作流程

又是一年初,首先祝大家新年快乐!!!Cookie什么是Cookie?由于HTTP是一种无状态的协议, 服务器单从网络连接上是无法知道用户身份的. 这时候服务器就需要给客户端发一个cooki, 用来确认用户的身份.简单的来说, cookie就是客户端保存用户信息的一种机制, 用来记录用户的一些信息.找…

基于JAVA的数据可视化分析平台,自由制作任何您想要的数据看板,支持接入SQL、CSV、Excel、HTTP接口、JSON等

数据可视化分析平台 自由制作任何您想要的数据看板 简介 DataGear是一款数据可视化分析平台&#xff0c;自由制作任何您想要的数据看板&#xff0c;支持接入SQL、CSV、Excel、HTTP接口、JSON等多种数据源。 完整代码下载地址&#xff1a;基于JAVA的数据可视化分析平台&…

Python模块与包(八)

python学习之旅(八) &#x1f44d;查看更多可以关注查看首页或点击下方专栏目录 一.模块 (1) 什么是模块 一个Python文件,以.py 结尾,能定义函数,类和变量,也能包含可执行的代码 作用&#xff1a;我们可以认为不同的模块就是不同工具包,每一个工具包中都有各种不同的工具(如函…