关键路径

程序优化的5个方向

故事扮演 提交于 2020-03-26 10:59:04
程序优化的5个方向 80/20法则:程序执行中,80%的时间消耗在20%的代码上。 优化前,我们首先得找到这20%的关键路径; 各种语言都有专门的工具来找到这20%的关键路径,比如C++经常用到的gprof; 参考 《C++的性能优化实践》 在关键路径上对耗时的计算进行优化; 主要的优化方向为: 减少重复计算、预先计算、延后计算、降低计算代价、不计算; 减少重复计算 典型的例子如缓存,将之前相同的计算(查数据库,读写文件)存下来,等待下一次继续使用; 适用场景:计算结果有有效期,过段时间后需要再次计算; 预先计算 对于关键路径中比较耗时的计算,预先计算出来,节省每次计算的成本; 预先计算出对照表 关键路径中需要用到的映射关系对照表,将对照表预先计算,在关键路径中直接取用; 将计算提前到初始化期间 比如,内存分配耗时,将其提前到初始化的时间分配,建立内存池; 将计算提前到编译期间 比如:使用常量表达式,在编译期间将最终值计算出来,节省这部分的运行时开销; 相关技术:模版元编程; 适用场景:计算出来的值一直有效,无需再次计算; 延迟计算 将计算耗时延迟到后期,这样,对于异常情况或其它分支情况,在中途就转换,不用再计算; 有较多分支条件 将最耗时的计算延后,这样,可能很多场景在中途就转到其它分支上,不用计算; 判断条件中的技巧:a||b a&&b 如果判断条件比较耗时

C++编程关键路径(一)

懵懂的女人 提交于 2020-02-26 03:05:13
最近看了这本由中国水利水电出版社出版的这本书,作者是梁永军,感觉里面的东西对我个人来说挺有用的,所以总结一下,也算是自己复习一下 第一章:C语言关键知识 1、关于内存: (1)栈:是用于那些在编译期间就能确定存储大小的变量的存储区,在函数作用域内创建,离开作用域后自动销毁。通常存储的是局部变量、函数参数等。存储区域一般是相邻的。 (2)堆:是用于那些在编译期间不确定存储大小的变量的存储区,存储空间一般是不连续的,由malloc(new)和free(delete)来申请和释放内存, (3)全局(静态存储区):在编译期间就能确定变量占用内存的大小,一般是全局变量和静态变量。 (4)常量存储区:存放的是常量,程序运行期间,全局可见,不允许被修改。 变量分为左值和右值,对于:char* p=”hello world”;中,左值是局部指针变量p,存储于函数栈上,右值是字符串常量”hello world”,存储于常量存储区。 2、函数的参数传值和传址 参数传值:把实参的值复制到函数运行时分配给函数的参数存储区中,函数不会访问调用函数的实参,被调用函数处理的是实参在本地的拷贝,这些拷贝值存储在函数的栈中。 参数传址:把实参的地址(指针或引用)传入函数,被调用的函数直接操作的是变量的地址,目的有两个:一个是改变传入的变量的值,一个是提高效率,减少参数传值过程中需要的复制过程。 在实际开发中

五大CSS性能优化工具让网站加载更快

点点圈 提交于 2020-02-25 19:09:40
为什么Web页面的加载速度如此重要?在这个信息化的时代,如果一个网站的加载时间过长,大部分用户会极其不耐烦地选择“关掉”!这让辛辛苦苦熬夜敲代码的程序员们情何以堪,不管网站功能如何强大,用户根本都没来得及看一眼,结果网站访问量越来越少,粉丝转化率越来越低,最后,程序员可能就要下岗了。 了解前端开发的程序员都知道,影响网站性能的因素有很多,例如,HTTP请求数量,臃肿的代码,繁重的媒体文件等。如何编写CSS以及如何在浏览器中加载样式表都会对加载时间造成重大影响,接下来推荐五款针对CSS的性能提升工具,以帮助广大前端开发程序员创建一流的网站。 TestMyCSS TestMyCSS是一款免费的在线优化工具,具有很多功能。它可用来检查代码冗余,验证错误,未使用的CSS和寻求最佳做法。程序员只需将网址输入网站的CSS文件,就可以立即开始使用,TestMyCSS可以发现需要改进的所有项目。不仅如此,程序员还可以看到一些有用的提示: 如何简化复杂的选择器 需要去掉的重复的CSS属性和选择器 代码中存在的重要声明的数量 不必要的类特异性 不必要的IE修复 不需要供应商前缀的CSS属性 具有标签名的类或ID规则,例如a.primary-link 通用选择器使用不当 Stylelint 新建一个前端学习qun438905713,在群里大多数都是零基础学习者,大家相互帮助,相互解答

PMP关键路径法之顺推和逆推

