考研数据结构之图的应用:最小生成树、最短路径、拓扑排序与关键路径
考研数据结构之图的应用:最小生成树、最短路径、拓扑排序与关键路径
图(Graph)作为数据结构中的核心内容,在实际应用中具有广泛价值。本文将系统讲解图的四大经典应用——最小生成树、最短路径、拓扑排序与关键路径,并探讨有向无环图(DAG)在表达式优化中的作用,结合真题解析帮助读者掌握核心逻辑。
一、最小生成树(Minimum Spanning Tree, MST)
1. 定义与适用场景
- 定义:无向连通图中,选取
n-1
条边连接所有顶点,且总权重最小的生成树。 - 应用场景:
- 网络布线(如电力网、通信网)的最低成本设计。
- 旅行商问题(TSP)的近似解法。
2. 经典算法
- Prim算法:
从任意顶点开始,逐步选择当前距离已选集合最近的顶点,适合稠密图。 - Kruskal算法:
按边权重从小到大依次选择,同时避免环路,适合稀疏图。
二、最短路径(Shortest Path)
1. 单源最短路径(Dijkstra算法)
- 核心思想:贪心策略,维护一个距离数组
dist
,每次选择距离源点最近的顶点进行松弛操作。 - 限制:不能处理负权边。
- 应用:地图导航中的最优路径规划(如高德地图)。
2. 多源最短路径(Floyd算法)
- 核心思想:动态规划,通过三重循环更新所有顶点对的最短路径。
- 优势:可处理负权边(但图中不能有负权环)。
三、拓扑排序(Topological Sort)
1. 定义与适用场景
- 定义:对有向无环图(DAG)的顶点进行线性排序,使得所有边均从排在前面的顶点指向后面的顶点。
- 应用场景:
- 任务调度(如课程学习顺序、软件构建依赖)。
- 代码编译中的依赖关系解析。
2. 算法实现
- Kahn算法:
- 统计所有顶点的入度。
- 将入度为0的顶点加入队列。
- 依次删除队列中的顶点,并更新其邻接点的入度。
四、关键路径(Critical Path)
1. 定义与适用场景
- 定义:在带权有向无环图(AOE网)中,从源点到汇点的最长路径,决定整个工程的最短完成时间。
- 应用场景:
- 项目管理中的进度优化(如建筑施工)。
- 计算机流水线指令调度。
2. 关键活动计算
- 参数:
ve[i]
:顶点i
的最早发生时间。vl[i]
:顶点i
的最晚发生时间。e[j]
:活动j
的最早开始时间。l[j]
:活动j
的最晚开始时间。
- 关键活动:满足
e[j] = l[j]
的活动。
五、有向无环图(DAG)描述表达式
1. 应用场景
- 表达式优化:通过DAG合并公共子表达式,减少计算冗余。
示例:
表达式(a + b) * (a + b)
可表示为:
公共子表达式*/ \+ a/ \ a b
a + b
仅计算一次。
六、真题解析
1. 最小生成树算法选择
题目(2022年真题,):
给定一个稀疏图,应选择Prim算法还是Kruskal算法?
答案:
Kruskal算法更适合稀疏图,因其时间复杂度为O(E log E)
,而Prim算法在稠密图中更高效。
2. 拓扑排序的应用
题目(经典真题,):
一个工程的AOV网如下:
A → B → C ↓ ↓ D → E
写出其拓扑排序序列。
解析:
可能的序列包括A → B → D → C → E
或A → D → B → C → E
,需满足所有边的先后关系。
七、总结
- 最小生成树与最短路径是资源优化的核心工具,需掌握算法选择与实现。
- 拓扑排序与关键路径是解决工程调度问题的关键技术。
- DAG在表达式优化和任务依赖分析中具有重要价值。