当前位置: 首页 > news >正文

0101基础概念-图-数据结构和算法(Java)

文章目录

    • 1 图
      • 1.1 定义
      • 1.2 4种图模型
    • 2 无向图
      • 2.1 定义
      • 2.2 术语
    • 后记

1 图

1.1 定义

图是一种非线性的数据结构,表示多对多的关系。

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

在图中需要注意的是:

  • 线性表和树可以看做特殊的图。

  • 线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们则称之为顶点(Vertex)。

  • 线性表可以没有元素,称为空表;树中可以没有节点,称为空树;但是,在图中不允许没有顶点(有穷非空性)

  • 线性表中的各元素是线性关系,树中的各元素是层次关系,而图中各顶点的关系是用边来表示(边集可以为空)。

1.2 4种图模型

  • 无向图
  • 有向图
  • 加权图
  • 加权有向图

2 无向图

2.1 定义

图是由一组顶点和一组能够将两个顶点相连的边组成。

图下图2.1-1所示:

在这里插入图片描述

顶点一般使用0至V-1来表示一张含有V个顶点的图中的各个顶点,使用数组索引作为结点很方便。我们使用v-w或者w-v表示连接v和w的边。

特殊的图:

  • 自环:一条连接一个顶点和其自身的边
  • 连接同一对顶点的两条及以上的边称为平行边

含有平行边的图称为多重图;没有平行边或自环的图称为简单图。

2.2 术语

在这里插入图片描述

  • 相邻顶点:由同一条边连接的两个顶点,称为相邻顶点,并称这条边依附于这2个顶点。

  • 度数:某个顶点的度数即为依附于这个顶点的边的总数。

  • 子图:有一幅图所以边的一个子集(以及他们所依附的所有顶点)组成的图。

  • 路径:由边顺序连接的一系列顶点。

    • 简单路径:一条没有重复顶点的路径。
  • 环:一条至少含有一条边且起点和终点相同的路径。

    • 简单环:一条(除起点和终点必须相同外)不含有重复顶点和边的环。
    • u-v-w-x-u记法表示从u到v到w在回到u到一条环。
  • 路径长度或者环的长度:路径或者边所 包含的边数。

  • 连通:当两个顶点之间存在一条连接双方的路径时,我们称一个顶点和另外一个顶点连通。

    • u-v-w-x记法表示u到x的一条路径
  • 连通图:如果从任意一顶点都存在一条路径到达另一个任意顶点,我们称这幅图是连通图。

    • 一幅非连通图由若干连通的部分组成,它们都是其极大连通子图(分量)。
  • 连通图的生成树:连通图的生成树是它的一幅子图,它含有图中的所有顶点且是一颗树。

    • 树是一幅无环连通图。互不相连的树组成的集合称为森林。
  • 图的生成树森林:图的所有连通子图上生成树的集合。

一棵树如下图所示:

在这里插入图片描述

生成树森林:

在这里插入图片描述

当且仅当一幅含有V个结点的图G满足下列5个条件之一时,它就是一棵树:

  • G有V-1条边且不含有环;

  • G有V-1条边且时连通的;

  • G是连通的,但删除任意一条边都会使它不在连通;

  • G是无环图,但添加任意一条边都会产生一条环;

  • G中任意一堆顶点之间仅存在一条简单路径。

  • 图密度:图密度是指已连接的顶点对占所有可能连接顶点对的比例。

    • 稀疏图:如果一幅图中不同边的数量在顶点总数V的一个小的常数倍以内,那么我们就称这幅图是稀疏的。
    • 稠密图:否则就是稠密图。
  • 二分图:二分图是一种能够将所有结点分为两部分的图,其中图的每条边所连接的两个顶点分别属于不同的部分。

后记

如果小伙伴什么问题或者指教,欢迎交流。

❓QQ:806797785

⭐️源代码仓库地址:https://gitee.com/gaogzhen/algorithm

参考链接:

[1][美]Robert Sedgewich,[美]Kevin Wayne著;谢路云译.算法:第4版[M].北京:人民邮电出版社,2012.10

[2]数据结构:图的基本概念

http://www.lryc.cn/news/21766.html

相关文章:

  • Linux基础命令和工具使用详解
  • 一个好的python文件可以有几种用途?
  • HDFS优化
  • 行测-判断推理-图形推理-样式规律-黑白运算
  • java+springboot+vue高校学生医疗保险管理系统
  • [已解决] AHK 映射 ESC 延迟 500 ms 的严重问题
  • QML state详解
  • 一起Talk Android吧(第五百零六回:如何调整组件在约束布局中的角度)
  • 微信投票-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)
  • duboo+zookeeper分布式架构入门
  • 黑盒测试用例设计方法-等价类划分法
  • 4.OCR文本识别Connectionist Temporal Classification(CTC)算法
  • 误删了Ubuntu/Linux的一些默认用户目录怎么办?
  • ArXiv简介以及论文提交
  • pytorch学习
  • 【OC】块初识
  • 3-2 创建一个至少有两个PV组成的大小为20G的名为testvg的VG
  • 【密码学】 一篇文章讲透数字证书
  • Linux 操作系统原理 — 内存管理 — 虚拟地址空间(x86 64bit 系统)
  • C语言深入知识——(2)指针的深入理解
  • Git使用笔记
  • 数据库管理-第五十八期 倒腾PDB(20230226)
  • 我看谁还敢说不懂git
  • Scratch少儿编程案例-算法练习-实现加减乘除练习题
  • 【离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计】
  • python网络数据获取
  • [Datawhale][CS224W]图机器学习(六)
  • aws ecr 使用golang实现的简单镜像转换工具
  • 【20230225】【剑指1】分治算法(中等)
  • 「JVM 高效并发」Java 线程