【数据结构】图的介绍
来源:互联网 发布:电影特效软件 编辑:程序博客网 时间:2024/05/19 19:40
1.图的定义
图是一种复杂的非线性结构。
在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。
图G由两个集合V(顶点Vertex)和E(边Edge)组成,定义为G=(V,E)
2.图的相关概念
(1)有向图与无向图
有向图:顶点对< x ,y >是有序的;无向图:顶点对< x,y >是无序的。
无向图:图中任意两个顶点时间的边都是无向边(顶点Vi到Vj之间的边没有方向)。
(2)完全无向图与完全有向图
完全无向图:若有n个顶点的无向图有n(n-1)/2 条边, 即任意两个顶点之闻都存在边
完全有向图:有n个顶点的有向图有n(n-1)条边, 即任意两个顶点之阅都存在方向互为相反的两条弧
(3)权与网
权:与图的边或弧相关的数
网:带权的图
(4)度
无向图顶点的边数叫做度
有向图顶点分为入度和出度。
(5)其它
自环(Loop):若一条边的两个顶点为同一顶点,则此边称作自环。
路径(Path):路径长度:指一条路径上经过的边的数量。回路:指一条路径的起点和终点为同一个顶点。
连通图:如果在一个无向图中从每一个顶点到每个其他顶点都存在一条路径,则称该无向图是联通的,具有这样的有向图成为强连通图。
3.图的存储结构
(1)邻接矩阵
邻接矩阵( Adjacency Matrix) 存储方式是用两个数组来表示圈。一个一维数组存储圈中顶点信息,一个二维数组〈称为邻接矩阵)存储图中的边或弧的信息。
(2)邻接表
数组与链表相结合的存储方法称为邻接表,关心出度问题,但想了解入度就必须要遍历整个图才知道。而逆邻接表解决了入度却不了解出度的情况。
(3)十字链表
把邻接表和逆邻接表结合起来
(4)边集数组
边集数组是由两个一维数组构成。一个是存储顶点的信息;另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标( begin ) 、终点下标( end ) 和权(weigbt) 组成
(5)图解
4.图的遍历方式
(1)深度优先遍历
深度优先遍历,也有称为深度优先搜索,简称DFS。其实,就像是一棵树的前序遍历。
它从图中某个结点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到。若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中的所有顶点都被访问到为止。
(2)广度优先搜索遍历
广度优先搜索遍历BFS类似于树的按层次遍历
首先访问出发点Vi,接着依次访问Vi的所有未被访问过的邻接点Vi1,Vi2,Vi3,…,Vit并均标记为已访问过。然后再按照Vi1,Vi2,… ,Vit的次序,访问每一个顶点的所有未曾访问过的顶点并均标记为已访问过,依此类推,直到图中所有和初始出发点Vi有路径相通的顶点都被访问过为止。
5.最小生成树
(1)定义
生成树是将图中所有顶点以最少的边连通的子图。
构造连通网的最小代价生成树称为最小生成树
(2)两种算法
克鲁斯卡尔算法主要是针对边来展开,边数少时效率会非常高,适用于稀疏图
普里姆算法对于边数非常多的情况效率高,适用于稠密图。
6.最短路径
(1)定义
两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点
(2)两种算法
弗洛伊德( Floyd )算法适用于求所有顶点至所有顶点的最短路径问题
迪杰斯特拉( Dijkstra ) 算法:按路径长度递增的次序产生最短路径,时间复杂度是O(n2) 。
7.拓扑排序
设G=(v,E)是一个具有n 个顶点的有向图, V 中的顶点序列Vl ,V2,… … , Vn ,满足若从顶点VI 到V,有一条路径, 则在顶点序列中顶点V,必在顶点Vj 之前。则我们称这样的顶点序列为一个拓扑序到。即对一个有向图构造拓扑序列的过程。
本人才疏学浅,若有错,请指出
谢谢!
- 【数据结构】图的介绍
- 数据结构---图的详细介绍
- 学习数据结构 -> 算法的介绍 .
- 数据结构介绍:
- 【数据结构】关于数据结构顺序表动态内存开辟的介绍
- Util包下常用的数据结构介绍
- Util包下常用的数据结构介绍
- Util包下常用的数据结构介绍
- Util包下常用的数据结构介绍
- Java数据结构 Collections的一些方法介绍
- 常用数据结构以及算法的简单介绍
- 数据结构--树(tree)的简单介绍
- 常用算法和数据结构的复杂度介绍
- 数据结构和算法的基本介绍
- Nginx的HTTP模块介绍-----数据结构部分
- 数据结构---串的模式匹配算法介绍
- 数据结构:几种排序算法的介绍。
- Spark的基本数据结构RDD介绍
- 秉火OV7725驱动日志 第一天
- 倍增lca学习笔记(codevs2370小机房的树题解)
- Android开发第一步,软件准备和环境搭建
- 牛顿法与拟牛顿法学习笔记(三)DFP 算法
- Error:Failed to open zip file. Gradle's dependency cache may be corrupt (this sometimes occurs after
- 【数据结构】图的介绍
- matplotlib如何写出汉字
- 小白学爬虫----3--简单爬取“生活大爆炸”贴吧
- TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节
- 前端性能优化----几种常用的方法。
- Qt调试 error:expected.........
- HDU
- EasyUI datagrid SpringMVC JPA 翻页功能实现
- oraecl导入导出数据