图是什么?地图?网络图?还是……

简介: 图是什么?地图?网络图?还是……

图的性质

image.png

如上所示,这就是一张校园秘籍简版地图,如果我们把各个节点换成数字,那么它就是数据结构中的图。

非线性表数据结构,树中的元素叫作节点,图中的元素叫作顶点

图中两个顶点之间的连接线叫作

跟顶点相连接的边的条数叫作顶点的

边上有方向的图叫作有向图,边上没有方向的图叫作无向图

有向图

度分为入度出度

顶点的入度,表示有多少条边指向这个顶点;顶点的出度表示有多少条边以这个顶点为起点指向其他顶点。比如小红书的单向关注,微信的单向好友机制。

image.png

带权图

类似QQ好友之间的亲密度,在表示好友的基础上,每条边加上一个权重(weight)。

image.png

存储方法

邻接矩阵存储方法

图的最直观的一种存储方法就是:邻接矩阵(Adjacency Matrix)

邻接矩阵的底层依赖是一个二维数组,在无向图中,如果顶点 i 与顶点 j 之间有边,我们就将A[i][j]A[j][i]标记为 1;在有向图中,如果有一条箭头从顶点 i 指向顶点 j 的边,那我们就将 A[i][j]标记为 1,如果没有箭头从顶点 j 指向顶点 i ,那么A[j][i]就标记为 0 ;在带权图中,存储的不再是 0 和 1 ,而是对应的权重。

邻接矩阵的存储方式比较简单和直接,基于数组实现,获取顶点的关系时,非常高效。计算起来也比较简单。

缺点就是浪费空间,如下所示,连通的顶点不多,存储是稀疏图(顶点很多,但是每个顶点的边并不多)时,这种存储方式就比较浪费空间。

image.png

邻接表存储方式

解决邻接矩阵比较浪费内存空间的问题——邻接表(Adjacency List)

邻接表有点像散列表,每个顶点对应一条链表,链表中存储的与这个顶点相连接的其他顶点。

这是一种空间与时间复杂度互换的设计思想,邻接矩阵浪费空间,使用比较方便,邻接表存储比较省空间,但是使用起来比较耗时。

在邻接表中确定两个顶点是否相连,需要遍历顶点对应的那条链表,链表的存储方式对缓存也不友好,可以利用解决散列表中链过长的方法,提高查找效率。把链表换成平衡二叉查找树,跳表等数据结构。

image.png

目录
相关文章
|
5月前
时标网络图绘制步骤
时标网络图绘制步骤
时标网络图绘制步骤
|
12月前
|
程序员 数据库 开发者
值得收藏!如何快速画出一幅漂亮的架构图
这篇文章总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合业务需要的架构图。
161809 95
|
5月前
|
定位技术 数据安全/隐私保护 iOS开发
一文讲清楚地图地理坐标系
一文讲清楚地图地理坐标系
219 0
|
12月前
|
人工智能 数据挖掘
这图怎么画| 气泡热图(基因表达泛癌分析)
这图怎么画| 气泡热图(基因表达泛癌分析)
132 0
|
5月前
|
数据可视化
实现绘制Sankey桑基图(河流图、分流图)流程数据可视化
实现绘制Sankey桑基图(河流图、分流图)流程数据可视化
|
5月前
|
存储 数据可视化 关系型数据库
绘制圆环图/雷达图/星形图/极坐标图/径向图POLAR CHART可视化分析汽车性能数据
绘制圆环图/雷达图/星形图/极坐标图/径向图POLAR CHART可视化分析汽车性能数据
|
12月前
|
人工智能 数据挖掘
这图怎么画 | 相关分析棒棒糖图
这图怎么画 | 相关分析棒棒糖图
104 0
|
5月前
R语言中绘制箱形图的替代品:蜂群图和小提琴图
R语言中绘制箱形图的替代品:蜂群图和小提琴图
|
12月前
|
存储 编解码 定位技术
案例!从天地图中提取全市的建筑物矢量轮廓-以苏州市为例
案例!从天地图中提取全市的建筑物矢量轮廓-以苏州市为例
206 1
|
12月前
|
存储 数据可视化 数据处理
ggalluvial | 冲击图/ 桑基图绘制
ggalluvial | 冲击图/ 桑基图绘制
185 0