图的基本概念和存储

news2024/11/28 22:46:53

基本概念

基本概念
    图的定义:图(Graph)一般由两个集合共同构成,一个是非空但是有限的顶点集合V(Vertex),另一个是描述顶点之间连接关系的边集合E(Edge),边集合可以为空集。G = (V, E)
    端点和邻接点
    顶点的度;入度和出度
    完全图
    子图
    路径
        简单路径
    回路或环

     简单回路=简单路径+回路
    连通、连通图、连通子图和连通分量
    强连通图、强连通分量
    权和网
    连通图的连通分量只有一个(本身),而非连通图的连通分量不止一个;强连通图同理

存储结构

存储结构
    邻接矩阵
        存储元素:1,w,0,无穷
        特点
            唯一性
            对于n个点顶的图,无论有无方向,都需n的平方个存储空间,所以邻接矩阵更适合存储边的数目较多的稠密图
            无向图的邻接矩阵是一个对称矩阵,可以采用矩阵压缩的思想
            对于无向图,第i行或第i列的非零元素和非无穷元素的个数是顶点i的度数
            对于有向图,第i行(第i列)的非零元素和非无穷元素的个数是顶点i的出度数(入度数)
            判断两个顶点的边是否存在或求取权值的执行效率是O(1),如果算法需要提取边的权值则建议采用该存储结构
    邻接表
        一种数组和链式相结合的存储方法
        特点
            表示不唯一
            稀疏图更适合使用邻接表而不是邻接矩阵
    逆邻接表
    十字链表
        邻接表与逆邻接表的结合,是有向图的另一种存储结构
        步骤
            1.每个顶点对应一个头节点结果为(data,firstIn,firstOut)
            2.图中的每条边对应一个结点,结构为(起点,终点,起点相同的下一个边结点,终点相同的下一个边结点,边的信息(权值))
            3.构造横向链表
            4.构造纵向列表
        优点:容易找到以v为起点或终点的边,也就是出度和入度
    邻接多重表
        无向图的另一种存储结构,与十字表类似
        步骤
            1.无向图的每个顶点对应一个头节点,结构为(data,firstarc)
            2.每条边对应一个边结点,结构为(mark,i,ikink,j,jlink,weight),此时边<i,j>和<i,i>只有一个边结点
            3.构造链表

图的遍历

图的遍历
    定义:从任意顶点出发,按照某种算法沿着图的边访问图的所有结点,且每个节点只访问一次
    深度优先遍历
        从某个初始点V0出发,首先访问初始点V0,然后选择一个相邻的且没有访问过的点访问,再以该点为初始点进行深度优先遍历,直到与原始顶点V0的所有邻接点访问完为止,总的来说这是一个递归的过程
        时间复杂度
            邻接表:由于要遍历顶点的所有邻接点为O(n+e)
            邻接矩阵:由于要遍历一个顶点的一行数据,为O(n*n)
    广度优先遍历
        首先访问初始节点,接着访问所有未被访问的邻接点,访问每个邻接点后,再访问该邻接点的所有未被访问的邻接点,依此类推
        算法实现类似于二叉树的层次遍历,需要使用队列
        时间复杂度
            邻接表:由于要遍历顶点的所有邻接点为O(n+e)
            邻接矩阵:由于要遍历一个顶点的一行数据,为O(n*n)
    非连通图的遍历
        无向图
            在每个连通分量选择起始点分别进行遍历
        有向图
            重复选择不一样的初始点进行遍历,直到遍历完成
    作用:可以判断该无向图是否连通
    对于无权图来讲,广度遍历一定是最短路径,而深度不一定

生成树

生成树和最小生成树
    主要针对无向图
    生成树
         有N-1 条边(其中N是顶点数)且每个顶点有且仅有一条路径相连,也就是包含原图全部N个顶点的极小连通子图
        任意添加一条边必然构成一个环
        分类
            深度优先生成树
            广度优先生成树
    最小生成子树
        给一个无向图的边都加上权值(网图)现在要求生成树边的权值总和最小
        准则
            1.必须使用原图的边来构造树
            2.必须有且使用n-1条边来连接n个顶点
            3.不能使用产生回路的边
        算法
            普利姆算法
                从任意一个顶点开始,不断成长为一棵树,每次都会选择尽可能小的方向去进行延伸
                时间复杂度为O(n*n),n为顶点个数,所以该算法的执行时间与e边数无关,适合用于稠密图求解最小生成树
            克鲁斯卡尔算法
                核心思想就是主动去选择权值较小的边
                时间复杂度为elog2(e),所以该算法的执行时间与e边数有关和顶点数无关,适合稀疏图

最短路径

