AoE

研究了一个月的「拓扑排序」,给大家说一说

筅森魡賤 提交于 2020-07-27 11:53:12
** 前言 ** Topological sort 又称 Topological order,这个名字有点迷惑性,因为拓扑排序并不是一个纯粹的排序算法,它只是针对某一类图,找到一个可以执行的线性顺序。 这个算法听起来高大上,如今的面试也很爱考,比如当时我在面我司时有整整一轮是基于拓扑排序的设计。 但它其实是一个很好理解的算法,跟着我的思路,让你再也不会忘记她。 有向无环图 刚刚我们提到,拓扑排序只是针对特定的一类图,那么是针对哪类图的呢? 答:Directed acyclic graph (DAG),有向无环图。即: 这个图的边必须是有方向的; 图内无环。 那么什么是方向呢? 比如微信好友就是有向的,你加了他好友他可能把你删了你却不知道。。。那这个朋友关系就是单向的。。 什么是环?环是和方向有关的,从一个点出发能回到自己,这是环。 所以下图左边不是环,右边是。 那么如果一个图里有环,比如右图,想执行1就要先执行3,想执行3就要先执行2,想执行2就要先执行1,这成了个死循环,无法找到正确的打开方式,所以找不到它的一个拓扑序。 总结: 如果这个图不是 DAG,那么它是没有拓扑序的; 如果是 DAG,那么它至少有一个拓扑序; 反之,如果它存在一个拓扑序,那么这个图必定是 DGA. 所以这是一个充分必要条件。 拓扑排序 那么这么一个图的「拓扑序」是什么意思呢? 我们借用百度百科[1

【学习总结】《大话数据结构》- 第7章-图

血红的双手。 提交于 2020-04-28 02:45:37
【学习总结】《大话数据结构》- 总 第7章图-代码链接 启示: 图 目录 <!-- GFM-TOC --> 7.1 开场白 7.2 图的定义 7.3 图的抽象数据类型 7.4 图的存储结构 7.5 图的遍历 7.6 最小生成树 7.7 最短路径 7.8 拓扑排序 7.9 关键路径 7.10 总结回顾 7.11 结尾语 <!-- GFM-TOC --> ======================================== 注: 对最小生成树部分的两个算法云里雾里的,暂留。 ======================================== 7.1 开场白 一些可以略过的场面话... ======================================== 7.2 图的定义 图的定义 1、顶点(Vertex):图中的数据元素称为顶点。 (注:线性表中的数据元素叫元素,树中的数据元素叫结点) 2、顶点有穷非空:有空表,空树,但图结构中,不允许没有顶点。 3、边:顶点之间的逻辑关系用边表示,任意两个顶点之间都可能有关系 注:边集可以为空 图的其他相关定义 无向边、无向图、有向边、有向图: 简单图: 无向完全图、有向完全图 稀疏图和稠密图 权、网 子图 图的顶点与边间的关系 相邻接、相关联、顶点的度 邻接到邻接自、相关联、顶点的入度出度 顶点到顶点的路径

NOIP提高组/CSP-S复赛需掌握的算法

為{幸葍}努か 提交于 2020-04-21 07:00:05
1、排序算法(快排、选择、冒泡、堆排序、二叉排序树、桶排序) 2、DFS/BFS 也就是搜索算法,剪枝务必要学! 学宽搜的时候学一下哈希表! 3、树 ①遍历 ②二叉树 ③二叉排序树(查找、生成、删除) ④堆(二叉堆、左偏树、堆排序) ⑤Trie树 4、图(图论建模) ①最小生成树 ②最短路径 ③计算图的传递闭包 ④连通分量(其中要掌握并查集技术) 强连通分量tarjin ⑤拓扑排序、关键路径 ⑥哈密尔顿环 ⑦欧拉回路(USACO 3.3 题1 Fence) ⑧Bell-man Ford、SPFA(能解决负权回路)(USACO 3.2 题6 Butter) ⑨二分图(匈牙利算法)(USACO 4.2 题2 stall) 5、动态规划(背包问题只是其中一种) ①线性动规 ②区间动规 ③树形动规 ④图形动规 6、分治(掌握了动规分治就好学了) 7、贪心 8、位运算(可以用来进行优化) —————————————————————————————————————————————————————————————————————————————————————— 补充: 时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理) 排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排序,外部排序) 数论(整除,集合论,关系,素数

数据结构 图 思考题4

强颜欢笑 提交于 2020-04-10 14:53:06
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 第八讲一共就两个值得记录的思考题,这里也是简单记录一下吧。 1 下图给定了一个项目的AOE。整个项目最早完工需要的时间是 A. 17 B. 19 C. 20 D. 23 选C 2 在上图中,如果<0,2>组能加快进度,整个项目就能提前完工。 A. √ B. × 选A,由图可知,从0到3的时间是12,是由0-2-3决定的,而不是0-1-3。而4也是由0-2影响的,所以加快以后,能提前完工。 争取用两天时间,把三个编程作业都做了。 点赞 2 收藏 分享 文章举报 Dezeming 发布了174 篇原创文章 · 获赞 394 · 访问量 1万+ 私信 关注 来源: oschina 链接: https://my.oschina.net/u/4274413/blog/3227890

图应用之关键路径(Critical Path)

强颜欢笑 提交于 2019-12-13 17:51:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间。 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE)。(Activity On Edge Network) 看看百度百科上解释: AOE网 :Activity on edge network 若在带权的有向图中,以顶点表示事件,以有向边表示活动,边上的权值表示活动的开销(如该活动持续的时间),则此带权的有向图称为AOE网。 如果用AOE网来表示一项工程,那么,仅仅考虑各个子工程之间的优先关系还不够,更多的是关心整个工程完成的最短时间是多少; 哪些活动的延期将会影响整个工程的进度,而加速这些活动是否会提高整个工程的效率。 因此,通常在AOE网中列出完成预定工程计划所需要进行的活动,每个活动计划完成的时间,要发生哪些事件以及这些事件与活动之间的关系, 从而可以确定该项工程是否可行,估算工程完成的时间以及确定哪些活动是影响工程进度的关键。 很显然,顶点表示事件,边表示活动,边的权则表示活动持续时间。 AOE一般用来估算工程的完成时间。 AOE表示工程的流程,把没有入边的称为始点或者源点,没有出边的顶点称为终点或者汇点。一般情况下,工程只有一个开始,一个结束, 所以正常情况下