欢迎来到天天文库
浏览记录
ID:25850175
大小:77.56 KB
页数:3页
时间:2018-11-23
《《d森林问题》word版》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、算法设计与分析课程设计题目:d森林问题姓名:班级:学号:日期:一、算法问题描述设T是一棵带权树,树的每一条边带一个正权。又设S是T的顶点集,T/S是从树T中将S中顶点删去后得到的森林。如果T/S中所有树的从根到叶的路长都不超过d,则称T/S是一个d森林。(1)设计一个算法求T的最小顶点集S,使T/S是d森林。(提示:从叶向根移动)(2)分析算法的正确性和计算复杂性。(3)设T中有n个顶点,则算法的计算时间复杂性应为O(n)。二、算法问题形式化表示三、期望输入与输出输入:第一行有1个正整数n,表示给定的带权树有n个顶点,编
2、号为1,2,…,n。编号为1的顶点是树根。接下来的n行中,第i+1行描述与i个顶点相关联的边的信息。每行的第一个正整数k表示与该顶点相关联的边数。其后2k个数中,每2个数表示1条边。第一个数是与该顶点相关联的另一个顶点的编号,第二个数是边权值。当k=0时表示相应的结点是叶结点。文件的最后一行是正整数d,表示森林中所有树的从根到叶的路长都不超过d。输出:将编程计算出的最小分离集S的顶点数输出,如果无法得到所要求的d森林则输出“NoSolution!”。四、算法分析与步骤描述1.用父亲数组parent表示树;leaf存储叶结
3、点编号,readin读入初始数据publicstaticvoidreadin(){ReadStreamkeyBoard=newReadStream();for(inti=1;i<=n;i++){deg[i]=keyboard.readInt();for(intj=0;j4、移动,从根结点的路长超过d时,将该子树分离publicstaticintcount(){inttotal=0;for(inti=1;i<=leaf[0];i++){if(cut[par]<1&&dist[leaf[i]]+plen>p){total++;cut[par]=1;par=parent[par];}elseif(cut[par]<1&&dist[par]5、[0]]=par;}}returntotal;}五、问题实例及算法运算步骤1.用父亲数组parent表示树;leaf存储叶结点编号,readin读入初始数据中位数2.从叶子结点向根结点移动,从根结点的路长超过d时,将该子树分离六、算法运行截图七、算法复杂度分析算法的时间复杂度为:O(n)
4、移动,从根结点的路长超过d时,将该子树分离publicstaticintcount(){inttotal=0;for(inti=1;i<=leaf[0];i++){if(cut[par]<1&&dist[leaf[i]]+plen>p){total++;cut[par]=1;par=parent[par];}elseif(cut[par]<1&&dist[par]5、[0]]=par;}}returntotal;}五、问题实例及算法运算步骤1.用父亲数组parent表示树;leaf存储叶结点编号,readin读入初始数据中位数2.从叶子结点向根结点移动,从根结点的路长超过d时,将该子树分离六、算法运行截图七、算法复杂度分析算法的时间复杂度为:O(n)
5、[0]]=par;}}returntotal;}五、问题实例及算法运算步骤1.用父亲数组parent表示树;leaf存储叶结点编号,readin读入初始数据中位数2.从叶子结点向根结点移动,从根结点的路长超过d时,将该子树分离六、算法运行截图七、算法复杂度分析算法的时间复杂度为:O(n)
此文档下载收益归作者所有