首页 > 编程语言 >数据结构与算法:图有哪些关键核心知识点

数据结构与算法:图有哪些关键核心知识点

时间:2023-07-18 22:11:56浏览次数:37  
标签:知识点 存储 有向图 路径 图有 算法 数组 顶点 数据结构

图是一种复杂的数据结构,它由顶点和边组成,可以表示任意两个数据元素之间的关系。

图有以下一些基本概念和术语:

  • 图可以分为无向图和有向图,根据边是否有方向。
  • 图可以分为简单图和多重图,根据边是否重复或自环。
  • 图可以分为完全图和非完全图,根据任意两个顶点之间是否存在边或弧。
  • 图可以分为稀疏图和稠密图,根据边或弧的数量相对于顶点的数量的比例。
  • 图可以分为网和非网,根据边或弧是否带有权值。
  • 图中的顶点之间可以是连通的或非连通的,根据是否存在从一个顶点到另一个顶点的路径。
  • 图中的连通子图称为连通分量,如果是有向图,则称为强连通分量。
  • 图中包含所有顶点且边数最少的连通子图称为生成树,如果是有向图,则称为有向树或生成森林。
  • 图中顶点的度是与该顶点相关联的边或弧的数量,如果是有向图,则分为入度和出度。
  • 图中路径的长度是路径上的边或弧的数量,如果是网,则还要考虑权值之和。

图有以下一些常用的存储结构和基本操作:

  • 邻接矩阵:用一个一维数组存储顶点信息,用一个二维数组存储边或弧的信息。邻接矩阵适合表示稠密图,但会浪费空间表示稀疏图。
  • 邻接表:用一个一维数组存储顶点信息,用一个链表数组存储每个顶点的邻接点信息。邻接表适合表示稀疏图,但会增加查找边或弧的时间。
  • 十字链表:用一个一维数组存储顶点信息,用一个链表数组存储每个顶点作为弧尾的出边信息和作为弧头的入边信息。十字链表适合表示稀疏的有向图,但会占用更多的空间。
  • 邻接多重表:用一个一维数组存储顶点信息,用一个链表数组存储每个顶点相关联的边信息,并在每条边上标记其方向。邻接多重表适合表示无向图中存在重复边或自环的情况,但会增加操作的复杂度。
  • 边集数组:用一个一维数组存储顶点信息,用一个二维数组存储边或弧信息,并在每条边或弧上标记其起点和终点。边集数组适合表示任意类型的图,但不便于查找某个顶点的邻接点。

图有以下一些常见的算法和应用:

  • 图的遍历:按照一定的规则访问图中所有顶点且每个顶点仅访问一次。常用的遍历方法有深度优先搜索(DFS)和广度优先搜索(BFS)。
  • 最小生成树:在一个连通网中找到一棵包含所有顶点且权值之和最小的生成树。常用的算法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。
  • 最短路径:在一个带权的有向图中找到从一个顶点到另一个顶点的路径,使得路径上的权值之和最小。常用的算法有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd)算法。
  • 拓扑排序:在一个有向无环图中对所有顶点进行排序,使得对于任意一条弧<v,w>,顶点v总是排在顶点w之前。常用的算法有基于入度的拓扑排序算法和基于DFS的拓扑排序算法。
  • 关键路径:在一个表示工程项目的带权有向无环图中找到一条从起点到终点的路径,使得路径上的权值之和最大。这条路径就是工程项目的关键路径,表示工程项目的最短完成时间。常用的算法有基于拓扑排序的关键路径算法。

标签:知识点,存储,有向图,路径,图有,算法,数组,顶点,数据结构
From: https://www.cnblogs.com/shoshana-kong/p/17564265.html

相关文章

  • 科目一知识点,自己写着玩玩~~
    安全规则题:道路行驶,安全至上,所以遇到说 加速干啥干啥的都是错误的,,减速慢行都是对的,甚至你说你保持原速那也是错误的,就得减速,安全第一同行道口,礼让为重,涉及到礼让的都是对的减少并行时间是对的顺序通行的规则:拐弯让直行、右转让左转、同直行右侧先行不能超车情况:执行任务的......
  • 数据结构刷题
    山理工数据结构刷题专题1--顺序表专题2--栈和队列专题3--串和数组专题4--二叉树专题5--二叉查找树和平衡二叉树树结构练习——排序二叉树的中序遍历#include<bits/stdc++.h>#defineyescout<<"YES"<<'\n'#defineno cout<<"NO"<<'\n'usingnamespace......
  • 数据结构练习笔记——删除单链表中相同元素
    删除单链表中相同元素【问题描述】单链表中存放了若干整数,请删除相同整数。【输入形式】单链表【输出形式】删除相同整数后的单链表【样例输入】11123【样例输出】123【样例说明】递增的形式输入数据,允许相同元素#include<stdlib.h>#include<iostream>usingname......
  • 点分治 - 知识点梳理
    分治是一种将大的问题拆分成更小的问题并分而治之的算法,有利于使一个大的问题迅速缩小。在线性区间上的分治一般从区间中点将区间一分为二(这个中点也叫做分治中心),这样分\(\logn\)次就能使区间大小缩小到\(1\)。而在树上的分治一般以树的重心作为分治中心,这样分\(\logn\)次......
  • 哈希数据结构
    参考链接:https://blog.csdn.net/CRMEB/article/details/1208206821.哈希表哈希表,即散列表(Hashtable),是根据keyvalue而直接进行访问的数据结构。也就是说,它通过把keyvalue映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。......
  • 数据结构
    数据结构中的基本概念  数据:任何能够输入到计算机中,能被程序处理的描述客观事物的符号  数据项:有独立含义的最小单位,也叫做数据域、域  数据元素:组成数据的、有一定意义的基本单位,也叫作节点、结点、顶点(一个数据元素是由若干项数据项组成)  数据结构:相互之间......
  • 拓扑排序算法相关的知识点总结
    拓扑排序算法相关的知识点总结拓扑排序算法是一种对有向无环图(DAG)进行排序的方法,它可以将图中的所有顶点排成一个线性序列,使得对于任意一对顶点u和v,如果存在一条从u到v的有向边,那么u在序列中必然出现在v之前。拓扑排序算法可以用来解决一些依赖关系的问题,例如课程安排、工程进度......
  • 7.17 数据结构
    线段树小白逛公园动态维护最大子段和,没啥好说的文文的摄影布置考虑清楚标记分讨合并算术天才⑨与等差数列维护区间最大最小,如果是等差数列,有了端点就可以知道整个序列了,再维护哈希值对比就可以了,突然发现我之前这个解法是乱搞,只有充分性没有必要性,只是题目没有卡正解:维护......
  • 数据结构小记
    线段树区间查询线段树可以维护具有结合律的信息。区间修改区间查询加上修改后应当满足的前提是我们可以维护一个封闭的集合\(\mathcal{S}\),使得任一操作\(o\in\mathcal{S}\),且\(\mathcal{S}\)对于复合封闭,即对任意\(u,v\in\mathcal{S}\),有\(u\circv\in\mathcal{S}\)......
  • python知识点
    anoldcat 博客园首页新随笔联系订阅管理随笔-66  文章-61  评论-7  阅读- 14万Python知识点大全(转载) 转载自:https://github.com/kenwoodjw/python_interview_question大佬总结得很好,本来我也想总结一个的,直到我看到了这个。。。额,我......