【恋上数据结构】图基础知识介绍
图
- 数据结构回顾
- 图(Graph)
- 有向图(Directed Graph)
- 出度、入度
- 无向图(Undirected Graph)
- 混合图(Mixed Graph)
- 简单图、多重图
- 无向完全图(Undirected Complete Graph)
- 有向完全图(Directed Complete Graph)
- 有权图(Weighted Graph)
- 连通图(Connected Graph)
- 连通分量(Connected Component)
- 强连通图(Strongly Connected Graph)
- 强连通分量(Strongly Connected Component)
- 图的实现方案
- 邻接矩阵(Adjacency Matrix)
- 邻接矩阵 – 有权图
- 邻接表(Adjacency List)
- 邻接表 – 有权图
数据结构回顾
回顾一下目前为止掌握的学过的数据结构。
线性结构:数组、链表、栈、队列、哈希表
树形结构:二叉树、B树、堆、Trie、哈夫曼树、并查集
图是不属于以上两类的数据结构。
图(Graph)
图由顶点(vertex)和边(edge)组成,通常表示为 G = (V, E)
- G 表示一个图,V 是顶点集,E 是边集
- 顶点集 V 有穷且非空
- 任意两个顶点之间都可以用边来表示它们之间的关系,边集 E 可以为空
以下都属于图。
图结构的应用极其广泛:
- 社交网络
- 地图导航
- 游戏开发
- …
有向图(Directed Graph)
有向图的边是有明确方向的:
有向无环图(Directed Acyclic Graph,简称 DAG)
- 如果一个有向图,从任意顶点出发无法经过若干条边回到该顶点,那么它就是一个有向无环图
出度、入度
出度、入度适用于有向图
出度(Out-degree)
- 一个顶点的出度为 x,是指有 x 条边以该顶点为起点
- 顶点 11 的出度是 3
入度(In-degree)
- 一个顶点的入度为 x,是指有 x 条边以该顶点为终点
- 顶点 11 的入度是 2
无向图(Undirected Graph)
无向图的边是无方向的
无向图可以通过有向图表示出来,但是有向图无法通过无向图来表示。
下面这个有向图就相当于上面的无向图。
混合图(Mixed Graph)
混合图的边可能是无向的,也可能是有向的。
简单图、多重图
平行边
- 在无向图中,关联一对顶点的无向边如果多于1条,则称这些边为平行边
- 在有向图中,关联一对顶点的有向边如果多于1条,并且它们的的方向相同,则称这些边为平行边
多重图(Multigraph)
- 有平行边或者有自环的图
简单图(Simple Graph)
- 既没有平行边也不没有自环的图
- 课程中讨论的基本都是简单图
无向完全图(Undirected Complete Graph)
无向完全图的任意两个顶点之间都存在边
- n 个顶点的无向完全图有 n(n − 1) / 2 条边
- (n − 1) + (n − 2) + (n − 3) + ⋯ + 3 + 2 + 1
有向完全图(Directed Complete Graph)
有向完全图的任意两个顶点之间都存在方向相反的两条边
- n 个顶点的有向完全图有 n(n − 1) 条边
稠密图(Dense Graph):边数接近于或等于完全图
稀疏图(Sparse Graph):边数远远少于完全图
有权图(Weighted Graph)
有权图的边可以拥有权值(Weight)
连通图(Connected Graph)
如果顶点 x 和 y 之间存在可相互抵达的路径(直接或间接的路径),则称 x 和 y 是连通的
如果无向图 G 中任意 2 个顶点都是连通的,则称G为连通图
连通分量(Connected Component)
连通分量:无向图的极大连通子图
- 连通图只有一个连通分量,即其自身
- 非连通的无向图有多个连通分量
下面的无向图有 3 个连通分量:
强连通图(Strongly Connected Graph)
如果有向图 G 中任意2个顶点都是连通的,则称G为强连通图
强连通分量(Strongly Connected Component)
强连通分量:有向图的极大强连通子图
- 强连通图只有一个强连通分量,即其自身;非强连通的有向图有多个强连通分量
图的实现方案
图有2种常见的实现方案:
- 邻接矩阵(Adjacency Matrix)
- 邻接表(Adjacency List)
邻接矩阵(Adjacency Matrix)
邻接矩阵的存储方式
- 一维数组存放顶点信息
- 二维数组存放边信息
邻接矩阵比较适合稠密图
- 不然会比较浪费内存
邻接矩阵 – 有权图
邻接表(Adjacency List)
邻接表 – 有权图
【恋上数据结构】图基础知识介绍相关推荐
- MJ恋上数据结构(第1季 + 第2季)笔记
文章转载自:https://blog.csdn.net/weixin_43734095/article/details/104847976 恋上数据结构完整笔记(第1季 + 第2季) 前言 数据结构 ...
- 【恋上数据结构与算法 第二季】【04】图-基础实现_遍历_拓扑排序
持续学习&持续更新中- 学习态度:脚踏实地 [恋上数据结构与算法 第二季][04]图-基础实现_遍历_拓扑排序 图的实现方案 邻接矩阵 邻接表 图的基础接口 顶点.边的定义 图的基础实现 图的 ...
- 【恋上数据结构】复杂度知识以及LeetCode刷题指南
基础知识 什么是算法? 如何评判一个算法的好坏? 大O表示法(Big O) 对数阶的细节 常见的复杂度 多个数据规模的情况 LeetCode刷题指南 斐波那契数列复杂度分析 斐波那契数列 - 递归 斐 ...
- 《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
哈希表(Hash Table) 引出哈希表 哈希表(Hash Table) 哈希冲突(Hash Collision) JDK1.8的哈希冲突解决方案 哈希函数 如何生成 key 的哈希值 Intege ...
- 《恋上数据结构第1季》二叉树基础、真二叉树、满二叉树、完全二叉树、二叉树的遍历(重点)
二叉树(Binary Tree) 树(Tree)的基本概念 有序树.无序树.森林 二叉树(Binary Tree) 二叉树的性质 真二叉树(Proper Binary Tree) 满二叉树(Full ...
- 【恋上数据结构】排序算法前置知识及代码环境准备
排序准备工作 何为排序? 何为稳定性? 何为原地算法? 时间复杂度的知识 写排序算法前的准备 项目结构 Sort.java Asserts.java Integers.java Times.java ...
- 《恋上数据结构与算法》第1季:算法概述
数据结构与算法的学习笔记目录:<恋上数据结构与算法>的学习笔记 目录索引 算法概述 1. 算法和数据结构 1.1 什么是算法 1.2 什么是数据结构 2. 时间复杂度 2.1 如何判断一个 ...
- OpenGL开发之旅基础知识介绍
最近由于手机项目中需要用到OpenGL ES的知识,所以这段时间正在研究OpenGL的相关知识.因为OpenGL ES是OpenGL的剪裁版本,所以我直接从OpenGL入手,然后再去看OpenGL E ...
- 【恋上数据结构】跳表(Skip List)原理及实现
跳表(Skip List) 引出跳表 跳表介绍 跳表原理及实现 使用跳表优化链表 跳表基础结构 跳表的搜索 跳表的添加.删除 跳表的层数 跳表的复杂度分析 跳表 - 完整源码 数据结构与算法笔记:恋上 ...
最新文章
- URAL 2027 	URCAPL, Episode 1 (模拟)
- python画折线图代码-Python折线图的分析过程和画图的方法
- nginx-http服务器
- idea 配置多个jdk
- 传统的http请求存在那些缺点
- python中bytes转int的实例
- 语音合成:模拟最像人类声音的系统
- 架构之:REST和HATEOAS
- ConstraintLayout 学习笔记
- CAMERA(12)---[Android相机]光线传感器识别环境光亮强度
- 翻车事故频发,原来是开发者漏了这一步!
- druid 连接池的释放 配合上spring bean销毁_spring boot基于DRUID数据源密码加密及数据源监控实现...
- Atitit 高性能架构之道 attilax著 艾龙 著 1. 应用服务与数据隔离	2 2. 负载均衡你问题	2 2.1. 用户的请求由谁来转发到到具体的应用服务器	2 2.2. 有什么转发的算法
- 如何按页进行PDF文档拆分
- 学习记录 | ZigBee协议栈工作流程
- 【MATLAB】修改黑色炫酷主题darcula.prf
- 文件服务器文件删除记录查询,Windows server2008r2共享文件操作记录、查询服务器日志方法...
- strongbox-数论
- MACD金叉启动副图/选股指标 通达信 源码 有未来
- exp参数feedback_exp/imp命令详解