欢迎来到天天文库
浏览记录
ID:21064847
大小:55.50 KB
页数:3页
时间:2018-10-19
《实验4分治算法设计技术应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验4分治算法设计技术的应用一、算法设计技术当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。下面通过实例加以说明。【例】在n个元素中找出最大元素和最小元素。我们可以把这n个元素放在一个数组中,用直接比较法求
2、出。算法如下:voidmaxmin1(intA[],intn,int*max,int*min){inti;*min=*max=A[0];for(i=2;i*max)*max=A[i];if(A[i]<*min)*min=A[i];}}上面这个算法需比较2(n-1)次。能否找到更好的算法呢?我们用分治策略来讨论。把n个元素分成两组:A1={A[1],...,A[int(n/2)]}和A2={A[int(N/2)+1],...,A[N]}分别求这两组的最大值和最小值,然后分别将这两组的最大值和最小值相
3、比较,求出全部元素的最大值和最小值。如果A1和A2中的元素多于两个,则再用上述方法各分为两个子集。直至子集中元素至多两个元素为止。例如有下面一组元素:-13,13,9,-5,7,23,0,15。用分治策略比较的过程如下:图中每个方框中,左边是最小值,右边是最大值。从图中看出,用这种方法一共比较了10次,比直接比较法的14次减少4次,即约减少了1/3。算法如下:voidmaxmin2(intA[],inti,intj,int*max,int*min)/*A存放输入的数据,i,j存放数据的范围,初值为0,n-1,*max,int*m
4、in存放最大和最小值*/{intmid,max1,max2,min1,min2;3if(j==i){最大和最小值为同一个数;return;}if(j-1==i){将两个数直接比较,求得最大会最小值;return;}mid=(i+j)/2;求i~mid之间的最大最小值分别为max1,min1;求mid+1~j之间的最大最小值分别为max2,min2;比较max1和max2,大的就是最大值;比较min1和min2,小的就是最小值;}利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简
5、单和均匀的特点,是经常采用的一种有效的方法,例如二分法检索。运用分治策略解决的问题一般来说具有以下特点:1、原问题可以分解为多个子问题,这些子问题与原问题相比,只是问题的规模有所降低,其结构和求解方法与原问题相同或相似。2、原问题在分解过程中,递归地求解子问题,由于递归都必须有一个终止条件,因此,当分解后的子问题规模足够小时,应能够直接求解。3、在求解并得到各个子问题的解后,应能够采用某种方式、方法合并或构造出原问题的解。不难发现,在分治策略中,由于子问题与原问题在结构和解法是的相似性,用分治方法解决的问题,大都采用了递归的形式
6、。在各种排序方法中,如归并排序、堆排序、快速排序等,都存在有分治的思想。二、实验题目1.设计程序利用分治策略求n个数的最大值和最小值。2.利用分治策略,在n个不同元素中找出第k个最小元素。三、实验要求1.该实验的课内学时是4个课时。四、实验的提示1.实验题目2的提示把n个元素放在顺序表中,然后取第k个元素作为标准m,把n个元素重新排列,分成两个区间:小于标准m的元素区间1~j,大于标准m的元素区间j+1~n,接下来有三种情况:1)j=k,则找到第k个元素。2)jk,则第k个元素在区间1
7、~j。在情况2和3中继续寻找。五、实验说明1.互相之间可以进行算法的讨论,但文档以及程序每个人必须独立完成,如果发现雷同,则重做。2.认真准备,实验前做好准备工作,准备工作包括完成实验报告中的(1)~(5)的部分,实验报告中(6)~(7)部分在实验结束后继续填写。3.程序要上机调试成功并形成可执行的程序,记录调试过程中出现的错误现象以及如果改正4.程序的运行结果要结合程序测试数据进行分析。35.提交实验报告(实验报告的格式见附录B)和源程序以及可以运行的程序。六、实验报告内容(1)实验题目(2)实验设计的数据结构及说明(3)用层
8、次图描述程序结构,并说明程序各函数的名称、功能,图示各函数之间相互的调用关系。(4)各个函数的设计及说明(5)测试数据的设计及预期结果(6)调试过程记录:在程序调试过程中可能会出现许多问题,对这些问题要逐个记录错误位置、编译的描述(英文以及中文的含义)、如何解决
此文档下载收益归作者所有