图与网络01—基本理论与MATLAB工具箱

本文介绍了图与网络的基本概念,包括无向图、有向图、简单图、完全图和赋权图,以及顶点度、子图和连通性。此外,讲解了图的矩阵表示,如关联矩阵和邻接矩阵,并概述了MATLAB中生成图的工具箱用法,例如无向图和有向图的创建以及数据存储结构。
摘要由CSDN通过智能技术生成

图与网络01—基本理论与MATLAB工具箱

简单的规划问题先告一段落了,这里我们将开展图论内容的学习,一点一点慢慢来,还是从两个方面入手:数学+代码,如果有错误和需要改进的地方,还请多多指教!


前言

咕~


一、图与网络的基础理论

第一部分基本概念都比较简单易懂,所以把定义过一下完事儿~ 第二部分是图的矩阵表示,这个也是基础,大概介绍一下“关联矩阵”、“邻接矩阵”就完事儿~

1.1 图与网络的基本概念

1. 无向图和有向图

【定义1.1】 一个无向图 G G G是由非空顶点集 V V V和边集 E E E按一定的对应关系构成的连接结构,记为 G = ( V , E ) G=(V,E) G=(V,E) 。其中非空集合 V = V= V= { v 1 , v 2 , . . . , v n v_{1},v_{2},...,v_{n} v1,v2,...,vn}为 G G G的顶点集, V V V中的元素称为 G G G的顶点,其元素的个数为顶点数;集合 E = E= E= { e 1 , e 2 , . . . , e n e_{1},e_{2},...,e_{n} e1,e2,...,en}为 G G G的边集, E E E中的元素称为 G G G的边,其元素的个数为图 G G G的边数。

以下用 ∣ V ∣ |V| V表示图 G = ( V , E ) G=(V,E) G=(V,E)中顶点的个数, ∣ E ∣ |E| E表示边的条数。

G G G的每一条边是由连接 G G G中两个顶点而得的一条线(可以是直线或曲线),因此与 G G G的顶点对相对应,通常记作 e k = ( v i , v j ) e_{k}=(v_{i},v_{j}) ek=(vi,vj),其中,顶点 v i , v j v_{i},v_{j} vi,vj称为边 e k e_{k} ek的两个端点,有时也说边 e k e_{k} ek与顶点 v i , v j v_{i},v_{j} vi,vj* 关联

对于无向图来说,对应一条边的顶点对表示是无序的,即 v i , v j v_{i},v_{j} vi,vj v j , v i v_{j},v_{i} vj,vi表示的是同一条边 e k e_{k} ek
有公共端点的两条边,或称邻边。同样,同一条边 e k e_{k} ek的两个端点 v i 和 v j v_{i}和v_{j} vivj称为是 相邻的顶点

带有方向的边称为 有向边,又称为

【定义1.2】 有向图通常记为 D = ( V , A ) D=(V,A) D=(V,A) ,其中非空集合 V = V= V= { v 1 , v 2 , . . . , v n v_{1},v_{2},...,v_{n} v1,v2,...,vn}为 D D D的顶点集, A = A= A= { a 1 , a 2 , . . . , a n a_{1},a_{2},...,a_{n} a1,a2,...,an}为 D D D的弧集合,每一条弧与一个有序的顶点对相对应,弧 a k = ( v i , v j ) a_{k}=(v_{i},v_{j}) ak=(vi,vj)表示弧的方向自顶点 v i v_{i} vi指向 v j v_{j} vj , v_{i}称为弧 a k a_{k} ak的始端, v j v_{j} vj称为弧 a k a_{k} ak的末端或终端,其中 a k a_{k} ak称为 v i v_{i} vi的出弧,称为 v j v_{j} vj的入弧。

与无向图不同,在有向图情形下, ( v i , v j ) (v_{i},v_{j}) (vi,vj) ( v j , v i ) (v_{j},v_{i}) (vj,vi)表示不同的弧。

