当前位置: 首页 > news >正文

数据结构(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ⱼ 之前(即 “先执行前置活动,再执行后继活动”)。

拓扑排序的基本步骤(基于入度)

  1. 初始化一个队列,将所有入度为 0 的顶点(起点活动)入队。
  2. 当队列非空时:
    • 出队一个顶点 V,将其加入拓扑排序序列。
    • 遍历 V 的所有后继顶点 Vⱼ,将 Vⱼ 的入度减 1(表示 “V 已完成,Vⱼ的一个前置条件已满足”)。
    • 若 Vⱼ 的入度减为 0(所有前置活动均完成),将其入队。
  3. 若拓扑排序序列的长度 等于顶点总数,则排序成功(AOV 网无环,活动可按顺序执行);否则排序失败(AOV 网存在环,依赖关系不可实现)。

示例(上述项目 AOV 网的拓扑排序):

  • 可能的排序结果:V₁ → V₂ → V₃ → V₅ → V₄ → V₆ → V₇(或其他满足依赖的顺序,如 V₁→V₃→V₄→V₂→V₅→V₆→V₇)。
  • 排序结果的意义:按此顺序执行活动,可确保所有前置条件均被满足,无冲突。

5、AOV 网的特点与限制

特点:

  1. 依赖关系可视化:将复杂的 “活动先后顺序” 转化为图形,直观清晰,便于分析任务流程。
  2. 无环是前提:只有无环的有向图才能作为 AOV 网,否则无法通过拓扑排序得到合法的执行顺序。
  3. 拓扑排序不唯一:若 AOV 网中存在 “无依赖关系的活动”(如 V₂和 V₃,均依赖 V₁但互不依赖),则它们在拓扑排序中的顺序可互换。

限制:

  1. 无法描述 “活动持续时间”:AOV 网仅关注 “活动的先后顺序”,不记录活动的执行时间(若需结合时间分析 “关键路径”,需使用 AOE 网 ——Activity On Edge Network,边表示活动的网)。
  2. 仅适用于 “有向无环” 场景:若活动间存在循环依赖(如 “先审核后提交,先提交后审核”),则无法构建 AOV 网。
http://www.dtcms.com/a/556822.html

相关文章:

  • 《算法闯关指南:优选算法--前缀和》--29.和为k的子数组,30.和可被k整除的子数组
  • 如何在GitHub仓库中添加MIT开源许可证
  • 在Linux(deepin-community-25)下安装MongoDB
  • WebView 最佳封装模板(BaseWebActivity + WebViewHelper)
  • 珲春市建设局网站中国设计网字体
  • 杭州英文网站建设杭州微信小程序外包
  • 顺序表vector--------练习题3题解
  • 触发器(Trigger):灵活控制窗口行为
  • mysql数据库自动备份_脚本_配置自动运行_windows下
  • Linux : 进程概念
  • 510-Spring AI Alibaba Graph Stream Node 示例
  • 【11408学习记录】考研英语长难句通关:2018真题精析,每日一句攻克阅读难点!​
  • 做网站买那种服务器龙港哪里有做阿里巴巴网站
  • TXT文件去重工具,一键快速去重复
  • ModelEngine vs Dify vs Coze:AI开发平台横评
  • 开封建站公司图片生成链接的网站
  • C++ STL:list|了解list|相关接口|相关操作
  • 【Java后端】配置属性BeanCreateException异常,使用默认值语法添加空串
  • 指针深入第二弹--字符指针、数组指针、函数指针、函数指针数组、转移表的理解加运用
  • 用红黑数封装实现map,set
  • PsTools 学习笔记(7.8):远程连接选项——连接性、超时、会话与安全基线
  • Java Se—异常
  • JSON.stringify() 方法详解
  • DevOps工具链对比,Azure 和 TikLab哪款更好用?
  • 安徽省住房城乡建设厅门户网站深圳百度快速排名优化
  • 一种无需IP核的FPGA RAM初始化方法:基于源码定义与赋值实现
  • openpnp - 坐标系统只有一个
  • 前端新技术解读:WebAssembly、Web Components 与 Tailwind CSS
  • 做a爱片网站做山西杂粮的网站
  • mysql保存二进制数据