图
Posted leeq123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图相关的知识,希望对你有一定的参考价值。
图
图的概念
图,是一种比树更为复杂的数据结构。树的节点之间是一对多的关系,并且存在父与子的层级划分;而图的顶点(注意,这里不叫节点)之间是多对多的关系,并且所有顶点都是平等的,无所谓谁是父谁是子
关于图的术语
在图中,最基本的单元是顶点(vertex),相当于树中的节点。顶点之间的关联关系,被称为边(edge)。
在有些图中,每一条边并不是完全等同的。比如刚才地铁线路的例子,从A站到B站的距离是3公里,从B站到C站的距离是5公里......这样就引入一个新概念:边的权重(Weight)。涉及到权重的图,被称为带权图(Weighted Graph)。
图的表示
邻接矩阵
拥有n个顶点的图,它所包含的连接数量最多是n(n-1)个。因此,要表达各个顶点之间的关联关系,最清晰易懂的方式是使用二维数组(矩阵)。
邻接表和逆邻接表
为了解决邻接矩阵占用空间的问题,人们想到了另一种图的表示方法:邻接表。
生成树的概念
一个连同图的生成树是该连通图的一个极小连同子图,它含有图中全部顶点,但只有构成一棵树的(n-1)条边.如果在一棵生成树9上添加一条边,必定构成一个环,因为这条边使得它依附的那两个顶点之间有了第二条路径.一棵有n个顶点的生成树(连通无回路图)有且仅有(n-1)条边,但是,有(n-1)条边的图不一定都是生成树.一个图有n个顶点,如果它由小于(n-1)条边,则是非连通图;如果它有多于(n-1)条边,则一定有回路.
对于一个带权(假定每条边上的权值均为大于零的实数)连通无向图G中的不同生成树,各树的边上的权值之和可能不同,边上的权值之和最小的树称为该图的最小生成树
什么是 深度/广度 优先遍历?
深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。
广度优先遍历算法是图的另一种基本遍历算法,其基本思想是尽最大程度辐射能够覆盖的节点,并对其进行访问。以迷宫为例,深度优先搜索更像是一个人在走迷宫,遇到没有走过就标记,遇到走过就退一步重新走;而广度优先搜索则可以想象成一组人一起朝不同的方向走迷宫,当出现新的未走过的路的时候,可以理解成一个人有分身术,继续从不同的方向走,,当相遇的时候则是合二为一。
广度优先遍历算法的实现
与深度优先遍历算法相同,都需要一个标记数组来记录一个节点是否被访问过,在深度优先遍历算法中,使用的是一个栈来实现的,但是广度优先因为需要记录与起点距离最短的节点,或者说能够用尽可能少的边连通的节点,距离短的优先遍历,距离远的后面再遍历,更像是队列。所以在广度优先遍历算法中,需要使用队列来实现这个过程。最短路径:
在一个带权图中,顶点V0到图中任意一个顶点Vi的一条路径所经过边上的权值之和,定义为该路径的带权路径长度,把带权路径最短的那条路径称为最短路径。
最短路径
在一个带权图中,顶点V0到图中任意一个顶点Vi的一条路径所经过边上的权值之和,定义为该路径的带权路径长度,把带权路径最短的那条路径称为最短路径
DiskStra算法:
求单源最短路径,即求一个顶点到任意顶点的最短路径,其时间复杂度为O(V*V)。
以上是关于图的主要内容,如果未能解决你的问题,请参考以下文章