数据结构(15)
目录
有向无环图及其应用
一、AOV网
1、核心定义
2、AOV 网的关键概念(与顶点相关)
3、AOV 网的示例(项目开发流程)
4、AOV 网的核心应用:拓扑排序
5、AOV 网的特点与限制
有向无环图及其应用
一、AOV网
概括:用顶点表示活动的网络
AOV 网(Activity On Vertex Network,顶点表示活动的网)是一种有向无环图(DAG),专门用于描述 “活动与活动之间的先后依赖关系”—— 图中的顶点代表具体活动,有向边代表活动的先后顺序(如边 <A,B> 表示 “必须完成活动 A,才能开始活动 B”)。它是解决 “任务调度”“工序安排” 等依赖问题的核心模型,也是拓扑排序的基础。
1、核心定义
AOV 网本质是 “用顶点承载活动、用边承载依赖” 的有向无环图,需满足两个关键条件:
(1)顶点(Vertex):每个顶点对应一个具体的 “活动”(如项目中的 “需求分析”“代码开发”、生产中的 “零件加工”“组装”)。
(2)有向边(Directed Edge):若存在边 <Vᵢ, Vⱼ>,则表示 “活动 Vᵢ 是活动 Vⱼ 的前置条件”—— 必须先完成 Vᵢ,才能开始 Vⱼ(Vᵢ 称为 Vⱼ 的 “前驱活动”,Vⱼ 称为 Vᵢ 的 “后继活动”)。
(3)无环性(Acyclic):AOV 网必须是无环图。若存在环(如 V₁→V₂→V₃→V₁),则意味着 “活动间存在循环依赖”(完成 V₁需先完成 V₂,完成 V₂需先完成 V₃,完成 V₃需先完成 V₁),这种依赖关系无法实现,因此环是 AOV 网的 “非法结构”。
2、AOV 网的关键概念(与顶点相关)
为量化活动的依赖状态,AOV 网引入 “入度” 和 “出度” 两个核心概念,用于后续的拓扑排序
(1)入度(In-degree):一个顶点(活动)的入度,是指指向该顶点的边的数量 —— 对应 “该活动的前置活动总数”。
示例:若活动 B 的前驱是 A 和 C(边 <A,B>、<C,B>),则 B 的入度为 2。
特殊情况:入度为 0 的顶点(无前置活动),是整个任务的 “起点活动”(可直接开始)。
(2)出度(Out-degree):一个顶点(活动)的出度,是指从该顶点出发的边的数量 —— 对应 “依赖该活动的后继活动总数”。
示例:若活动 A 的后继是 B 和 D(边 <A,B>、<A,D>),则 A 的出度为 2。
特殊情况:出度为 0 的顶点(无后继活动),是整个任务的 “终点活动”(完成后无后续任务)。
3、AOV 网的示例(项目开发流程)
以 “软件项目开发” 为例,AOV 网的结构如下:
- 顶点(活动):需求分析(V₁)、UI 设计(V₂)、数据库设计(V₃)、后端开发(V₄)、前端开发(V₅)、测试(V₆)、上线(V₇)。
- 有向边(依赖关系):<V₁, V₂>(需求分析后才能 UI 设计)、<V₁, V₃>(需求分析后才能数据库设计)、<V₂, V₅>(UI 设计后才能前端开发)、<V₃, V₄>(数据库设计后才能后端开发)、<V₄, V₆>(后端开发后才能测试)、<V₅, V₆>(前端开发后才能测试)、<V₆, V₇>(测试后才能上线)。
对应的 AOV 网结构:
V₁ → V₂ → V₅ → V₆ → V₇↓
V₁ → V₃ → V₄ → V₆
- 入度为 0 的顶点:V₁(项目起点,无前置活动)。
- 出度为 0 的顶点:V₇(项目终点,无后继活动)。
- 无环性:所有边均指向 “后续活动”,无循环依赖,符合 AOV 网要求。
4、AOV 网的核心应用:拓扑排序
AOV 网的核心价值是通过 “拓扑排序”,将活动按依赖关系转化为 “可执行的线性顺序”—— 拓扑排序是对 AOV 网顶点的一种排序,使得对于任意边 <Vᵢ, Vⱼ>,排序中 Vᵢ 一定在 Vⱼ 之前(即 “先执行前置活动,再执行后继活动”)。
拓扑排序的基本步骤(基于入度):
- 初始化一个队列,将所有入度为 0 的顶点(起点活动)入队。
- 当队列非空时:
- 出队一个顶点 V,将其加入拓扑排序序列。
- 遍历 V 的所有后继顶点 Vⱼ,将 Vⱼ 的入度减 1(表示 “V 已完成,Vⱼ的一个前置条件已满足”)。
- 若 Vⱼ 的入度减为 0(所有前置活动均完成),将其入队。
- 若拓扑排序序列的长度 等于顶点总数,则排序成功(AOV 网无环,活动可按顺序执行);否则排序失败(AOV 网存在环,依赖关系不可实现)。
示例(上述项目 AOV 网的拓扑排序):
- 可能的排序结果:V₁ → V₂ → V₃ → V₅ → V₄ → V₆ → V₇(或其他满足依赖的顺序,如 V₁→V₃→V₄→V₂→V₅→V₆→V₇)。
- 排序结果的意义:按此顺序执行活动,可确保所有前置条件均被满足,无冲突。
5、AOV 网的特点与限制
特点:
- 依赖关系可视化:将复杂的 “活动先后顺序” 转化为图形,直观清晰,便于分析任务流程。
- 无环是前提:只有无环的有向图才能作为 AOV 网,否则无法通过拓扑排序得到合法的执行顺序。
- 拓扑排序不唯一:若 AOV 网中存在 “无依赖关系的活动”(如 V₂和 V₃,均依赖 V₁但互不依赖),则它们在拓扑排序中的顺序可互换。
限制:
- 无法描述 “活动持续时间”:AOV 网仅关注 “活动的先后顺序”,不记录活动的执行时间(若需结合时间分析 “关键路径”,需使用 AOE 网 ——Activity On Edge Network,边表示活动的网)。
- 仅适用于 “有向无环” 场景:若活动间存在循环依赖(如 “先审核后提交,先提交后审核”),则无法构建 AOV 网。
