1、递归与分治实验报告竭诚为您提供优质文档/双击可除递归与分治实验报告篇一:实验一递归与分治算法编程-实验报告纸南京信息工程大学实验(实习)报告实验(实习)名称递归与分治算法编程实验(实习)日期得分指导教师院专业年级班次姓名学号1实验目的:1)掌握递归与分治策略的基本思想2)掌握递归算法在阶乘函数、Ackerman函数、整数划分等问题上的应用3)掌握二分查找、合并排序、快速排序等问题的分治算法实现4)熟悉myeclipse或eclipse等Java开发工具的使用。2实验内容:1)采用myeclipse或eclipse编程实现基于分治策略的二分查找算法。2)采用myeclipse或eclipse编程
2、实现基于分治策略的合并排序算法。3)采用myeclipse或eclipse编程实现基于分治策略的合并排序算法。3实验步骤二分查找publicclasssortingpublicstaticintbinarysearch(inta,intx,intn)intleft=0;intright=n-1;while(leftintmiddle=(left+right)/2;if(x=amiddle)returnmiddle;if(xamiddle)left=middle+1;elseright=middle-1;return-1;publicstaticvoidmain(stringargs)intx,
3、n;inta=1,3,4,5,6,13,25;x=6;n=7;ints;s=binarysearch(a,x,n);system.out.println(s);合并排序publicclassmergesortpublicstaticvoidmergesort(inta)publicstaticvoidmergepass(intx,inty,ints)publicstaticvoidmerge(intc,intd,intl,intm,intr)inti=1,j=m+1,k=1;inti=0;while(iif(ci-(cj)m)for(intq=j;q快速排序publicclassQsortpr
4、ivatestaticvoidqsort(inta,intp,intr)privatestaticintpartition(inta,intp,intr)inti=p;intj=r+1;intx=ap;inttemp;while(true)while(a+i-x)0);if(i=j)break;temp=ai;if(paj=temp;mymath.swap(a,i,j);/ap=aj;aj=x;returnj;publicstaticvoidmain(stringargs)inta=4,2,7,9,1;qsort(a,0,4);for(inti=0;i+)system.out.println(
5、ai);4实验分析和总结掌握了递归与分治策略的基本思想掌握了递归算法在阶乘函数、Ackerman函数、整数划分等问题上的应用掌握了二分查找、合并排序、快速排序等问题的分治算法实现熟悉了myeclipse或eclipse等Java开发工具的使用。篇二:递归与分治实验报告递归与分治实验报告班级:计科1102姓名:赵春晓学号:20XX31020XX31实验目的:进一步掌握递归与分治算法的设计思想,通过实际问题来应用递归与分治设计算法。实际问题:1集合划分问题,2输油管道问题,3邮局选址问题,4整数因子分解问题,5众数问题。问题1:集合划分算法思想:对于n个元素的集合,可以划分为由m个子集构成的集合,
6、例如1,23,4就是由2个子集构成的非空子集。假设f(n,m)表示将n个元素划分成由m个子集构成的集合的个数。那么1)若m=1,则f(n,m)=1;2)若n=m,则f(n,m)=1;3)若不是上面两种情况则有下面两种情况构成:3.1)向n-1个元素划分成的m个集合里面添加一个新的元素,则有m*f(n-1,m)种方法;3.2)向n-1个元素划分成的m-1个集合里添加一个由一个元素形成的独立的集合,则有f(n-1,m-1)种方法。实验代码:#include#includeusingnamespacestd;intjihehuafen(intn,intm)if(m=1|n=m)return1;els
7、ereturnjihehuafen(n-1,m-1)+m*jihehuafen(n-1,m);intmain()ifstreamfin(c:/input.txt);ofstreamfout(c:/output.txt);intn,m,num;finnm;num=jihehuafen(n,m);foutreturn0;问题2:输油管道算法思想:由于主管道由东向西铺设。故主管道的铺设位置只和各油井的y坐标有关。要使主管道的y坐标最小,主管道的位置y坐标应是各个油井y坐标的中位数。先用快速排序法把各个油井的y坐标排序,然后取其中位数再计算各个油井y坐标与中位数差值的绝对值之和。实验代码:#inclu
8、de#include#includeusingnamespacestd;structpoint/定义坐标结构体intx;inty;/快速排序voidsort(pointa,intsize)inti=0,j=size-1;inttemp;/用来保存作为基准的数if(size=1)temp=a0.y;/用区间的第一个元素作为基准while(i!=j)/区间两端交替向中间扫描,知道i=jwhile(iai.y=aj.y;i+;while(iaj.y=ai.y;j-;ai.y=temp;sort(a,i);/对左递归sort(a+i+1,size-i-1);/对右递归/取中位数intmadian(po
9、int*a,intsize)intnum=size+1;returnanum/2-1.y;/returnsize%2?asize1.y:(asize1.y+a(size1)+1.y)1;/计算最短路程intlucheng(point*a,intsize)intmid=madian(a,size);inti,sum=0;for(i=0;isum+=abs(ai.y-mid);returnsum;intmain()ifstreamfin(c:/input.txt);ofstreamfout(c:/output.txt);intn;finn;point*p=newpointn;for(inti=0;
10、ifinpi.xpi.y;sort(p,n);intminlen=lucheng(p,n);foutreturn0;问题3:邮局选址问题算法思想:同问题2实验代码:#include#include#includeusingnamespacestd;structpointintx;inty;voidsort_x(point*a,intsize)inttemp;inti=0,j=size-1;if(size=1)temp=a0.x;/while(i!=(:递归与分治实验报告)j)while(iif(iai.x=aj.x;i+;while(iif(iaj.x=ai.x;j-;ai.x=temp;so
11、rt_x(a,i);/sort_x(a+i+1,size-i-1);/voidsort_y(point*a,intsize)inttemp;inti=0,j=size-1;if(size=1)temp=a0.y;/while(iwhile(iif(iai.y=aj.y;i+;while(iif(iaj.y=ai.y;j-;ai.y=temp;sort_y(a,i);/sort_y(a+i+1,size-i-1);/intmadian_x(point*a,intsize)/intnum=size+1;/returnanum/2-1.x;returnsize%2?asize1.x:(asize1.
12、x+a(size1)+1.x)1;intmadian_y(point*a,intsize)intnum=size+1;returnanum/2-1.y;/returnsize%2?asize1.y:(asize1.y+a(size1)+1.y)1;intlucheng(point*a,intsize)篇三:递归与分治算法编程-实验报告南京信息工程大学实验(实习)报告实验名称递归与分治算法编程实验日期5.14得分指导教师刘文杰院计软专业软件工程年级二班次一姓名陈忠阳学号20XX13440121实验目的:1)掌握递归与分治策略的基本思想2)掌握递归算法在阶乘函数、Ackerman函数、整数划分等问
13、题上的应用3)掌握二分查找、合并排序、快速排序等问题的分治算法实现4)熟悉myeclipse或eclipse等Java开发工具的使用。2实验内容:1)采用myeclipse或eclipse编程实现基于分治策略的二分查找算法。2)采用myeclipse或eclipse编程实现基于分治策略的合并排序算法。3)采用myeclipse或eclipse编程实现基于分治策略的快速排序算法。3实验步骤1:二分搜索packagepackage;publicclasssuanfapublicstaticintbinarysearch(inta,intx,intn)intleft=0;intright=n-1;w
14、hile(leftintmiddle=(left+right)/2;if(x=amiddle)returnmiddle;if(xamiddle)returnmiddle+1;elseright=middle+1;return-1;publicstaticvoidmain(stringargs)intaa=newint1,3,5,7,9,11,13,15,17,19;suanfamain=newsuanfa();system.out.println(aatheresultis:+main.binarysearch(aa,9,10);2:合并排序算法packagep1;importjava.uti
15、l.Arrays;publicclassguyprivatestaticvoidmergesort(intarray,intstart,intend,inttempArray)if(endreturn;intmiddle=(start+end)/2;mergesort(array,start,middle,tempArray);mergesort(array,middle+1,end,tempArray);intk=0,leftIndex=0,rightIndex=end-start;system.arraycopy(array,start,tempArray,0,middle-start+1
16、);for(inti=0;itempArrayend-start-i=arraymiddle+i+1;while(kif(tempArrayrightIndextempArrayleftIndex)/从小到大arrayk+start=tempArrayleftIndex+;elsearrayk+start=tempArrayrightIndex-;k+;publicstaticvoidmain(stringargs)intarray=newint11,213,134,65,77,78,23,43;mergesort(array,0,array.length-1,newintarray.leng
17、th);system.out.println(Arrays.tostring(array);3:packagep1;publicclassQuicksortpublicstaticvoidmain(stringargs)intarray=49,38,65,97,76,13,27;quicksort(array,0,array.length-1);for(inti=0;isystem.out.println(arrayi);publicstaticvoidquicksort(intn,intleft,intright)intpivot;if(leftpivot=partition(n,left,right);quicksort(n,left,pivot-1);quicksort(n,pivot+1,right);publicstaticintpartition(intn,intleft,intright)intpivotkey=nleft;while(leftwhile(leftnleft=nright;while(leftnright=nleft;nleft=pivotkey;returnleft;4实验分析和总结通过这次实验,使我掌握了基于分治策略的二分查找算法,合并排序算法,快速排序算法。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1