算法:图论基础

生活中的图

地图中的图

我们在用百度地图的时候,常常会使用导航功能。比如你在地铁站A附近,你想去的地点在地铁站F附近,那么导航就会告诉你一个最佳的地铁线路换乘方案。

在这里插入图片描述
这许许多多地铁站所组成的交通网络,也可以认为是数据结构中的图。

社交网络中的图

举个例子,比如微信。假设你的微信朋友圈中有若干好友:张三、李四、王五、赵六、七大姑、八大姨。

在这里插入图片描述
而你七大姑的微信号里,又有若干好友:你、八大姨、Jack、Rose。
在这里插入图片描述
微信中,这许许多多的用户就组成了一个多对多的朋友关系网,这个关系网就是数据结构中的(grahp)。

数据结构提供了 3 种存储结构,分别称为线性表、树和图

在这里插入图片描述

  • 线性表是最简单的存储结构,它是一对一的关系
  • 树的节点之间是一对多的关系,并且存在父与子的层级划分;
  • 而图的顶点之间是多对多的关系,并且所有的节点是平等的,无所谓谁是父谁是子。

在这里插入图片描述
树和图有很多相似之处,它们的区别是:树存储结构中不允许存在环路,而图存储结构中可以存在环路

定义

图(graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G ( V , E ) G(V, E) G(V,E),其中,G表示一个图,V是图G中顶点(vertex)的集合,E是图G中(Edge)的集合。

对于图的定义,我们需要明确几个注意的地方:

  • 线性表中我们把数据元素叫元素,树中叫结点,在图中数据元素我们则称之为顶点(Vertex)。
  • 线性表可以没有数据元素,称为空表,树中可以没有结点,叫做空树,但是,在图中不允许没有顶点,但是可以没有边
  • 关系:
    • 线性表中,相邻的数据元素之间具有线性关系
    • 树结构中,相邻两层的结点具有层次关系
    • 而图结构中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。

如下中,共有 V0,V1,V2,V3 这 4 个顶点,4 个顶点之间共有 5 条边。
在这里插入图片描述

顶点 && 边

在图中,最基本的单元是顶点(vertex),相当于树中的节点。图中的一个顶点可以和任意其他顶点建立连接关系,我们把这种建立的关系叫做(edge)。

在这里插入图片描述

无向边 VS 有向边

  • 无向边:
    • 顶点Vi与Vj之间的边没有方向,则称这条边为无向边(Edge),用无序偶 (Vi,Vj) 来表示。
    • (Vi,Vj) 与 (Vj,Vi) 意义相同,表示x和y之间有连接。
  • 有向边:
    • 若从顶点Vi与Vj之间的边有方向,则称这条边为有向边,也成为弧(Arc),用有序偶<Vi,Vj>来表示,Vi为弧尾,Vj为弧头。
    • <Vi,Vj><Vj,Vi>表示的意义是不同的,<Vi,Vj>表示从Vi连接到Vj,Vi称为尾,Vj称为头;<Vj,Vi>表示从Vj连接到Vi,Vj称为尾,Vi称为头

在这里插入图片描述

并且,图中习惯用 VR 表示图中所有顶点之间关系的集合。

下图无向图的集合 VR={(v1,v2),(v1,v4),(v1,v3),(v3,v4)}
在这里插入图片描述
下图有向图的集合 VR={<v1,v2>,<v1,v3>,<v3,v4>,<v4,v1>}
在这里插入图片描述

度、入度、出度

这是针对有向图的。

  • 顶点 V 的度是和 V 相关联的边的数目,记为TD(V)
  • 以顶点V为头的边的数目叫做入度(箭头指向 V的弧的数量),记为ID(V)
  • 以顶点V为尾的边的数目叫做出度(箭头远离 V的弧的数量),记为 OD(V)
  • 顶点的度 = 入度 + 出度。即 TD(V) = ID(V) + OD(V)。

下图中, V 0 V_0 V0 顶点的度为 3 ,入度为1,出度为2
在这里插入图片描述
以微信为例,我们可以把每个用户看作一个顶点。如果两个用户之间互加好友,那就在两者之间建立一条边。所以,整个微信的好友关系就可以用一张图来表示。其中,每个用户有多少好友,对应到图中,就叫做顶点的(degree),就是跟顶点相连接的边的条数

邻接

  • 邻接是两个顶点之间的一种关系。如果图包含(u,v),则称顶点 v 与顶点 u 邻接。在无向图中,这也暗示了顶点 u 也与顶点 v 邻接。换句话说,在无向图中邻接关系是对称的。

各种图

简单图

在图结构中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。
在这里插入图片描述

无向图 VS 有向图

  • 无向图定义:若图中任意两个顶点之间的边均是无向边,则称该图为无向图
  • 有向图定义:若图中任意两个顶点之间的边均是有向边,则称该图为有向图

在这里插入图片描述

应用:

  • 有向图中顶点之间的关联并不是完全对称的。还拿微信来举例,你的好友列表里有我,但我的好友列表里未必有你。这样一来,顶点之间的边就有了方向的区分,这种带有方向的图被称为有向图
    在这里插入图片描述
  • 相应的,在QQ当中,只要我把你从好友里删除,你在自己的好友列表里也就看不到我了。因此,QQ的好友关系可以认为是一个没有方向区分的图,这种图被称为无向图

完全图、无向完全图、有向完全图

  • 完全图:若图中各个顶点都与除自身外的其他顶点有关系,这样的无向图称为完全图

  • 无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图(含有n个顶点的无向完全图有(n×(n-1))/2条边

  • 有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条边,则称该图为有向完全图。(含有 n 个顶点的有向完全图有 n×(n-1) 条边)

在这里插入图片描述

稀疏图 VS 稠密图

这里的稀疏和稠密是模糊的概念,都是相对而言的,通常认为边或弧数小于n*logn(n是顶点的个数)的图称为稀疏图,反之称为稠密图。

在这里插入图片描述

带权图

有些图的边或弧带有与它相关的数字,这种与图的边或弧相关的数叫做权(Weight),带权的图通常称为网(Network)。
在这里插入图片描述

假设有两个图G1=(V1,E1)和G2=(V2,E2),如果V2⊆V1,E2⊆E1,则称G2为G1的子图(Subgraph)。
在这里插入图片描述

连通图 VS 非连通图

在无向图G中,如果从顶点v到订单v’有路径,则称v和v’是连通的。如果对于图中任意两个顶点 v i 、 v j ∈ E vi、vj ∈E vivjE, vi,和vj都是连通的,则称 G 是连通图,否则图为非连通图
在这里插入图片描述

下图中A、B、C、D是连通的,但是其中任一顶点与顶点E或者顶点F之间没有路径,因此是非联通图

在这里插入图片描述
若添加顶点B与顶点F之间的邻接边,则图变为连通图
在这里插入图片描述

路径&&回路

  • 路径:在图中,依次遍历顶点序列之间的边所形成的轨迹。

例如:下图中依次访问顶点 V0 、V3 和 V2 ,则构成一条路径。
在这里插入图片描述
如果路径中第一个顶点和最后一个顶点相同,则此路径称为"回路路"(或"环")。

如下图,从 V1 存在一条路径还可以回到 V1,此路径为 {V1,V3,V4,V1},这是一个回路(环),而且还是一个简单回路(简单环)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值