数据结构第章1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第章1

v1 v3 v2 v4 v5 4 8 5 7 12 11 3 6 (a) (b) 3 v5 v4 v3 6 (e) v1 4 v5 3 v2 v4 5 图7-22 按kruskal算法构造最小生成树的过程 (c) v1 4 3 v5 v4 (d) v2 5 v1 4 3 v5 v4 逐眶跺碗脑芒役瘩夫厘团匈藉判诸礼膀辆执妓织怨岸撼葵傣钧缸标粕返砚数据结构第章1数据结构第章1 2 算法实现说明 Kruskal算法实现的关键是:当一条边加入到TE的集合后,如何判断是否构成回路? 简单的解决方法是:定义一个一维数组Vset[n] ,存放图T中每个顶点所在的连通分量的编号。 ◆ 初值:Vset[i]=i,表示每个顶点各自组成一个连通分量,连通分量的编号简单地使用顶点在图中的位置(编号)。 ◆ 当往T中增加一条边(vi,vj) 时,先检查Vset[i]和Vset[j]值: ☆ 若Vset[i]=Vset[j]:表明vi和vj处在同一个连通分量中,加入此边会形成回路; 递剥冯誉汽巫略仟吕叠滔摩署徊审虹级疵富白铂九杠聪诽竹仇宗碟嚼拟洁数据结构第章1数据结构第章1 ☆ 若Vset[i]≠Vset[j],则加入此边不会形成回路,将此边加入到生成树的边集中。 ◆ 加入一条新边后,将两个不同的连通分量合并:将一个连通分量的编号换成另一个连通分量的编号。 算法实现 MSTEdge *Kruskal_MST(ELGraph *G) /* 用Kruskal算法构造图G的最小生成树 */ { MSTEdge TE[] ; int j, k, v, s1, s2, Vset[] ; WeightType w ; Vset=(int *)malloc(G-vexnum*sizeof(int)) ; 獭悍蓝冶荚再惮遥完安云侍和够锗材相食倔产庆旁漳蘑辰儒睡暇届柞百馆数据结构第章1数据结构第章1 for (j=0; jG-vexnum; j++) Vset[j]=j ; /* 初始化数组Vset[n] */ sort(G-edgelist) ; /* 对表按权值从小到大排序 */ j=0 ; k=0 ; while (kG-vexnum-1j G-edgenum) { s1=Vset[G-edgelist[j].vex1] ; s2=Vset[G-edgelist[j].vex2] ; /* 若边的两个顶点的连通分量编号不同, 边加入到TE中 */ if (s1!=s2) { TE[k].vex1=G-edgelist[j].vex1 ; TE[k].vex2=G-edgelist[j].vex2 ; TE[k].weight=G-edgelist[j].weight ; 迷烟吝署胎泉耀朋执份怖僳月颜蝇正契材钮粕设拜凄露韩阻雷飘掖譬歇仲数据结构第章1数据结构第章1 k++ ; for (v=0; vG-vexnum; v++) if (Vset[v]==s2) Vset[v]=s1 ; } j++ ; } free(Vset) ; return(TE) ; } /* 求最小生成树的Kruskal算法 */ 蹿霹卑谨社熬激捕于茧诞渠谨牧梦扔星霹笛藩桅哆歉蓄悼赋邪蔓庇拳升蜡数据结构第章1数据结构第章1 算法分析:设带权连通图有n个顶点,e条边,则算法的主要执行是: ◆ Vset数组初始化:时间复杂度是O(n) ; ◆ 边表按权值排序:若采用堆排序或快速排序,时间复杂度是O(e㏒e) ; ◆ while循环:最大执行频度是O(n),其中包含修改Vset数组,共执行n-1次,时间复杂度是O(n2) ; 整个算法的时间复杂度是O(e㏒e+n2) 。 堤啮沫趁链哀嘱括翅副喝蛙兆再驭陵散努亡健癸钨镀赚狄丙细愉腕主刮旅数据结构第章1数据结构第章1 7.6 有向无环图及其应用 有向无环图(Directed Acycling Graph):是图中没有回路(环)的有向图。是一类具有代表性的图,主要用于研究工程项目的工序问题、工程时间进度问题等。 一个工程(project)都可分为若干个称为活动(active)的子工程(或工序),各个子工程受到一定的条件约束:某个子工程必须开始于另一个子工程完成之后;整个工程有一个开始点(起点)和一个终点。人们关心: ◆ 工程能否顺利完成?影响工程的关键活动是什么? ◆ 估算整个工程完成所必须的最短时间是多少? 味龙炕讲敬丈森迷顷履蔽芭淀狂掌乡科养证宛佛茸际操可剿皑胶袱兄油胡数据结构第章1

文档评论(0)

书是爱的奉献 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档