把有向图 D = ( V , A ) D=(V,A) D=(V,A)中所有弧的方向都去掉,得到的边集用 E E E表示,就得到与有向图 D D D对应的无向图 G = ( V , E ) G=(V,E) G=(V,E) ,称 G G G为有向图 D D D基本图,称 D D D G G G定向图

2. 简单图、完全图、赋权图

【定义1.3】 如果一条边的两个端点是同一个顶点,则称这条边为。如果有两条边或多条边的端点是同一对顶点,则称这些边为重边平行边。称不与任何边相关联的顶点为孤立点

【定义1.4】 无环且无重边的图称为简单图。如果不特别申明,一般的图均指简单图

【定义1.5】 任意两顶点均相邻的简单图称为完全图。含 n n n个顶点的完全图记为 K n K_{n} Kn

【定义1.6】 如果图 G G G的每条边 e e e都附有一个实数 w ( e ) w(e) w(e) ,则称图 G G G赋权图,实数 w ( e ) w(e) w(e)称为边 e e e的权。

赋权图也称为网络。赋权图中的权可以是距离、费用、时间、效益、成本等。赋权图 G G G一般记作 G = ( V , E , W ) G=(V,E,W) G=(V,E,W),其中 W W W为权重的邻接矩阵。赋权图也可以记作 N = ( V , E , W ) N=(V,E,W) N=(V,E,W)

如果有向图 D D D的每条弧都被赋予了权,则称 D D D有向赋权图。以后对于无向图、有向图或网络都可以用 G G G表示,从下文中就能够区分出无向的还是有向的,赋权的还是非赋权的。

3. 顶点的度

【定义1.7】
(1)在无向图中,与顶点 v v v关联的边的数目(环算两次)称为 v v v,记为 d ( v ) d(v) d(v)
(2)在有向图中,从顶点 v v v引出的弧的数目称为 v v v出度,记为 d + ( v ) d^{+}(v) d+(v),从顶点 v v v引入的弧的数目称为 v v v入度,记为 d − ( v ) d^{-}(v) d(v), 称为 v v v的度。
度为奇数的顶点称为奇顶点,度为偶数的顶点称为偶顶点

【定理1.1】 给定图 G = ( V , E ) G=(V,E) G=(V,E) ,所有顶点的度数之和是边数的2倍,即
∑ v ∈ V d ( v ) = 2 ∣ E ∣ . \sum_{v\in V}^{}{d(v)}=2|E|. vVd(v)=2E.

【推论1.1】 任何图中奇顶点的总数必为偶数。

4. 子图与图的连通性

【定义1.8】 G 1 = ( V 1 , E 1 ) G_{1}=(V_{1},E_{1}) G1=(V1,E1) G 2 = ( V 2 , E 2 ) G_{2}=(V_{2},E_{2}) G2=(V2,E2)是两个图,并且满足 V 1 ⊂ V 2 V_{1}\subset V_{2} V1V2 E 1 ⊂ E 2 E_{1}\subset E_{2} E1E2 ,则称 G 1 G_{1} G1 G 2 G_{2} G2 的子图, G 2 G_{2} G2称为 G 1 G_{1} G1的母图。如 G 1 G_{1} G1 G 2 G_{2} G2的子图,且 V 1 = V 2 V_{1}=V_{2} V1=V2 ,则称 G 1 G_{1} G1 G 2 G_{2} G2生成子图支撑子图)。

