<数据结构>关键路径】的更多相关文章

目录 AOV网和AOE网 AOV网 AOE网 定义 与AOV网的转化 AOE网中着重解决的两个问题 1.最长路径问题 2.关键活动问题 总结 最长路径 无正环的图 有向无环图的最短路径 其他情况 关键路径算法:确定关键活动,求出工程最短时间 前置定义 ve数组求解 数学分析 代码实现:拓扑排序 vl数组求解 数学分析 代码实现:逆拓扑排序 关键路径算法实现 基本步骤 主体代码 几个注意点 AOV网和AOE网 AOV网 顶点活动网络(Activity On Vertex, AOV):用顶点表示活动…
上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的,但是工期不是最优的.因为拓扑序列是一个串行序列,如果按照该序列执行项目,那么就是串行执行的.我们知道在一个项目中的一些子工程是可以并行来完成的,这也就类似我们的多线程.今天我们要解决的问题就是找出一个关键路径,是工期最优并保证工程的完成.什么是关键路径,我们在下方会进行详细介绍. 一.关键路径概述 在聊关键路…
这是我们学校做的数据结构课设,要求分别输出关键路径,我查遍资料java版的只能找到关键路径,但是无法分别输出关键路径 c++有可以分别输出的,所以在明白思想后自己写了一个java版的 函数带有输入函数也有已经存进去的图 如上图关键路径被分别输出(采用了DFS算法): 例:AOE 图如下: 算法设计如下: 1. 首先,要求关键路径,要先要先写拓扑排序,如果图中有环,就无法进行关键路径的求解,直接跳出. 拓扑排序:利用栈stack,先将入度为0事件节点的加入栈中,然后编历后面的活动节点,每次给活动节…
上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的,但是工期不是最优的.因为拓扑序列是一个串行序列,如果按照该序列执行项目,那么就是串行执行的.我们知道在一个项目中的一些子工程是可以并行来完成的,这也就类似我们的多线程.今天我们要解决的问题就是找出一个关键路径,是工期最优并保证工程的完成.什么是关键路径,我们在下方会进行详细介绍. 一.关键路径概述 在聊关键路…
题目如下图: 注:将123456当成abcdef. 事件最早发生事件求法:找从原点到该事件的最长路径(从前往后推) 对a:Ve=0 对b:Ve=max{ 2 , 15+4 }=19 对c:Ve=15 对d:Ve=19+10=29 对e:   Ve=max{ 19+19,15=17 }=38        对f:Ve=38+5=43 事件最晚发生时间求法:找从终点到该事件的最长路径,再做减法(从后往前推)   对f:Vl=43 对e:   Vl=43-5=38 对d:Vl=43-4=39 对c:V…
Problem Description 一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图.     AOE(Activity On Edge)网:顾名思义,用边表示活动的网,当然它也是DAG.与AOV不同,活动都表示在了边上,如下图所示:                                           如上所示,共有11项活动(11条边),9个事件(9个顶点).整个工程只有一个开始点和一个完成点.即只有一个入度为零的点(源点)和只有一个…
// exam1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <stack> using namespace std; #define MAXVEX 20 typedef struct ArcNode { int adjvex; int weight; struct ArcNode* nextarc; }ArcNode; typedef struct HeadN…
题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2498.html 题目大意 略. 分析 注意!!!,此题只有一个源点,但有多个汇点. 这题本质上是求源点到汇点字典序的带权最长路,从前往后求比较麻烦,我们可以考虑从后往前求,求每个节点到某个汇点的最长距离和字典序最小的后继节点. 为此可先求拓扑序列,然后从后往前遍历拓扑序列,并进行松弛操作(同时也可以解决多汇点问题,SPFA则不行).…
图一.概念.图: 是一种复杂的非线性数据结构.图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为:G=(V, E)  其中: V 是顶点的有穷非空集合,E 是 V 中顶点偶对(称为边)的有穷集. 通常,也将图 G 的顶点集和边集分别记为 V(G) 和 E(G) . E(G) 可以是空集.若 E(G) 为空,则图 G 只有顶点而没有边. 有向图: 若图 G 中的每条边都是有方向的,则称 G 为有向图 (Digraph) .无向图: 若图 G 中的每条边都是没有方向的,则称 G 为无向图…
图的实现是一件很麻烦的事情,很多同学可能在学数据结构时只是理解了图的基本操作和遍历原理,但并没有动手实践过.在此,我说说我的实现过程. 首先,在草稿纸上画一个图表,这里是有向图,无向图也一样,如下: 我用的是vector+vector容器作为存储结构,如下:vector+vector)                                                  |0|——|1|——|3|                                            …
工作中总能遇到 一些 奇葩的需求,提出这些奇葩需求的人,多半也是奇葩的人,要么不懂相关的计算机软件知识,要么就是瞎扯蛋,异想天开,然而这些奇葩的需求,我也总能碰到.言规正传,在一次项目中,使用了 MindFusion 这个组件,在 Winform  窗体中画一些工序(生产中的工艺流程)节点,然后在工序节点间建立有向箭头连线,以此来表示工序的顺序,并行关系.因为有很多工序,每个工序都有一个持续时间,来表示该工序要多少时间才能完成,以天为单位,为了明确整个工序的工期,我们组的领导,想到用项目管理中的…
第1章  绪论       文档中源码及测试数据存放目录:数据结构\▲课本算法实现\▲01 绪论  概述        第一章作为绪论,主要介绍了数据结构与算法中的一些基本概念和术语.对于这些概念术语,我个人不推崇死记硬背,记住了当然好,记不住也没关系,但是一定要做到完全理解.就算嘴上说不出来,心里也一定要明白这个过程的含义. 数据结构        数据(data)是对客观事物的符号表示.在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称.        数据元素(data…
作者:lalalouye(20172329王文彬) 2018-2019年大二Java程序设计与数据结构课程总目录:第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 第九周 实验一 实验二 实验三 Java哈夫曼编码实验 20172329 2018-2019<Java程序设计与数据结构>课程总结 又过了一个学期的Java课程的学习,数据结构的了解也随着这学期的学习逐渐变得深入,自己的编码水平也得到了一些提升,虽然这学习在学习Java的过程中发生了一些意外,发现自己在学习一些知识的细…
前面我们说过的拓扑排序主要是为解决一个工程能否顺序进行的问题,但有时我们还需要解决工程完成需要的最短时间问题.如果我们要对一个流程图获得最短时间,就必须要分析它们的拓扑关系,并且找到当中最关键的流程,这个流程的时间就是最短时间. 在前面讲了AOV网的基础上,来介绍一个新的概念.在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,称之为AOE网(Activity On edge Network).由于一个工程,总有一个开始,一…
引言 之前所说的拓扑排序是为了解决一个工程能否顺利进行的问题.但在生活中,我们还会经常遇到如何解决工程完成需要的最短时间问题.     举个例子,我们需要制作一台汽车,我们需要先造各种各样的零件,然后进行组装,这些零件基本上都是在流水线上同时成产的.加入造一个轮子需要0.5天的时间,造一个发动机需要3天的时间,造一个车底盘需要2天的时间,造一个外壳需要2天的时间,其他零部件需要2天的时间,全部零部件集中到一个地方需要0.5天的时间,组装成车需要2天的时间,那么请问汽车厂造一辆车,最短需要多少时间…
关于AOE网络的基本概念可以参考<数据结构>或者search一下就能找到,这里不做赘述. 寻找AOE网络的关键路径目的是:发现该活动网络中能够缩短工程时长的活动,缩短这些活动的时长,就可以缩短整个工程的时长.因此,寻找关键路径就是寻找关键活动. 接下来开始寻找一个工程中的关键路径(关键活动). 寻找关键路径,每本教材都会提及四个特征属性:Ve[],Vl[],e[],l[],此处可能还补充一个属性:活动ai的时间余量,也就是l[i]-e[i],当某个活动的时间余量=0时,该活动就是关键活动.所以…
http://www.cnblogs.com/abatei/archive/2008/06/06/1215114.html 8.2 图的存储结构 图的存储结构除了要存储图中各个顶点的本身的信息外,同时还要存储顶点与顶点之间的所有关系(边的信息),因此,图的结构比较复杂,很难以数据元素在存储区中的物理位置来表示元素之间的关系,但也正是由于其任意的特性,故物理表示方法很多.常用的图的存储结构有邻接矩阵.邻接表.十字链表和邻接多重表. 8.2.1  邻接矩阵表示法 对于一个具有n个顶点的图,可以使用n…
一.数据结构 data 数据data element 数据元素data item 数据项data object 数据对象data structure 数据结构ADT (Abstruct Date Type) 抽象数据类型alogrithm 算法correctness 正确性readability 可读性robustness 健壮性frequency count 频度asymptotic time complexity 渐进时间复杂度space complexity 空间复杂度storage de…
数据结构实验之图论十一:AOE网上的关键路径 Time Limit: 2000 ms Memory Limit: 65536 KiB Problem Description 一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图. AOE(Activity On Edge)网:顾名思义,用边表示活动的网,当然它也是DAG.与AOV不同,活动都表示在了边上,如下图所示: 如上所示,共有11项活动(11条边),9个事件(9个顶点).整个工程只有一个开始点和一个完成点…
PTA数据结构与算法题目集(中文)  7-11 7-11 关键活动 (30 分)   假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“任务调度”包括一组子任务.以及每个子任务可以执行所依赖的子任务集. 比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务.有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束:有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计…
背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. 关键路径: 即决定一项工程的完成时间的路径. 如下图所示,是一辆汽车的生产流程,其中外壳.发动机.轮子等的生产过程都是可以并行进行的,但是发送机生产需要的时间最长,而只有所有零部件生产完成才才能进行下一步,因此图中用红色加粗的那一条路径即为该工程的关键路径(即决定工程的实际完成时间的路径). CriticalPath算法理解: 此算法是在拓扑排序的基础上…
声明:图片及内容基于https://www.bilibili.com/video/BV1BZ4y1T7Yx?from=articleDetail 原理 AOE网 关键路径 数据结构 核心代码 TopologicalSort /* TopologicalSort用于实现拓扑排序 参数:result用来保存处理过的拓扑排序顶点:count用来保存处理过的拓扑排序顶点的个数 功能:进行拓扑排序,将找到的拓扑顶点序号存入result数组(result可以看成一个栈,count可以看成是栈顶指针) 增加的…
断断续续地把这个系列写完了,就像上一个设计模式一样,算法这个系列也是前前后后写了将近有一年的时间.当然,都是在业余或者晚上的时间写完的,所以进度如此地慢.更主要的是,既然要写,总得要自己先弄懂吧,对于一个没上过高中的人来说,这还真的是有点困难. 所以说,在这一系列的文章中,可能有许多纰漏甚至是错误,这个也欢迎大家随时指正. 继续扩展提高 关于数据结构与算法这门课程,在我的系列文章中,只是简单的入了个门.仅仅从教材来说,就还有许多内容并没有涉及,实在是本人水平有限,大家可以自己再继续深入地学习.…
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填一次. 思路:大概看了线程相关的一些知识,对线程的运行机制,同步机制,以及整个系统都做一个全面的了解.在深入每一个部分去看一下线程及其相关包的源码做深入了解. 目标:线程,并发包(线程池,并发的数据结构,锁,原子类). 通过一些资料的查看最终把目标定位在线程和并发包上,线程是核心,并发包是辅助工具,…
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类):是集合接口的具体实现.从本质上讲,它们是可重复使用的数据结构. 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序.这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现. 集合接口 序号 name 接口描述 1 Collection Col…
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-value数据库. 在<Redis设计与实现>这样描述: Redis 数据库里面的每个键值对(key-value) 都是由对象(object)组成的: 数据库键总是一个字符串对象(string object); 数据库的值则可以是字符串对象.列表对象(list).哈希对象(hash).集合对象(set).…
上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素时,则这个拆分的数组是有序的.然后我们将这些有序的数组进行两两合并,在合并过程中进行比较,合并生成的新的数组仍然是有序的.然后再次将合并的有序数组进行合并,重复这个过程,知道整个数组是有序的. 下方我们先给出两个有序数组合并的示意图以及代码,然后给出归并排序的相关内容.归并排序其实就是拆分+合并.废…
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以及平衡二叉树的构建与查找,然后还聊了哈希表的构建与查找.接下来的几篇博客中我们就集中的聊一下常见的集中排序方式,并并给出相应的时间复杂度.本篇博客我们将会详细的介绍冒泡排序.插入排序.希尔排序以及选择排序,下篇博客将继续介绍堆排序.归并排序以及快速排序的相关内容.当然上述内容的代码实现我们依然采用S…
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找.本篇博客会给出相应查找算法的示意图以及相关代码,并且给出相应的测试用例.当然本篇博客依然会使用面向对象语言Swift来实现相应的Demo,并且会在github上进行相关Demo的分享. 查找在生活中是比较常见的,本篇博客所涉及的这几种查找都是基于线性结构的查找.也就是说我们的查找表是一个线性表,我…
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(Activity),在有向图中若以顶点表示活动,有向边表示活动之间的先后关系,这样的图简称为AOV网. 说的简单点,AOV网就是表示一个工程中某些子项的先后顺序.就拿工地搬砖来说吧,只有砖厂送来砖,工人才能搬.那么砖厂送砖就是搬砖的前…