"数据结构第六章图"
本章节主要介绍了图的基本概念,包括图的定义、图的存储、图的遍历、图的连通性、最小生成树、单源最短路径、所有对最短路径、拓扑排序、关键路径等内容。
图的基本概念
图是由顶点和边组成的非线性数据结构。图可以分为无向图和有向图两种。无向图的边没有方向,而有向图的边有方向。图的顶点可以用数字、字母或其他符号来表示。
图的存储
图可以用邻接矩阵、邻接表、十字链表等方式存储。邻接矩阵适合稠密图,空间复杂度为O(|V|^2)。邻接表适合稀疏图,空间复杂度为O(|V|+|E|)。十字链表适合存储有向图,空间复杂度为O(|V|+|E|)。
图的遍历
图的遍历可以用深度优先遍历(DFS)和广度优先遍历(BFS)两种方式。深度优先遍历使用栈,时间复杂度为O(|V|+|E|)。广度优先遍历使用队列,时间复杂度为O(|V|+|E|)。
图的连通性
图的连通性可以用深度优先遍历或广度优先遍历来判断。对于无向图,可以使用BFS/DFS遍历来判断连通性。对于有向图,可以使用BFS/DFS遍历来判断强连通性。
最小生成树
最小生成树是指包含图中所有顶点的极小子图。普里姆算法和克鲁斯卡尔算法是两种常用的最小生成树算法。普里姆算法时间复杂度为O(|V|^2),适合稠密图。克鲁斯卡尔算法时间复杂度为O(|E|log2|E|),适合稀疏图。
单源最短路径
单源最短路径是指从一个顶点到其他顶点的最短距离。迪杰斯特拉算法和弗洛伊德算法是两种常用的单源最短路径算法。迪杰斯特拉算法时间复杂度为O(|V|^2),适合无权图和带权图。弗洛伊德算法时间复杂度为O(|V|^3),适合带权图。
所有对最短路径
所有对最短路径是指每对顶点之间的最短距离。弗洛伊德算法可以解决这个问题,时间复杂度为O(|V|^3)。
拓扑排序
拓扑排序是指将有向无环图中的顶点排列成一个线性序列,使得对于每条边(u,v),u在v之前。拓扑排序可以用来解决很多问题,如AOE网中的关键路径问题。
关键路径
关键路径是指AOE网中的最长路径。关键路径可以用来解决项目管理中的问题,如找到项目的关键活动。