最短路径
    单源最短路径
        狄克斯特拉(Dijkstra)算法
            时间复杂度O(n*n)
    多源最短路路径
        弗洛伊德算法
            时间复杂度O(n*n*n)

关键路径

关键路径
    顶点代表某个任务(事件),活动包括时间用边来表示,将边作为活动的图称为AOE图,每个事件对应着多个活动(多条边)
    定义:在AOE网中,从源点到汇点的所有路径中,具有最大路径长度的路径
    关键路径上的活动称为关键活动,关键活动不存在富裕的时间,而非关键的活动可能存在富裕的的时间

拓扑排序

拓扑排序
    始终由前置条件来解锁后续,所以说整个图中是不可以出现循环的,构建出来的这种图称为有向无环图(DAG),就是个流程图,像这种顶点表示活动或任务的图也称为AOV图
    拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph)进行排序进而得到一个有序的线性序列
    步骤
        1.在有向图中找到入度为零的点输出
        2.从图中删除该点和该点出发的所有有向边
        3.重复上述两步,直到剩余图中不存在没有前驱的顶点
    具体实现可以使用队列来写代码

实现代码:数据结构与算法: 记录学习笔记,包括代码和思维导图 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.信息安全之数据恢复

1.数据容灾数据备份 RPO(recovery point object)数据恢复点目标 数据丢掉多少可接受 RTO(recovery time object)数据恢复时间目标 恢复数据需要多少时间 2.系统灾难原因 1.硬件 2.人为 3.软件 4.病毒 5.自然灾害 3.容灾级别 数据级别(数据出错)<应用(某个功能不能使用)<业…

运维小白必学篇之基础篇第二集:文件系统结构和目录管理

文件系统结构和目录管理实验 实验者&#xff1a;胡 阳 目录 一、将虚拟机主机名改为自己的名字 二、完成以下操作&#xff1a; 一、将虚拟机主机名改为自己的名字 例如&#xff1a;hostname liangyuntong 关闭该终端后&#xff0c;重新打开即可 二、完成以下操作&#…

【AIGC】CPM-BEE 开源大模型介绍、部署以及创建接口服务

终于! 中文基座模型CPM-Bee开源了 # CPM-Bee 百亿参数的开源中英文双语基座大模型 ✨ 模型介绍 CPM-Bee是一个完全开源、允许商用的百亿参数中英文基座模型&#xff0c;也是CPM-Live训练的第二个里程碑。它采用Transformer自回归架构&#xff08;auto-regressive&#xff0…

直播预告丨SaaS+CG?UE影视级场景渲染与科学制片全流程揭秘!

余热不减&#xff01;在第二届瑞云3D渲染动画创作大赛赛果公布 后&#xff0c;小瑞紧锣密鼓在安排获奖选手的系列专场直播。在上期的“ 泛CG 聚未来 ” 第四届实用技术线上分享会中,咱们邀请到大赛专业组冠亚军“3ds Max老法师”彼尔德和“Maya大神”Shuiguo 分享了自己的创作历…

cplex基础入门(一)

这边文章会以纯新手小白的视角&#xff0c;教会大家如何快速的搭建自己的cplex模型&#xff0c;做到求解模型不求人。 目录 一、引言 1、掌握数据类型及数据结构 2、常规Cplex编程方法 3、Cplex编程步骤 4、cplex 程序框架 5、创建模型 二、规划建模的入门求解案例 1、…

代码随想录训练营Day57| 647. 回文子串 516.最长回文子序列 动态规划总结篇

目录 学习目标 学习内容 647. 回文子串 516.最长回文子序列 学习目标 647. 回文子串 516.最长回文子序列 动态规划总结篇 学习内容 647. 回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/palindromic-substrings/ class S…

3.部署 Stable Diffusion(SD)

部署Stable Diffusion webui方式: 本地部署:在自己的电脑上安装(官方脚本部署、懒人包部署(文末自取)) 云端部署:在远程服务上运行(免费有时长限制、可付费租用GPU) 两种部署方式哪种都可以,看需选择。如果有性能比较不错的的显卡,那么可以考虑本地部署。如果是没…

java养老院老年人档案管理系统springboot+vue

本居家养老系统管理员和工作人员两个角色。管理员功能有个人中心&#xff0c;老人账号管理&#xff0c;工作人员管理&#xff0c;老人档案管理&#xff0c;订单申请管理&#xff0c;检查检验项目管理&#xff0c;维修服务管理&#xff0c;订单信息管理&#xff0c;转诊信息管理…

一文简述低代码到底是什么?

