首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
DSP技术
» 图论算法 有图有代码 万字总结 向前辈致敬(6)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
图论算法 有图有代码 万字总结 向前辈致敬(6)
发短消息
加为好友
yuyang911220
当前离线
UID
1029342
帖子
9914
精华
0
积分
4959
阅读权限
90
在线时间
286 小时
注册时间
2014-5-22
最后登录
2017-7-24
论坛元老
UID
1029342
性别
男
1
#
打印
字体大小:
t
T
yuyang911220
发表于 2016-8-20 19:50
|
只看该作者
图论算法 有图有代码 万字总结 向前辈致敬(6)
critical
,
工程
,
网络
AOE网络
AOE网络就是边表示活动的网络(activity on edge network),它的有向边表示在一个工程中所需完成的任务或活动,而顶点表示事件,用来标识某些活动的完成。在AOV网络中,事件高数2完成意味着要先完成高数1;AOE网络中,事件高数2完成意味着已经完成了高数1。也就是说在AOE中,当一个事件发生时,就表明触发该事件的
所有
活动都已经完成。
在AOE网络中,有些活动可以并行地进行,所以完成整个工程所需的最短时间是从开始顶点到终止顶点的最长路径的长度。关键路径(critical path)就是一条具有最长路径长度的路径。
一个事件vi可以发生的最早发生时间(earliest time),是从开始顶点vo到顶点vi的最长路径的长度。活动vi的最迟开始时间(latest time),记作late(i),是指在不增加工程工期的前提下,活动ai能够最迟的开始时间。
关键网络(critical activity)是指满足early(i)=late(i)的活动,一个活动的最迟开始时间late(i)与最早开始时间early(i)之间的差说明了该活动的关键程度。
下面列出两个比较常用的公式:
1)事件最早发生时间的计算
earliest[j]=maxi∈P(j){earliest
+<i,j>的持续时间}
以上这个数学公式的markdown“源码”: $ earliest[j] = displaystyle max_{x in {P(j)}} { earliest
+ <i , j> 的持续时间 } $
1
2
2)事件最晚发生时间的计算
latest[j]=mini∈S(j){latest
−<j,i>的持续时间}
最小生成树
一个无向图G的最小生成树(minimum spanning tree)就是由该图的那些连接G的所有顶点的边构成的总值最低的树。最小生成树存在当且仅当G是连通的。
下面第二个图是第一个图的最小生成树(碰巧是唯一的,但并不能代表一般情况)。最小生成树是一棵树;因为它无环;因为最小生成树包含每一个顶点,所以它叫生成树;此外,它显然是包含所有顶点的最小的树。
Prim算法
计算最小生成树的一种方法是使其连续地一步一步成长,在每一步中,都要把一个结点当作根并且往上累加边,于是就将关联的顶点加到了增长中的树上。
Prim算法和前面求最短路径的Dijkstra算法思想类似,因此和前面一样我们对每一个顶点保留值dv和pv以及一个标记顶点的known或unknown。
还是老办法,在Prim算法中也设定一个表的初始状态如下。
将v1设置为known的,根据Prim算法上一张图所示,v1连接了v2、v3、v4,其dv分别为2、4、1,因此更新如下。
将v4声明为known,更新如下。
将v2和v3先后声明为known,更新如下。
将v7声明为known后更新如下左图,最后将v6和v5也更新为known后更新如下右图。
下面是Prim算法的伪代码实现,其中T为生成树的边集,TV是当前生成树T的顶点集合
Kruskal算法
第二种贪心策略是连续地按照最小的权选择边,并且当所选的边不产生回路时就把它作为取定的边。同样是前面的示例,用Kruskal算法执行如下。
形式上,Kruskal算法是在处理一个森林——树的集合。下图展示了边被添加到森林中的顺序。
当添加到森林中的边足够多时,算法终止,这里算法的作用在于决定边(u,v)是应该添加还是舍弃。
在该算法执行的过程中,两个顶点属于同一个集合当且仅当它们在当前的生成森林(spanning forest)中连通。如果u和v在同一个集合中,那么连接它们的边就要放弃,因为当它们已经连接的情况下,再添加边(u,v)就会形成一个回路。
如果这两个顶点不在同一个集合中,就应该将这条边加入,并对包含顶点u和v的两个集合执行一次union操作。这样将保持集合的不变性,因为一旦边(u,v)添加到生成森林中,若w连通到u而x连通到v,这x和w必然是连通的,因此属于相同的集合。虽然将边排序便于选取,但用线性时间建立一个堆则是更好的想法,此时deleteMin使得边依次得到测试。
Sollin算法
Sollin算法在每一步都为生成树递归地选取若干条边,在每一步处理开始时,说选取的边与图中的所有n个顶点形成一个生成森林。在执行过程中,为森林中的每棵树都选取一条边,与选取的边都是恰有一个顶点在树上且代价最小。由于森林中的两棵树可能选取同一条边,所以需要去掉同一条边被多次选取的情况。在开始时,说选取的边集为空,当最后结果只有一棵树或者再没有边可供选取时,算法就此结束。
收藏
分享
评分
继承事业,薪火相传
回复
引用
订阅
TOP
发短消息
加为好友
yuchengze
当前离线
UID
1062083
帖子
5837
精华
0
积分
2921
阅读权限
70
在线时间
222 小时
注册时间
2016-6-30
最后登录
2018-9-9
金牌会员
UID
1062083
性别
男
2
#
yuchengze
发表于 2016-8-21 12:54
|
只看该作者
很不错的帖子,很好的算法介绍,路过帮顶
回复
引用
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议