做~自己de王妃 提交于 2020-02-17 17:27:45
下图是系统集成项目管理工程师2019年上半年下午的案例题,这里用来解析关键路径法的顺推和逆推 备注:因为软考的项目管理考纲是采用PMP的教材,所以这里的解析是通用的 专业术语解释: 注意:持续时间也叫工期,浮动时间也叫时差 1,顺推,从A推到I D前面的有B,C B的最早结束时间为11,C的最早结束时间为13 所以D的最早开始时间为13(取最大的),D的最早结束时间为13+7=20 H前面的有D,E,F D的最早结束时间为20,E的最早结束时间为15,F的最早结束时间为15 所以H的最早开始时间为20,H的最早结束时间为20+3=23 I前面只有H 所以I的最早开始减为23,I的最早结束时间为23+5=28 顺推的结果如下: 2,逆推,从I推到A 从I的最早开始时间,持续时间和最早结束时间可以得出 I的最晚开始时间为23,浮动时间为0,最晚结束时间28 所以H的最晚结束时间为23,最晚开始时间为23-3=20,浮动时间为20-20=0 所以D的最晚结束时间为20,最晚开始时间为20-7=13,浮动时间为13-13=0 所以E的最晚结束时间为20,最晚开始时间为20-2=18,浮动时间为18-13=5 逆推结果如下图: 下图是系统集成项目管理工程师2019年下半年下午的案例题 先根据公式算出各个任务的工期并计算关键路径,因为关键路径上的浮动时间为0,如下图: 1,顺推A-F

Design Compiler入门经典实验图文教程Lab5&6

冷暖自知 提交于 2020-01-20 00:30:28
Lab5:预备知识整理(也可以先跳过直接先看实验,看完实验记得回来看哦) 1、dc_shell 模式下使用 compile 来综合优化设计;dc_shell -topo 模式下使用 compile_ultra 来综合优化设计; 2、设计的综合分层为:Architectural(结构级)、Logicl(逻辑级)、Gate(门级) 3、各层次优化策略: (1)、Architectural(结构级)包括:设计结构的选择、数据通路的优化、共享(算术电路)子表达式、资源共享(其中的算术资源共享默认是约束驱动,将 hlo_resource_allocation 变量设置为 area,使得算术资源共享的策略是约束面积的(面积优化);将 hlo_resource_allocation 变量设置为 none 即使 DC 综合时停用资源共享,但此时也可以在 RTL 代码中指明资源共享)、重新排序运算符号。 (2)、Logicl(逻辑级):电路的功能以 gtech 器件表示,进行 Structuring(结构)和 Flattening(展平)优化。 其中 Structuring( 结构 ) 优化采用 共用 ( 门级电路 ) 子表达式 的策略,优化速度和面积,set_structure ture 命令启用。 Flattening(展平)优化将组合逻辑路径减少为先与后或的两级

10关键路径_CriticalPath

旧街凉风 提交于 2020-01-16 14:03:07
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXEDGE 30 #define MAXVEX 30 #define INFINITY 65535 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ int *etv,*ltv; /* 事件最早发生时间和最迟发生时间数组,全局变量 */ int *stack2; /* 用于存储拓扑序列的栈 */ int top2; /* 用于stack2的指针 */ /* 邻接矩阵结构 */ typedef struct { int vexs[MAXVEX]; int arc[MAXVEX][MAXVEX]; int numVertexes, numEdges; }MGraph; /* 邻接表结构****************** */ typedef struct EdgeNode /* 边表结点 */ { int adjvex; /* 邻接点域,存储该顶点对应的下标 */ int weight; /* 用于存储权值

图的应用——关键路径

不打扰是莪最后的温柔 提交于 2020-01-14 21:59:13
AOE网 AOE网的性质 AOE网所能解决的问题 关键路径 术语 算法设计 算法要点 算法实现 拓扑排序 AOE网 在一个表示工程的带权有向图中, 用顶点表示事件,用有向边表示活动 ,边上的权值表示活动的持续时间,称这样的有向图叫做 边表示活动 的网,简称AOE网。AOE网中没有入边的顶点称为 始点 (或源点),没有出边的顶点称为 终点 (或汇点)。 AOE网的性质 只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始; 只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。 AOE网所能解决的问题 完成整个工程至少需要多少时间? 为缩短完成工程所需的时间, 应当加快哪些活动? 关键路径 关键路径长度是整个工程所需的 最短工期 。 关键路径:在AOE网中,从始点到终点具有最大路径长度(该路径上的各个活动所持续的时间之和)的路径称为关键路径。 关键活动:关键路径上的活动称为关键活动。 术语 源点:表示整个工程的开始点,也称起点 收点:表示整个工程的结束点,也称汇点 事件结点:单位时间,表示的是时刻 活动(有向边):它的权值定义为活动进行所需要的时间。方向表示起始结点事件先发生,而终止结点事件才能发生 事件的最早发生时间(Ve(j)):从起点到本结点的最长的路径。意味着事件最早能够发生的时刻 事件的最迟发生时间(V l (j)):不影响工程的如期完工

