【数据结构】初步认识--图(基本概念/属性/类型/一些应用)

目录

认识:图 

图的一些名词

图的类型

图的属性

顶点的度:

自环:

多重边:

简单图边数:

路径:

最短路径:

连接性:

闭回路:

环:

图的一些应用


P38-P39笔记

视频地址👇

http:www.bilibili.com/video/BV1Fv4y1f7T1?p=38&vd_source=02dfd57080e8f31bc9c4a323c13dd49c

认识:图 

这种表示层次数据的非线性结构之后,今天我们认识图——一种表示对象之间任意的关联关系的非线性结构。

可以说树是一种特殊的图。我们知道树是自上到下像树根一样发散的,除了根节点,每个节点都有一个父节点,并且从根节点到任意一个节点有且只有一条路径(在树里好像不经常提到这个特点),有n个节点的话,就会有n-1条边。

但是对于图来说,没有这么多限制,图由一组点集和一组边集构成,边可以任意的连接节点,从一个节点到另一个节点可能有多条路径,也可能没有路径,点和边的数量没有固定的关系。

以上,图可以被定义为:一个图G由顶点集V(G)和边集E(G)组成,记 G = (V ,E)。

就像这样👇

图的一些名词

有序对:当G = (V ,E),第一个对象表示的是点集,第二个对象表示边集,这样就叫有序对,用小括号表示。 (a,b)和(b,a)是不同的。反之为无序对,即{a,b}和{b,a}表示的结果是一样的,我们用花括号表示。

边的分类:1.有向边:两个点之间的链接是单向的。就像之前学的树,其链接就是单向的边。2.无向边:两点之间的链接是双向的

左图为有向边,其可以表示为一个有序对,就像从一个起点到一个终点,从u到v和从v到u是不同的;右边为无向边,可用无序对表示。

一个图中所有的边要么都是有向的,要么都无向,我们暂时不讨论两者混合的图。

我们使用 |E| |V|来表示边/顶点的数量。

图的类型

有向图/无向图:一个图中所有的边都为有向边时,该图为有向图,反之即为无向图。

加权图: 有时候,在一个图中不同的边所具有的权重不同,不能同等看待。我们可以把所有图都看作加权图,非加权图就相当于每条边权重一样的图嘛。

简单图:一个不包含自环和多重边的图。

完全图:边数达到最大的图。类比完全二叉树。

连通图:图中任意两个节点都是连通的。从一个点一定可以到达图中的其他任意一点。

无环图:一个没有循环(回路)的图。树就是一个例子。

带权连通图一般称为网

图的属性

顶点的度:

无向图中,顶点的度就是与该顶点相关联的边的数目

有向图中,顶点的度分为入度和出度。补充:有向图中的边可称为弧,初始点称为弧尾,终端点称为弧头。

入度是:以该顶点为弧头的弧的数目。

出度是:以该顶点为弧尾的弧的数目。

自环:

一个节点与自己进行链接,边所连接的两个顶点是一个点。同一个节点既是起点也是终点。应用:比如:刷新功能(感觉一下清晰了hh)

多重边:

两个节点之间有重复的边。

应用:比如: 各种交通工具从一个起始地到目的地的班次,一天会有好几班这样,不同班次有不同的名称也会有不同的耗费等等。

简单图边数:

边集可以为空,几个单独的节点也是图,所以最小边数是0;当该图为有向图,每两个节点之间可以互相链接,如下图

如果有四个顶点,每个顶点可以与其他三个顶点都进行链接,且不担心重复,因为有向。所以如果该图是有向图,那么其最大边数应该是顶点数n*(n-1) 。如果是无向图,每两个点之间的两条链接都被简化为一条无向边。因此如果是无向图,其最大边数应该是顶点数n*(n-1)/2 

我们可以看到在图中,边的数量远远大于顶点数量,最大基本要达到其顶点数的平方了,这种图我们称为稠密的,如果其边数接近顶点数,那么称之为稀疏的

根据图的稀疏还是稠密,我们可能会采用不同的存储方式,稀疏采用邻接表存储,稠密使用邻接矩阵存储。这些之后再说。

路径:

图中一个顶点的序列,且序列中两个相邻节点通过一条边进行链接。在有向图中,路径中所有的边必须和路径方向保持一致。

最短路径:

如果序列中没有一个顶点是重复的,顶点不重复也说明边是没有重复的,那么该路径就称其为最短路径。

我们经常称简单路径直接为路径path,默认其没有重复的边和顶点。而用途径来表示非最短路径。trail用来表示顶点可以重复边不能重复的路径

连接性:

有向图为强连接,无向图为连接。如果一个有向图各个顶点不互通,但是如果将其变为无向图其各个顶点又相连,那么称其为弱连接的。

闭回路:

一个途径的起点和终点为同一个点,途径长度大于0,也就是走成一个闭环,这个闭环就叫闭回路。

环:

是指简单的闭回路,即没有重复的边和顶点

环涉及到从一个顶点到另一个顶点的最短路径设计问题

图的一些应用

图可以用来表示具有某种组合对关系的对象的集合。

例1:社交关系网

一个节点代表一个用户, 如果两个用户是朋友就会有边将他们链接起来。社交关系网是一个无向图,因为我们互相为对方的朋友,链接应该是双向的。

我们如果想给我介绍一些朋友,一种方式是可以把我的朋友的未和我进行链接的朋友介绍给我(感觉有点像热传递hh)。下图以Rama为例。

这个问题在图的术语中, 是如何找到从Rama开始的最短路径长度为2的所有节点。这是个标准的图的问题。

例2:相互链接的网页

这个应用就比较多了,小到在这篇文章中我所引用放置的链接,ppt里的超链接,大到我们该网站上点击不同的模块会跳转不同的内容一样等等都是。 我们从一个网页到另一个网页,在另一个网页上不一定会有回到原网页的链接,我们该ppt跳转到其他ppt,未必有返回的链接,因此这属于有向图

网络爬虫是一种标准的图论算法,也就是图的遍历:访问一个图中的所有节点。(突然蹦出来个好像很高深的技术哈哈哈)

例3:城际道路网络

城际道路我想象成高速公路,基本都是双向的,即无向图。 如果要从一个节点到达另一个节点,我们不仅要考虑边的数量,同时也要计算每边权重之和来确定总的成本,才能确定最短路径是哪条。在一个有权图中,从一个节点到另一个节点的最短路径通常是指权重之和最小的路径

在城内道路,可能是有单向的,是可以被建模成有向图的。视情况而定


好啦,先写到这。

如果有哪里出现错误的说法欢迎指出,非常感谢。

也欢迎交流建议奥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值