【定义1.9】 W = v 0 e 1 v 1 e 2 ⋯ e k v k W=v_0 e_1 v_1 e_2⋯e_k v_k W=v0e1v1e2ekvk,其中 e i ∈ E ( i = 1 , 2 , ⋯ , k ) e_i∈E(i=1,2,⋯,k) eiE(i=1,2,,k) v j ∈ V ( j = 0 , 1 , ⋯ , k ) v_j∈V(j=0,1,⋯,k) vjV(j=0,1,,k) e i e_i ei v i − 1 v_{i-1} vi1 v i v_i vi关联,称 W W W是图 G G G的一条道路(walk),简称 k k k为路长, v 0 v_0 v0为起点, v k v_k vk为终点;
各边相异的道路称为(trail);
各顶点相异的道路称为轨道(path),记为 P ( v 0 , v k ) P(v_0,v_k) P(v0,vk)
起点和终点重合的道路称为回路
起点和终点重合的轨道称为,即对轨道 P ( v 0 , v k ) P(v_0,v_k) P(v0,vk),当 v 0 = v k v_0=v_k v0=vk时成为一个
称以两顶点 u , v u,v u,v分别为起点和终点的最短轨道之长为顶点 u , v u,v u,v距离

【定义1.10】 在无向图 G G G中,如果从顶点 u u u到顶点 v v v存在道路,则称顶点 u u u v v v是连通的。如果图 G G G中的任意两个顶点 u u u v v v都是连通的,则称图 G G G连通图,否则称为非连通图。非连通图中的连通子图,称为连通分支

在有向图 D D D中,如果对于任意两个顶点 u u u v v v,从 u u u v v v和从 v v v u u u都存在道路,则称图 D D D强连通图

1.2 图的矩阵表示

设图的顶点个数为 n n n ,边(或弧)的条数为 m m m
对于无向图 G = ( V , E ) G=(V,E) G=(V,E) ,其中 V = v 1 , v 2 , ⋯ , v n V={v_1,v_2,⋯,v_n} V=v1,v2,,vn E = e 1 , e 2 , ⋯ , e m E={e_1,e_2,⋯,e_m} E=e1,e2,,em
对于有向图 D = ( V , A ) D=(V,A) D=(V,A),其中 V = v 1 , v 2 , ⋯ , v n V={v_1,v_2,⋯,v_n} V=v1,v2,,vn A = a 1 , a 2 , ⋯ , a m A={a_1,a_2,⋯,a_m} A=a1,a2,,am

1. 关联矩阵

对于无向图 G G G,其关联矩阵 M = ( m i j ) n × m M=(m_{ij})_{n×m} M=(mij)n×m,其中