在进入正文之前&#xff0c;有必要给大家拨正一个误区&#xff1a; “开发≠写代码” 由于现在低代码&零代码产品在宣传过程中着重强调“公民开发”这一概念&#xff0c;我们随便点开一篇相关文章章&#xff0c;必定会有一句&#xff1a;“人人都是开发者&#xff0c;无需…

计算机中丢失MSVCP140.dll无法启动此程序怎么办

MSVCP140.dll是Microsoft Visual C Redistributable文件中的一个动态链接库文件&#xff0c;它是Microsoft Visual Studio 2015和2017中的一部分。它包含一组选项卡&#xff0c;其中包含C/C开发所需的库。该文件通常位于计算机的Windows/System32目录中&#xff0c;它提供了用于…

Vue2——入门(适合后端程序员看)

Vue组件 Vue 的组件文件以 .vue 结尾&#xff0c;每个组件由三部分组成 <template></template><script></script><style></style> template 模板部分&#xff0c;由它生成 html 代码 script 代码部分&#xff0c;控制模板的数据来源和行…

30天从入门到精通TensorFlow1.x 第二天,变量 tf.Variable()

文章目录 一&#xff0c;接前一天&#xff08;1&#xff09;.内容前先弄清楚 sess.run() 函数a. 该函数干嘛的b. 该函数有哪些参数c. 该函数的使用 &#xff08;2&#xff09;.由库函数创建张量&#xff08;3&#xff09;.由库函数创建张量 二、变量tf.Variable()&#xff08;1…

git在一台电脑上配置不同的仓库(多个gitee仓库、或者不同的github仓库)

前言 在开发过程中&#xff0c;我们工作的时候难免会使用到两个不同的仓库&#xff0c;但是正常来说一电脑默认一个参考&#xff0c;直接会用全局命令 git config --global user.name "yourName"但是这样只能配置一个仓库了&#xff0c;本文介绍在一台电脑上配置多…

跟着LearnOpenGL学习5--纹理

文章目录 一、前言二、纹理映射三、纹理环绕方式四、纹理过滤五、多级渐远纹理六、加载与创建纹理七、生成纹理八、应用纹理九、完整代码9.1、工程结构9.2、纹理图片9.3、stb_image.cpp9.4、顶点着色器9.5、片段着色器9.6、main.cpp 十、纹理颜色与顶点颜色混合十一、纹理单元 …

Python系列模块之pymysql操作MySQL 数据库

目录 一、安装pymysql 二、连接数据库 三、数据库操作 3.1 查询 3.2 更新 3.3 使用循环批量更新 Python 系列文章学习记录&#xff1a; Python系列之Windows环境安装配置_开着拖拉机回家的博客-CSDN博客 Python系列之变量和运算符_开着拖拉机回家的博客-CSDN博客 Pyt…

JavaWeb13(ajax01)

目录 一. 什么是ajax 二.为什么需要AJAX? 三. 同步和异步的区别. 四.基于jQuery实现AJAX语法 4.1 语法1-$.ajax(url,[settings]). 4.1 语法2-$.get/post(url, [data], [callback], [type]). 五 .案例 5.1 ajax实现登录 ①html代码 用户登录 用户名&#xff1a; 密码…

Linux安装VNC(Linux桌面版远程)

一、Linux安装VNC服务 适用于CentOS7 #检查系统没有装GUI界面 rpm -qa | grep gnomeyum -y groupinstall "X Window System" yum -y groupinstall "GNOME Desktop"#安装VNC yum install tigervnc tigervnc-server -y检查开机运行级别 systemctl get-defa…

Shell脚本攻略:数组

目录 一、理论 1.数组概述 2.定义数组 3.数组打印 4.数组的数据类型及处理 5.数组赋值 6.数组遍历 7.数组切片 8.数组替换 9.删除数组 10.追加数组中的元素 11.数组排序算法 二、实验 1.实验一 2.实验二 3.实验三 一、理论 1.数组概述 数组是Shell的一种特殊变…

MySQL InnoDB缓存池

缓存池的作用 缓存表数据与索引数据&#xff0c;把磁盘上的数据加载到缓冲池&#xff0c;避免每次访问都进行磁盘IO&#xff0c;起到加速访问的作用。 为什么不把所有数据放到缓冲池中 凡事都具备两面性&#xff0c;抛开数据易失性不说&#xff0c;访问快速的反面是存储容量…

MongoDB 基本概念

MongoDB 部署模型 在生产环境中&#xff0c;MongoDB 经常会部署成一个三节点的复制集&#xff0c;或者一个分片集群。 我们先来看左边&#xff0c;当 MongoDB 部署为一个复制集时&#xff0c;应用程序通过驱动&#xff0c;直接请求复制集中的主节点&#xff0c;完成读写操作。另…