实验13 快速排序11.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验13 快速排序11

实验13 快速排序 姓名:江婷 班级:计科三班 学号:09 完成日期:2010/12/01 一、需求分析 本程序需要将n 件任务按用时去从小到大排序,就可以得到任务依次的处理顺序。当有 n 件任务同时来临时,每件任务需要用时ni,求让所有任务等待的时间和最小的任务处理顺序。 从文件中读入图的信息。 利用克鲁斯卡尔算法求网的最小生成树。 以文本形式生成树中各条边以及他们的权值。 构造生成树的网一定是无向网。并设顶点数不超过30个,边权值为小于100的整数。 根据克鲁斯卡尔算法的特点,为便于选择选择权值小的边,存储结构不选用邻接矩阵和邻接表,而是可以用存储边(带权)的数组表示图。 二、概要设计 抽象数据类型 最小生成树的初始状态为只有n个顶点而无边的非连通图,图中每个顶点自成一个连通分量,所以要定义一个图的抽象数据类型。 ADT Graph{ 数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。 数据关系R: R={VR} VR={v,w|v,wV且P(v,w),v,w表示从v到w的弧,谓词P(v,w)定义 了弧v,w的信息} 基本操作P: Status CreateDGraph(ALGraph G,V,VR);//采用邻接表存储表示,构造 有向图G(G.kind=DG)。 int FirstAdjVex(G,v);//若G中存在顶点v,则返回该顶点在图中位置; //否则返回-1. Status DeleteArc(G,v,w);//在G中删除弧v,w。 int FindInDegree(G,ndegree[]);//求顶点的入度。 }ADT Graph 生成树T的每个连通分量可看成是一个等价类,则构造T加入新的边的过程类似于求等价类的过程,由此可以用MFSet类型来描述T,使构造T的过程仅需O(e log e)的时间。 ADT MFSet{ 数据对象:若设S是MFSet型的集合,则它由n(n0)个子集S(i=1,2,…,n)构成,每个子集的成员都是子界[-maxnumber , maxnumber]内的整数; 数据关系:=S 基本操作: Void Initial(S,n,); 操作结果:初始化操作。构造一个由n个子集(每个子集只含单个成员x)构成的集合S。 Int fix_mfset(S,x); 初始条件:S是已存在的集合,x是S中某个子集的成员。 操作结果:查找函数。确定S中x所属子集S。 Status mix_mfset(S,i,j); 初始条件:S和S是S中的两个互不相交的非空集合。 操作结果:归并操作。将S和S中的一个并入另一个中。 }ADT MFSet; 算法的基本思想 最小生成树的MST性质:假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集。若(u,v)是一条具有最小权值(代价)的边,其中uU,vV-U,则必存在一棵包含边(u,v)的最小生成树。 克鲁斯卡尔算法思想:假设连通网N=(V,{E}),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{ }),图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。依次类推,直至T中所有顶点都在同一连通分量上为止。 程序的流程 程序由三个模块组成: 输入模块:完成图中边数和顶点的输入。 构造最小生成树并输出模块:实现最小生成树的构建,并将结果输出到屏幕。 三、详细设计 物理数据类型 为便于实现查找和归并操作,则ADT MFSet的树应采用双亲表示法存储结构,如下所示: typedef PTree MFSet; int fix_mfset(MFSet S,int i){ //确定集合S中i所在子集,并将从i至根路径上所有结点都变成根的孩子结点。 if(i1||iS.n) return -1; //i不属于S中任一子集 for(j=i;S.nodes[j].parent0;j=S.nodes[j].parent); for(k=i;k!=j;k=t){ t=S.nodes[k].parent; S.nodes[k].parent=j; } return j; }//fix_mfset Status mix_mfset(MFSet S,int i,int j){ //S.nodes[i]和S.nodes[j]分别为S的互不相交的两个子集Si和Sj的根结点。 //并求集Si并Sj. if(i1||iS.n||j1||jS.n) return ERROR; if(S.nodes[i].parentS.nodes[j].parent){

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档