m i j = { 1 , 顶 点 v i 与 边 e j 关 联 0 , 顶 点 v i 与 边 e j 不 关 联 m_{ij} = \begin{cases} 1, &顶点v_i 与边e_j 关联 \\ 0, &顶点v_i 与边e_j 不关联 \\ \end{cases} mij={1,0,viejviej
i = 1 , 2 , ⋯ , n i=1,2,⋯,n i=1,2,,n, j = 1 , 2 , ⋯ , m j=1,2,⋯,m j=1,2,,m.

有向图 G G G,其关联矩阵 M = ( m i j ) n × m M=(m_{ij})_{n×m} M=(mij)n×m,其中
m i j = { 1 , 顶 点 v i 是 弧 a j 的 始 端 − 1 , 顶 点 v i 是 弧 a j 的 末 端 0 , 顶 点 v i 与 弧 a j 不 关 联 m_{ij} = \begin{cases} 1, &顶点v_i 是弧a_j 的始端 \\ -1, &顶点v_i 是弧a_j 的末端 \\ 0, &顶点v_i 与弧a_j 不关联 \end{cases} mij=1,1,0,viajviajviaj
i , j = 1 , 2 , ⋯ , n i,j=1,2,⋯,n i,j=1,2,,n

2. 邻接矩阵

无向非赋权图 G G G,其关联矩阵 W = ( w i j ) n × m W=(w_{ij})_{n×m} W=(wij)n×m,其中
w i j = { 1 , 顶 点 v i 与 顶 点 v j 相 邻 0 , 顶 点 v i 与 顶 点 v j 不 相 邻 w_{ij} = \begin{cases} 1, &顶点v_i 与顶点v_j 相邻 \\ 0, &顶点v_i 与顶点v_j 不相邻 \\ \end{cases} wij={1,0,vivjvivj
i , j = 1 , 2 , ⋯ , n i,j=1,2,⋯,n i,j=1,2,,n

有向非赋权图 D D D,其邻接矩阵 W = ( w i j ) n × m W=(w_{ij})_{n×m} W=(wij)n×m,其中
w i j = { 1 , 弧 ( v i , v j ) ∈ A , 0 , i = j 或 顶 点 v i 到 v j 无 弧 , w_{ij} = \begin{cases} 1, &弧(v_i,v_j) \in A, \\ 0, &i=j或顶点v_i到v_j无弧, \\ \end{cases} wij={1,0,(vi,vj)Ai=jvivj
i , j = 1 , 2 , ⋯ , n i,j=1,2,⋯,n i,j=1,2,,n

无向赋权图 G G G,其邻接矩阵 W = ( w i j ) n × m W=(w_{ij})_{n×m} W=(wij)n×m,其中
w i j = { 顶 点 v i 与 v j 之 间 边 的 权 ( v i , v j ) ∈ E , 0 或 ∞ , v i 与 v j 无 边 , w_{ij} = \begin{cases} 顶点v_i与v_j之间边的权 &(v_i,v_j) \in E, \\ 0或∞, &v_i与v_j无边, \\ \end{cases} wij={vivj0,(vi,vj)Evivj
i , j = 1 , 2 , ⋯ , n i,j=1,2,⋯,n i,j=1,2,,n


二、MATLAB工具箱简介

1.图的生成

Graph:无向图(undirected Graph);
Digraph:有向图(directed Graph);
G = graph——创建空的无向图对象。
G = graph(A)——使用邻接矩阵A创建赋权无向图。
G = graph(A,nodes) ——使用邻接矩阵A和节点名称nodes创建赋权无向图。
G = graph(s,t) ——使用节点对组s,t创建无向图。
G = graph(s,t,weights) ——使用节点对组s,t和权重向量weights创建赋权无向图。
G = graph(s,t,weights,nodes)——使用字符向量元胞数组nodes指定节点名称。
G = graph(s,t,weights,num) ——使用数值标量num指定图中的节点数。
G = graph(A[,nodes],type)——仅使用A的上或下三角形阵构造赋权图,type可以是’upper’ 或 ‘lower’。

【例1】 画出一个60个顶点的3正则图(每个顶点的度都为3)
代码如下(示例):

clc,close all
G = graph(bucky);plot(G);

在这里插入图片描述

2.数据存储结构

MATLAB存储网络的相关数据时,使用了稀疏矩阵,这有利于在存储大规模稀疏网络时节省存储空间。

【例2】 画出【例1】的非赋权有向图并导出邻接矩阵和关联矩阵。

代码如下(示例):

clc,clear,close all
E=[1,2;1,3;2,3;3,2;3,5;4,2;4,6;5,2;5,4;6,5]
s=E(:,1);t=E(:,2);
nodes = cellstr(strcat('v',int2str([1:6]')))
G=digraph(s,t,[],nodes);
plot(G,'LineWidth',1.5,'Layout','circle','NodeFontSize',15)
W1 = adjacency(G) %导出邻接矩阵的稀疏矩阵
W2 = incidence(G) %导出关联矩阵的稀疏矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【例3】 导出图1.2所示赋权有向图的邻接矩阵和关联矩阵,并重新画图。

clc, clear, close all
E = [1, 3, 10; 1, 4, 60; 2, 3, 5; 2, 4, 20; 3, 4, 1];
G = graph(E(:,1), E(:,2), E(:,3));
W1 = adjacency(G,'weighted'), W2 = incidence(G)
plot(G,'Layout','force','EdgeLabel',G.Edges.Weight)

在这里插入图片描述


总结

这里主要是介绍一下图论最基础的概念以及简单的MATLAB图生成的工具箱的使用。内容不多,但是是后续模型建立以及求解的基础,好好理解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值