数据结构图之六(关键路径)

时光总嘲笑我的痴心妄想 提交于 2020-01-10 07:33:14
【1】关键路径 在我的经验意识深处,“关键”二字一般都是指临界点。 凡事万物都遵循一个度的问题,那么存在度就会自然有临界点。 关键路径也正是研究这个临界点的问题。 在学习关键路径前,先了解一个AOV网和AOE网的概念: 用顶点表示活动,用弧表示活动间的优先关系的有向图: 称为顶点表示活动的网(Activity On Vertex Network),简称为AOV网。 与AOV网对应的是AOE(Activity On Edge)网即边表示活动的网。 AOE网是一个带权的有向无环图。 网中只有一个入度为零的点(称为源点)和一个出度为零的点(称为汇点)。 其中,顶点表示事件(Event),弧表示活动,权表示活动持续的时间。 通常,AOE网可用来估算工程的完成时间。 假如汽车生产工厂要制造一辆汽车,制造过程的大概事件和活动时间如上图AOE网: 我们把路径上各个活动所持续的时间之和称为路径长度,从源点到汇点具有最大长度的路径叫关键路径,在关键路径上的活动叫关键活动。 那么,显然对上图AOE网而言,所谓关键路径: 开始-->发动机完成-->部件集中到位-->组装完成。路径长度为5.5。 如果我们试图缩短整个工期,去改进轮子的生产效率,哪怕改动0.1也是无益的。 只有缩短关键路径上的关键活动时间才可以减少整个工期的长度。 例如如果制造发动机缩短为2.5天,整车组装缩短为1.5天,那么关键路径为4

关键路径

ε祈祈猫儿з 提交于 2020-01-01 10:19:34
AOV网的关键路径 由于AOV网中的某些活动能够同时进行,固完成整个工程所必须花费的时间应该为源点到终点的最大路径长度 (这里指的长度是指该路径上的各个活动所需的时间之和)。从源点到终点的最大路径长度的路径称为关键路径, 关键路径长度就是整个工程所需的最短工期,关键路径上的活动称为关键活动。 事件的最早发生时间 ve[k]是指k发生的最早的时间,它的值是从源点到顶点k的最长路径。 这个时间决定了所有从顶点k发出的有向边所代表的活动能够开工的最早的时间。 事件的最迟发生时间 vl[k]是指在不推迟整个工期的前提下,时间vk允许的最晚发生时间。 活动ai的最早开始时间 若活动ai是由<vk,vj>弧来表示的,则只有时间vk发生了, ai才能发生,所以ai的最早开始时间就是vk的最早发生时间 活动ai的最晚开始时间 活动ai的最晚开始时间是指在不推迟整个工程完成日期的前提下,必须开始的最晚时间。 当活动的最早开始时间等于其最晚开始时间的时候,可判定该活动为关键活动 来源: CSDN 作者: 残·影 链接: https://blog.csdn.net/Walker7143/article/details/103756758

数据结构习题总结之第九章和第十章

依然范特西╮ 提交于 2019-12-27 04:02:17
第九章 强连通分量:有向图G中极大强连通子图 在邻接表的每个线形链表中,各结点的顺序是任意的。 深度优先搜索法DFS:在邻接链表中就是选择第一个结点然后跳到第几行对应的结点 广度优先搜索法BFS:在邻接链表中就是遍历一整行,然后再按照次序根据每个结点跳到对应的行遍历。(队列实现) 拓扑排序:把入度为0的结点和边删去,依次进行。如果删除到最后,图中剩余的顶点中有前驱顶点,那么原图有环。 判断G有没有环可以用深度优先搜索法以及拓扑排序。 AOE网以及关键路径:顶点为事件,有向边为活动,边上的权值表示该活动持续的时间。你可以完完全全把他当作一个工程来看待。 (1)ee表示最早发生时间:顶点v到vk的最长路径长度。你想加入磨洋工效率降低,是不是得提前开工,所以这是尽早开工的意思。 ee(k)=max{ee(j)+<vj,vk>上的权} (2)le表示最迟发生时间:在不推迟整个工程完成,所以总的期限是ee,要做减法。 le(k)=min{le(j)-<vj,vk>上的权} (3)时间余量为l(i)-e(i) ,若为0,那么为0的边组成关键路径,存在的共有的部分,若提高效率做可以加快进程,p270. 关键路径不唯一。 一个边必须端点不同。 第十章 分块查找:有n个顶点,则分块时要求 根号n,块长度为根号n。s为块长,b为块的个数。。。查找成功时的平均查找长度为:(b+1)/2 + (s+1)