基于数据结构的关键路径算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 关键路径的算法思想
我们用有向网络来表示某一工程, 用有向网络的弧来表示某个子工 程( 活 动) , 顶 点 表 示 某 个 事 件 , 弧 上 的 权 来 表 示 子 工 程 或( 活 动) 持 续 的 时间, 这样的有向网络称为 AOE( Activity On Edge) 一网。
由 于 整 个 工 程 只 有 一 个 开 始 点 和 一 个 完 成 点 , 故 在 正 常 情 况( 无 回 路) 下, 网中只有一个入度为零的点( 对称源点) 和一个出度为零的点( 汇 点) 。由 于 AOE 一 网 中 有 一 些 活 动 可 以 并 行 地 进 行 , 所 以 完 成 工 程 的 最 短时间是从开始点到完成点的最长路径的长度( 这里所说的路径长度是 指路径上各活动持续时间之和, 不是路径上弧的数目) 。路径长度最长的 路 径 叫 做 关 键 路 径 , 假 定 开 始 点 是 V1, 从 V1 到 Vi 的 最 长 路 径 长 度 叫 做 事件 Vi 的最早发生时间。这个时间决定了所有以 Vi 为尾的弧表示的活 动 的 最 早 开 始 时 间 , 我 们 用 e( i) 表 示 活 动 ai 的 最 早 开 始 时 间 , 还 可 以 定 义一个活动的最迟开始时间 (l i) , 这是在不推迟整个工程完成的前提下, 活动 ai 最迟必 须 开 始 进 行 的 时 间 。两 者 之 差 (l i) - e( i) 意 味 着 完 成 活 动 ai 的 时 间 余 量 , 我 们 把 (l i) = e( i) 的 活 动 叫 做 关 键 活 动 。显 然 , 关 键 路 径 上所有活动都是关键活动。
本 区 属 典 型 的 大 陆 性 气 候 、半 干 旱 地 区 , 降 水 量 450 mm/a , 蒸 发 量 1 800 mm/a, 年平均气温 5.5 ℃, 最高 34.5 ℃, 最低- 29 ℃, 冻 土 层 深 度 1.5 m 左右。
测区内无特殊地质构造, 探测线区域对应下覆各煤层深度及厚度见 表 1。
摘 要: 介绍了同家梁矿住宅区发生矿震的情况和地质概况, 探讨了瞬变电磁法、高密
度电阻率法的工作原理和程序, 确定了矿震区域的采空层位和采空范围。
关键词: 采煤沉陷; 塌陷勘探; 瞬变电磁法; 高密度电法
中图分类号: P631.2;TD166
文献标识码: A
大同煤矿集团公司同家梁矿住宅区于 2006 年 2 月 15 日 下 午 17:40 至 2 月 16 日 21:50 先 后 发 生 7 次 连 续 明 显 震 动 , 尤 以 2 月 15 日 17:40 分的 震 动 最 为 明 显 。 矿 震 影 响 范 围 长 约 1 600 m、宽 约 400 m, 走 向 为 北 东—南西向, 受震区域内居民总户数 4 289 户, 总人数 15 612 人。其中楼 房住户 2 009 户, 居民 7 680 人 ( 有受损迹象的为 1 308 户, 居民 5 577 人) ; 排房 927 户、居民 3 467 人; 自建房 1 353 户, 居民 4 465 人。通过入 户调查, 个别居民住户出现阳台窗户变形, 楼板缝明显加宽, 墙体有斜裂 缝, 同时在北山地表出现 2 条新裂缝等地质灾害现象。
m~123 m, 累计采厚为 5.5 m, 采深比为 4.5%。7# 层 1957—1962 年开采,
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for( j=0;j<G.vexnum;++j) //求 ee, el 和关键活动
亦是多方面的, 任何一项活动持续时间的改变都会影响关键路径的改
K=p- >adjvex; dut=*( p- >info) ; ∥dut<j, k> If( v[i k] - dut<v[l j] ) v[l j] =v[l k] - dut; } //for
科技情报开发与经济
SCI- TECH INFORMATION DEVELOPMENT & ECONOMY
表 1 探区内各煤层深度及厚度 ( m)
煤层编号
煤层厚度
煤层埋深
4#
0.58
40.99
7#
1.2
83.19
Βιβλιοθήκη Baidu
8#
1.4
94.59
11#
4.55
145.74
12#
0.85
170.09
14#
1.2
193.89
测区东侧为同家梁矿东部 盘 区 , 7#, 8#, 11# 三 层 采 空 , 开 采 深 度 为 48
K=p- >adjvex; //对 j 号顶点的每个邻接点的入度减 1 If( - - indegree[ k] ==0) push( S, k) ; //若入度减为 0, 则入栈 If( ve[ j] +*( p- >info) >ve[ k] ) ve[ k] =ve[ j] +*( p- >info) ; } //for *( p- >info) =du(t <j, k>) } //wjile if( count<G.vexnum) return ERROR; //该有向网络有回路 else return OK; } //Topologicalorder 在以上算法基础上输出有向网络 G 各项关键活动。 Status Criticalpath( ALGraphG) { //G 为有向网, 输出 G 的各项关键活动。 If( !Topologicalorder( G, T) ) trturn ERROR; V1[ 0..G.vexnum- 1] =ve[ 0..g.vexnum- 1] ;//初 始 化 顶 点 事 件 的 最 迟 发 生时间 While( !StackEmpty( T) ) //按拓扑逆序求各项点的 v1 值 For( Pop( T, j) , p=G.vertices[ j] .firstarc; p; p=p- >nextarc) {
下面先给出求各顶点事件的最早发生时间 ve( 全局变量) 。
3 算法( 有向网 G 采用邻接表存储结构)
status topologicalorder( ALGraph G, Stack &T){ //有向网 G 采用邻接表存储结构, 求各 顶 点 事 件 的 最 早 发 生 时 间 ve ( 全局变量) 。 //T 为拓扑序列顶点栈, S 为零入度顶点栈。 //若 无 G 回 路 , 则 用 栈 T 返 回 G 的 一 个 拓 扑 序 列 , 且 函 数 值 为 OK, 否则为 ERROR。 FindInDegree( G, indegree) ;//对各顶点求入度 indegree[ 0..vernum- 1] 建零入度顶点栈 S; InitStack( T) ; count=0; ve[ 0..g.vexnum- 1] =0;//初始化 While( !StackEmpty( S) ) Pop( s, j) ; push( T, j) ; ++count; //j 号顶点入 T 栈并计数 For( p=G.vertices[ j] .firstarc; p; p=p- >nextarc){
只要求得 AOE 一网中活动的 e( i) 和 (l i) , 就能够知道该项活动是否 为关键活动。首先求得事件最早发生时间 ve( j) 和最迟发生时间 v(l j) 。如 果活动 ai 由弧<j, k>表示, 其持续时间记为 du(t <j, k>) , 则有如下关系:
e( i) =ve( j) (l i) =v(l k) - du(t <j, k>) 求 ve( j) 和 v(l j) 需分两步进行: 第一步, 从 ve( 0) =0 开始向前递推 ve( j) =max{ ve( i) +du(t <I, j>) } <I, j>∈T, j=1, 2, ……, n- 1 其中, T 是所有以第 j 个顶点为头的弧的集合。 第二步, 从 v(l n- 1) =ve( n- 1) 起向后递推 v(l i) =min{ v(l j) - du(t <I, j>) } <I, j>∈S, i=n- 2, ……, 0
166
其中, S 是所有以第 i 个顶点为尾的弧的集合。
2 关键路径的算法
通过以上分析可知, 求关键路径的重点是找到某个活动的最早开始 时 间 e( i) 和 最 迟 开 始 时 间 (l i) , 而 e( i) 和 (l i) 又 与 事 件 的 最 早 发 生 时 间 ve( j) 和 最 迟 发 生 时 间 v(l j) 有 关 。虽 然 我 们 给 出 了 两 个 递 推 公 式 来 求 ve ( j) 和 v(l j) , 但计算必须分别在 拓 扑 有 序 的 前 提 下 进 行 。也 就 是 说 , ve( j- 1) 必 须 在 vj 的 所 有 前 驱 的 最 早 发 生 时 间 求 得 之 后 才 能 确 定 。因 此 , 可 以 在拓扑排序的基础上计算 ve( j- 1) 和 v(l j- 1) 。
摘 要: 数据结构是计算机学科的算法理论基础和软件设计的技术基础, 在计算机领
域中有着举足轻重的作用。利用邻接矩阵表的存储结构, 实现了在计算机上求关键路
径的算法, 并分析了所设计算法的时间复杂度。
关键词: 数据结构; 关键路径; 算法
中图分类号: TP274
文献标识码: A
数据结构主要研究数据之间的逻辑关系, 算法与数据结构的关系 密切。N·Wirth 教授提出了一个著名公式: 算 法+数 据 结 构=程 序 , 此 公 式 说明一个程序是由两部分组成, 一部分是关于数据结构的描述, 包括数 据的逻辑结构和物理结构, 另一部分是关于算法的描述。在计算机领域, 算法实质上是针对所处理问题的需求在数据结构的基础上实施的某一 运 算 。由 于 数 据 结 构 的 逻 辑 结 构 和 存 储 结 构 不 唯 一 , 因 此 处 理 同 一 个 问 题 的 算 法 也 随 结 构 的 不 同 而 不 同 。在 实 际 的 生 活 中 我 们 常 用 一 个 有 向 的 无回路的网络图来描述一项工程或系统的进行过程, 几乎所有的工程可 分 为 若 干 称 为 活 动 的 子 工 程 。在 这 些 子 工 程 之 间 , 通 常 有 一 定 的 次 序 关 系, 如某些子工程必须在另一些子工程完成之后才能开始, 对于整个工 程来说, 人们最关心是该项工程是否能顺利进行和完成整个工程所需的 最 短 时 间( 关 键 路 径) 。现 在 本 文 就 采 用 邻 接 表 的 存 储 结 构 , 求 出 整 个 工 程完成所需的最短时间。
科技情报开发与经济
SCI- TECH INFORMATION DEVELOPMENT & ECONOMY
2007 年 第 17 卷 第 8 期
文章编号: 1005- 6033( 2007) 08- 0166- 02
收稿日期: 2006- 11- 01
基于数据结构的关键路径算法
赵小会
( 晋城职业技术学院图书馆, 山西晋城, 048026)
1 地质概况
同家梁井田位于大同煤田东部, 口泉河中下游, 地跨大同市南郊。沿 口泉河有至西部王村矿的矿区公路、铁路通过, 探测区有简易公路, 交通 较 为 便 利 。测 区 位 于 同 家 梁 矿 所 在 的 口 泉 河 及 居 民 住 宅 、公 路 、铁 路 保 护 煤柱内, 其四周均已采空。测区为冲洪积地貌, 地表被砂卵石和黄土所覆 盖, 冻土层较厚, 地势较为平坦。
2007 年 第 17 卷 第 8 期
文章编号: 1005- 6033( 2007) 08- 0167- 03
收稿日期: 2006- 10- 31
物探方法在采煤沉陷探测中的应用
周建国 1, 2
( 1.中国矿业大学, 江苏徐州, 221008; 2.大同煤矿集团公司地质处, 山西大同, 037003)
for( p=G.vertices[ j] ;p;p=p- >nextarc){
变。由此可见, 关键活动的速度提高是有限度的。只有在不改变网的关键
k=p- >adjvex; dut=*( p- >info) ;
我们用有向网络来表示某一工程, 用有向网络的弧来表示某个子工 程( 活 动) , 顶 点 表 示 某 个 事 件 , 弧 上 的 权 来 表 示 子 工 程 或( 活 动) 持 续 的 时间, 这样的有向网络称为 AOE( Activity On Edge) 一网。
由 于 整 个 工 程 只 有 一 个 开 始 点 和 一 个 完 成 点 , 故 在 正 常 情 况( 无 回 路) 下, 网中只有一个入度为零的点( 对称源点) 和一个出度为零的点( 汇 点) 。由 于 AOE 一 网 中 有 一 些 活 动 可 以 并 行 地 进 行 , 所 以 完 成 工 程 的 最 短时间是从开始点到完成点的最长路径的长度( 这里所说的路径长度是 指路径上各活动持续时间之和, 不是路径上弧的数目) 。路径长度最长的 路 径 叫 做 关 键 路 径 , 假 定 开 始 点 是 V1, 从 V1 到 Vi 的 最 长 路 径 长 度 叫 做 事件 Vi 的最早发生时间。这个时间决定了所有以 Vi 为尾的弧表示的活 动 的 最 早 开 始 时 间 , 我 们 用 e( i) 表 示 活 动 ai 的 最 早 开 始 时 间 , 还 可 以 定 义一个活动的最迟开始时间 (l i) , 这是在不推迟整个工程完成的前提下, 活动 ai 最迟必 须 开 始 进 行 的 时 间 。两 者 之 差 (l i) - e( i) 意 味 着 完 成 活 动 ai 的 时 间 余 量 , 我 们 把 (l i) = e( i) 的 活 动 叫 做 关 键 活 动 。显 然 , 关 键 路 径 上所有活动都是关键活动。
本 区 属 典 型 的 大 陆 性 气 候 、半 干 旱 地 区 , 降 水 量 450 mm/a , 蒸 发 量 1 800 mm/a, 年平均气温 5.5 ℃, 最高 34.5 ℃, 最低- 29 ℃, 冻 土 层 深 度 1.5 m 左右。
测区内无特殊地质构造, 探测线区域对应下覆各煤层深度及厚度见 表 1。
摘 要: 介绍了同家梁矿住宅区发生矿震的情况和地质概况, 探讨了瞬变电磁法、高密
度电阻率法的工作原理和程序, 确定了矿震区域的采空层位和采空范围。
关键词: 采煤沉陷; 塌陷勘探; 瞬变电磁法; 高密度电法
中图分类号: P631.2;TD166
文献标识码: A
大同煤矿集团公司同家梁矿住宅区于 2006 年 2 月 15 日 下 午 17:40 至 2 月 16 日 21:50 先 后 发 生 7 次 连 续 明 显 震 动 , 尤 以 2 月 15 日 17:40 分的 震 动 最 为 明 显 。 矿 震 影 响 范 围 长 约 1 600 m、宽 约 400 m, 走 向 为 北 东—南西向, 受震区域内居民总户数 4 289 户, 总人数 15 612 人。其中楼 房住户 2 009 户, 居民 7 680 人 ( 有受损迹象的为 1 308 户, 居民 5 577 人) ; 排房 927 户、居民 3 467 人; 自建房 1 353 户, 居民 4 465 人。通过入 户调查, 个别居民住户出现阳台窗户变形, 楼板缝明显加宽, 墙体有斜裂 缝, 同时在北山地表出现 2 条新裂缝等地质灾害现象。
m~123 m, 累计采厚为 5.5 m, 采深比为 4.5%。7# 层 1957—1962 年开采,
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for( j=0;j<G.vexnum;++j) //求 ee, el 和关键活动
亦是多方面的, 任何一项活动持续时间的改变都会影响关键路径的改
K=p- >adjvex; dut=*( p- >info) ; ∥dut<j, k> If( v[i k] - dut<v[l j] ) v[l j] =v[l k] - dut; } //for
科技情报开发与经济
SCI- TECH INFORMATION DEVELOPMENT & ECONOMY
表 1 探区内各煤层深度及厚度 ( m)
煤层编号
煤层厚度
煤层埋深
4#
0.58
40.99
7#
1.2
83.19
Βιβλιοθήκη Baidu
8#
1.4
94.59
11#
4.55
145.74
12#
0.85
170.09
14#
1.2
193.89
测区东侧为同家梁矿东部 盘 区 , 7#, 8#, 11# 三 层 采 空 , 开 采 深 度 为 48
K=p- >adjvex; //对 j 号顶点的每个邻接点的入度减 1 If( - - indegree[ k] ==0) push( S, k) ; //若入度减为 0, 则入栈 If( ve[ j] +*( p- >info) >ve[ k] ) ve[ k] =ve[ j] +*( p- >info) ; } //for *( p- >info) =du(t <j, k>) } //wjile if( count<G.vexnum) return ERROR; //该有向网络有回路 else return OK; } //Topologicalorder 在以上算法基础上输出有向网络 G 各项关键活动。 Status Criticalpath( ALGraphG) { //G 为有向网, 输出 G 的各项关键活动。 If( !Topologicalorder( G, T) ) trturn ERROR; V1[ 0..G.vexnum- 1] =ve[ 0..g.vexnum- 1] ;//初 始 化 顶 点 事 件 的 最 迟 发 生时间 While( !StackEmpty( T) ) //按拓扑逆序求各项点的 v1 值 For( Pop( T, j) , p=G.vertices[ j] .firstarc; p; p=p- >nextarc) {
下面先给出求各顶点事件的最早发生时间 ve( 全局变量) 。
3 算法( 有向网 G 采用邻接表存储结构)
status topologicalorder( ALGraph G, Stack &T){ //有向网 G 采用邻接表存储结构, 求各 顶 点 事 件 的 最 早 发 生 时 间 ve ( 全局变量) 。 //T 为拓扑序列顶点栈, S 为零入度顶点栈。 //若 无 G 回 路 , 则 用 栈 T 返 回 G 的 一 个 拓 扑 序 列 , 且 函 数 值 为 OK, 否则为 ERROR。 FindInDegree( G, indegree) ;//对各顶点求入度 indegree[ 0..vernum- 1] 建零入度顶点栈 S; InitStack( T) ; count=0; ve[ 0..g.vexnum- 1] =0;//初始化 While( !StackEmpty( S) ) Pop( s, j) ; push( T, j) ; ++count; //j 号顶点入 T 栈并计数 For( p=G.vertices[ j] .firstarc; p; p=p- >nextarc){
只要求得 AOE 一网中活动的 e( i) 和 (l i) , 就能够知道该项活动是否 为关键活动。首先求得事件最早发生时间 ve( j) 和最迟发生时间 v(l j) 。如 果活动 ai 由弧<j, k>表示, 其持续时间记为 du(t <j, k>) , 则有如下关系:
e( i) =ve( j) (l i) =v(l k) - du(t <j, k>) 求 ve( j) 和 v(l j) 需分两步进行: 第一步, 从 ve( 0) =0 开始向前递推 ve( j) =max{ ve( i) +du(t <I, j>) } <I, j>∈T, j=1, 2, ……, n- 1 其中, T 是所有以第 j 个顶点为头的弧的集合。 第二步, 从 v(l n- 1) =ve( n- 1) 起向后递推 v(l i) =min{ v(l j) - du(t <I, j>) } <I, j>∈S, i=n- 2, ……, 0
166
其中, S 是所有以第 i 个顶点为尾的弧的集合。
2 关键路径的算法
通过以上分析可知, 求关键路径的重点是找到某个活动的最早开始 时 间 e( i) 和 最 迟 开 始 时 间 (l i) , 而 e( i) 和 (l i) 又 与 事 件 的 最 早 发 生 时 间 ve( j) 和 最 迟 发 生 时 间 v(l j) 有 关 。虽 然 我 们 给 出 了 两 个 递 推 公 式 来 求 ve ( j) 和 v(l j) , 但计算必须分别在 拓 扑 有 序 的 前 提 下 进 行 。也 就 是 说 , ve( j- 1) 必 须 在 vj 的 所 有 前 驱 的 最 早 发 生 时 间 求 得 之 后 才 能 确 定 。因 此 , 可 以 在拓扑排序的基础上计算 ve( j- 1) 和 v(l j- 1) 。
摘 要: 数据结构是计算机学科的算法理论基础和软件设计的技术基础, 在计算机领
域中有着举足轻重的作用。利用邻接矩阵表的存储结构, 实现了在计算机上求关键路
径的算法, 并分析了所设计算法的时间复杂度。
关键词: 数据结构; 关键路径; 算法
中图分类号: TP274
文献标识码: A
数据结构主要研究数据之间的逻辑关系, 算法与数据结构的关系 密切。N·Wirth 教授提出了一个著名公式: 算 法+数 据 结 构=程 序 , 此 公 式 说明一个程序是由两部分组成, 一部分是关于数据结构的描述, 包括数 据的逻辑结构和物理结构, 另一部分是关于算法的描述。在计算机领域, 算法实质上是针对所处理问题的需求在数据结构的基础上实施的某一 运 算 。由 于 数 据 结 构 的 逻 辑 结 构 和 存 储 结 构 不 唯 一 , 因 此 处 理 同 一 个 问 题 的 算 法 也 随 结 构 的 不 同 而 不 同 。在 实 际 的 生 活 中 我 们 常 用 一 个 有 向 的 无回路的网络图来描述一项工程或系统的进行过程, 几乎所有的工程可 分 为 若 干 称 为 活 动 的 子 工 程 。在 这 些 子 工 程 之 间 , 通 常 有 一 定 的 次 序 关 系, 如某些子工程必须在另一些子工程完成之后才能开始, 对于整个工 程来说, 人们最关心是该项工程是否能顺利进行和完成整个工程所需的 最 短 时 间( 关 键 路 径) 。现 在 本 文 就 采 用 邻 接 表 的 存 储 结 构 , 求 出 整 个 工 程完成所需的最短时间。
科技情报开发与经济
SCI- TECH INFORMATION DEVELOPMENT & ECONOMY
2007 年 第 17 卷 第 8 期
文章编号: 1005- 6033( 2007) 08- 0166- 02
收稿日期: 2006- 11- 01
基于数据结构的关键路径算法
赵小会
( 晋城职业技术学院图书馆, 山西晋城, 048026)
1 地质概况
同家梁井田位于大同煤田东部, 口泉河中下游, 地跨大同市南郊。沿 口泉河有至西部王村矿的矿区公路、铁路通过, 探测区有简易公路, 交通 较 为 便 利 。测 区 位 于 同 家 梁 矿 所 在 的 口 泉 河 及 居 民 住 宅 、公 路 、铁 路 保 护 煤柱内, 其四周均已采空。测区为冲洪积地貌, 地表被砂卵石和黄土所覆 盖, 冻土层较厚, 地势较为平坦。
2007 年 第 17 卷 第 8 期
文章编号: 1005- 6033( 2007) 08- 0167- 03
收稿日期: 2006- 10- 31
物探方法在采煤沉陷探测中的应用
周建国 1, 2
( 1.中国矿业大学, 江苏徐州, 221008; 2.大同煤矿集团公司地质处, 山西大同, 037003)
for( p=G.vertices[ j] ;p;p=p- >nextarc){
变。由此可见, 关键活动的速度提高是有限度的。只有在不改变网的关键
k=p- >adjvex; dut=*( p- >info) ;