第八周 周结(图论算法——最短路)

图:

图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E),其中 V 是非空有限集合, 代表顶点,E 是可以为空的有限集合,代表边。

若顶点 vi 和 vj 间的边没有方向,则称这条边为无向边,用无序偶对 (vi,vj) 表示;若顶点 vi 和 vj 间的边有方向,则称这条边为有向边(弧),用有序偶对 <vi,vj> 表示,其中 vi 称为弧头,vj 称为弧尾。

若图的任意两个顶点之间的边都是无向边,则称该图为无向图;若图的任意两个顶点之间的边都是有向边,则称该图为有向图。

【基本术语】
在一个图中,不存在顶点到其自身的边,且同一条边不重复出现,则称图为简单图
在一个无向图中,对于任意两个顶点 vi 和顶点 vj,若存在边 (vi,vj),则称顶点 vi 和顶点 vj 互为邻接点,同时称边 (vi,vj) 依附于顶点 vi 和顶点 vj
在一个有向图中,对于任意两个顶点 vi 和顶点 vj,若存在弧 <vi,vj>,则称顶点 vi 邻接到顶点 vj,顶点 vj 邻接自顶点 vi,同时称弧 <vi,vj> 依附于顶点 vi 和顶点 vj
在一个无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图,其有 n*(n-1)/2 条边
在一个有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图,其有 n*(n-1) 条边。
一个边数接近完全图的图称为稠密图,一个边数远远少于完全图的图称为稀疏图
在无向图中,依附于顶点 v 的边数称为顶点的度,记为 TD(v),在 n 个顶点 m 条边的无向图中,所有点的度的和为 2m
在有向图中,以顶点 v 为弧头的弧的数目称为顶点的入度,记为 ID(v),在 n 个顶点 m 条边的有向图中,所有点的入度和为 m
在有向图中,以顶点 v 为弧尾的弧的数目称为顶点的出度,记为 OD(v),在 n 个顶点 m 条边的有向图中,所有点的出度和为 m
对边赋予的有意义的数值量称为权(权值),边上带权的图,称为网(带权图),根据图是无向图或有向图,分为有向网图、无向网图
在无向图 G=(V,E) 中,对于一个满足 的顶点序列 ,称为从顶点 vp 到顶点 vq 之间的路径,若 G 是有向图,则 G 的路径是有方向的
在路径序列中,起点和终点相同的路径称为回路(环)
在路径序列中,顶点不重复出现的路径称为简单路径
在路径序列中,除起点终点外,其余顶点不重复出现的回路称为简单回路
对于一个非带权图,路径上边的个数称为路径长度,对于一个带权图,路径上各边权的和称为路径长度
对于图 G=(V,E) 和 G’=(V’,E’),若 ,则称 G’ 为 G 的子图,一个图可以有多个子图
在无向图中,如果从一个顶点 vi 到另一个顶点 vj(i≠j) 有路径,则称顶点 vi 和 vj 是连通的,如果图中任意两个顶点都是连通的,则称该图是连通图
非连通图的极大连通子图称为连通分量,其中,极大是指包括所有连通的顶点及这些顶点相关联的所有边
在有向图中,对图中任意一对顶点 vi 和 vj(i≠j),若从顶点 vi 到顶点 vj 和从顶点 vj 到顶点 vi 均有路径,则称该有向图是强连通图,非强连通图的极大强连通子图称为强连通分量
对于一个具有 n 个顶点的连通图 G ,包含 G 中全部顶点的一个极小连通子图称为生成树,其中,极小是指子图中只有一个入度为 0 的点且其他点的入度均为 1
在非连通图中,由每个连通分量都可以得到一棵生成树,这些连通分量的生成树就组成了一个非连通图的生成森林

原文链接:https://blog.csdn.net/u011815404/article/details/91625831

一、最短路问题
求图的最短路问题,本次训练中有三个最短路问题,最短路应该是图论里面最基础的一部分。

1.问题描述:
对一幅图G,我们对每一条边赋权w(e),成为一个赋权图。H是G的一个子图,则W(H) = sigma(w(e)),也就是对每条边的权求和。寻找从一个点a到另一个b的一个子图,使得权和最小,即为最短路问题。

2.算法描述:
Dijkstra(迪杰斯特拉算法算法):
我表示看到后,是懵逼的,接下来详细分析下。

算法图解:
其实就是不断求一个点集合中的每个点,和与他相邻点最短路的最小值。我们还是从实例出发,更容易讲解。我会把上述步骤,拆解为多步。我们求下面这个图从A到L的最短路。

第一步:
令a1 = A(便于标记),t(a1) = 0(表示点a1到a的最短路),S={a1}(被选择的点的集合),T = 0(空集 表示被选择的最短路的边集)。
在这里插入图片描述
第二步:
求与S中的点a1与他相邻的点的距离d,取点a2 = C使得距离最小。令S={a1,a2},T={AC}。
在这里插入图片描述
第三步:
重复第二步,求S中的点a1,a2的相邻点中(去除已选择点),距离最小的那个,则为AB,CE。再取AB,CE中权和最小的一个,B,所以a3=B,令S={a1,a2,a3},T={AC,AB}。

持续下去,不断寻找,S集合中的每个点与他相邻点的最小距离,然后再这些最小距离中找到最小的那个加入到S中,同时加入相应的边。
在这里插入图片描述

直到到达终点L为止。最后得到的最短路为:
在这里插入图片描述
详解链接:https://blog.csdn.net/linxid/article/details/80268974

本周总结:

关于图,看过很多博客,知识点呢就是前面所借鉴的。记得之前做cf的愚人节比赛题目,当时有个表情,好像是微笑的吧,当时没学过这个图的概念,现在学下来感觉那个题应该用图论算法去做,之前有问过别人那道题怎么解答,是说转化为像素点,不过要用python做,还没开始自学,找了b站资料,讲的挺枯燥,没咋听懂,再找找别的资料多看看,多学学吧,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值