数据结构——图——知识点总结
来源:互联网 发布:desmume关闭软件复位 编辑:程序博客网 时间:2024/06/06 01:06
数据结构——图
图(GRAPH)的定义:是一种非线性数据结构,由有穷、非空的点集V(G)和边集E(G)组成。当G中的每条边有方向时,称G为有向图,有向边(用一对尖括号<a,b>)又称为弧,起始顶点被称为弧尾,终止顶点被称为弧头,每条边无方向时(用一对括号表示(a,b)和(b,a)一样),被称为无向图。
图中顶点和边的关系:
有向图:顶点n和边数e,满足0<=e<=n(n-1),若e = n(n-1),称为完全有向图:每个顶点之间都有两条互为相反的边的无向图;
无向图:顶点n和边数e,满足0<=e<=n(n-1)/2,若e = n(n-1)/2,称为完全无向图:每个顶点之间都有一条边的无向图;
若图中e < n lbn 称该图为稀疏图,否则为稠密图;
图的存储方式:由于图的结构较为复杂,任意两个顶点之间都可能存在联系,因此无法用数据元素在存储区中的物理位置来表示元素之间的关系,但是我们可以借助一个二维数组中的各单元的数据取值或者多重链表来表示元素之间的关系
1:邻接矩阵
使用一个矩阵来表示各顶点之间的关系,A[i,j] = {0或1},表示顶点i到顶点j的连通性,有向图时为其权值,这样我们就可以使用一个二维数组加以表示
对于网络,邻接矩阵中,直接相邻两点为有权值Wij,与自身关系为0,不直接相连的两点为无穷大:
度的概念:
度:与特定顶点Vi相连接的边数D(Vi);
出度、入度:对于有向图的概念,出度表示此顶点为起点的边的数目OD(Vi),入度表示此顶点为终点的边的数目ID(Vi);对于有向图,顶点的度是入度与出度之和;
权的概念:在一个图中,如果图的边具有一个与它相关的数,这个数就被称为该边的权,如果图中的每条边都具有权,这个带权图就被称为网络,简称网
路径概念:从一个顶点到另一定点的次序,被称为路径,对于无权图,沿路径所经过的边数被称为该路径的长度;对于有权图(网络),取沿路径各边的权之和作为此路径的长度;若路径中的顶点不重复出现,该路径为简单路径;起点和终点相同且长度不小于2的简单路径被称为简单回路或者简单环;
关于图的连通性:
对于有向图,若存在一个顶点V,从该顶点有路径达到该图中其他的所有顶点时,称该有向图为有根图,V称为该图的根。若有向图中,不相同顶点V到U和U到V都存在路径,称V和U是强连通的,若图中任意两个顶点都是强连通的,成该图为强连通图;
对于无向图,若两个顶点V和顶点U有路径相通,则称V和U是连通的。若图中任意两个顶点都连通,则称G为连通图,否则为非连通图。无向图的连通分量就是其自身,非连通图有多个连通分量;
生成树:
图论中,树是一个无回路存在的连通图,而一个连通图G的生成图为:一个包含了G所有顶点的树,n个顶点,n-1条边,并且保证n个顶点相互连通(不存在环);
最小生成树:
当使用一个连通网罗来构造生成树时,可以得到一个带权的生成树,把生成树各边的权值总和作为生成树的权,具有最小权值的生成树构成连通网络的最小生成树,构造最小生成树的两种常用算法:Prim算法和Kruskal算法;
最小生成树的MST性质:假设G=(V,G)是一个连通网络,U是V的一个真子集,若存在顶点u属于U和顶点v属于V-U的边(u,v)是一条具有最小权值的边,则必存在G的一颗最小生成树包括这条边(u,v)
图的遍历:使用辅助数组 visit[N] 表示顶点是否被遍历过,若已经被访问置1,未被访问置0
DFS:深度优先搜索:
从图中某一顶点出发,访问后标记visit[i]为1,然后依次搜索第i个结点的领接点j,再依次搜索j结点的每个领接点,直到所有结点都被遍历
BFS:广度优先搜索
先被访问的结点,其领接点也先被访问,具有先进先出的特性,我们使用队列来保存已经访问过的结点,以确定被访问过结点的顶点领接点访问次序。
生成树与最小生成树
树是一个无回路存在的连通图,而一个连通图G的生成树是指:一个包含了G的所有顶点的树。对于一个有n个顶点的连通图G,其生成树包含了n-1条边,从而生成树是G的一个极小连通的子图。使用DFS遍历搜索得到的树为DFS树,使用BFS遍历搜索得到的树为BFS树。
因为搜索算法选取的起始顶点不同,所以一个连通图的生成树不是唯一的,它取决于遍历方法和起始顶点的选择。
对于带权值的连通图,我们可以得到一个带权的生成树,我们将该生成树的各边的权值作为生成树的权,具有最小权值的生成树构成了连通网络的最小生成树
常用的最小生成树的算法有Prim算法和Krusal算法
最短路径问题:沿路径的各边权值之和最小。主要有两种算法:
Dijkstra算法:单源最短路径:求图中某个顶点到其他各顶点的最短路径
Floyd算法:各顶点间最短路径:每对顶点之间的最短路径
- 数据结构——图——知识点总结
- 数据结构——树——知识点总结
- 数据结构——线性表——知识点总结
- 数据结构-图-知识点总结
- 数据结构知识点复习——线性表
- 数据结构——队列常考知识点
- 数据结构——待巩固的知识点
- 数据结构——线性表——散列存储结构——哈希表知识点总结
- 【数据结构——链表】链表00——链表知识点总结
- 【数据结构——树】二叉树面试相关知识点总结(一)
- 【数据结构——树】二叉树面试相关知识点总结(二)
- PMP知识点总结—控制图
- PMP知识点总结—配置管理
- Oracle知识点总结—约束
- 数据结构—排序总结
- 数据结构总结—林莉
- 数据结构—期末总结
- 数据结构学习总结——数据结构概述
- C++的const和IO类
- 解决SQL Server 2008提示评估期已过
- ubuntu下安装cmake以及cmake的简单使用
- 下面是stackoverflow中关于数组方法的相关问题中,获得最多票数的12个数组操作方法。
- 只属于你我的共同记忆
- 数据结构——图——知识点总结
- docker 进入容器
- ACM 计算几何知识点总结
- 17.原子变量 CAS算法
- myeclipse优化
- easy_install安装python的MySQLdb模块
- oracle基础二
- caffe:如何保存训练日志?
- ssh框架整合时的一点异常总结