欢迎来到天天文库
浏览记录
ID:8928407
大小:13.50 KB
页数:2页
时间:2018-04-12
《算法实验经典两道题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一:递归函数的设计与实现实验目的:掌握递归函数的设计与实现方法实验原理:递归函数的设计实验步骤:编写程序实现教材P12例2-5整数划分问题问题描述:整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。思路:递归函数的声明为intsplit(intn,intm);其中n为要划分的正整数,m是划分中的最大加数(当m>n时,最大加数为n), 1当n=1或m=1时,split的值为1,可根据上例看出,只有一个划分1或1+1+1+1+1+1 可用程序表示为if(n==1
2、
3、m==1)return1; 2下面看一看m
4、和n的关系。它们有三种关系 (1)m>n 在整数划分中实际上最大加数不能大于n,因此在这种情况可以等价为split(n,n); 可用程序表示为if(m>n)returnsplit(n,n); (2)m=n 这种情况可用递归表示为split(n,m-1)+1,从以上例子中可以看出,就是最大加 数为6和小于6的划分之和 用程序表示为if(m==n)return(split(n,m-1)+1); (3)m5、加数小于4划分数和整数2的划分数的和。 因此,split(n,m)可表示为split(n,m-1)+split(n-m,m) 实验要求:(1)使用C++或TC2.0(2)上机前要有源代码或流程图。实验二:归并排序的分治策略设计实验目的:掌握使用分治策略消除递归;基本掌握分治策略的原理方法。实验原理:分治策略实验步骤:利用分治策略编程实现合并排序,教材P21-22;问题描述:合并排序(MERGESORT),是用分之策略实现对n个元素进行排序的算法。合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。算法思想:基6、本思想是将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。方案一:假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个N/2个长度为2或1的有序子序列,再两两合并,如此重复,值得得到一个长度为N的有序数据序列为止,这种排序方法称为2—路合并排序。方案二:给定n个元素(也叫关键字)序列a[1],...,a[n],将其划分为两个集合a[1],...,a[n/2]和a[n/2+1],...,a[n]。每个集合各自进行排序,归并所得的有7、序序列可以得到一个新的有n个元素的有序序列。在其中,分解操作是得到两个相同大小的集合,而归并操作将两个有序集合合二为一。实验要求:(1)使用C++或TC2.0(2)上机前要有源代码或流程图。
5、加数小于4划分数和整数2的划分数的和。 因此,split(n,m)可表示为split(n,m-1)+split(n-m,m) 实验要求:(1)使用C++或TC2.0(2)上机前要有源代码或流程图。实验二:归并排序的分治策略设计实验目的:掌握使用分治策略消除递归;基本掌握分治策略的原理方法。实验原理:分治策略实验步骤:利用分治策略编程实现合并排序,教材P21-22;问题描述:合并排序(MERGESORT),是用分之策略实现对n个元素进行排序的算法。合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。算法思想:基
6、本思想是将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。方案一:假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个N/2个长度为2或1的有序子序列,再两两合并,如此重复,值得得到一个长度为N的有序数据序列为止,这种排序方法称为2—路合并排序。方案二:给定n个元素(也叫关键字)序列a[1],...,a[n],将其划分为两个集合a[1],...,a[n/2]和a[n/2+1],...,a[n]。每个集合各自进行排序,归并所得的有
7、序序列可以得到一个新的有n个元素的有序序列。在其中,分解操作是得到两个相同大小的集合,而归并操作将两个有序集合合二为一。实验要求:(1)使用C++或TC2.0(2)上机前要有源代码或流程图。
此文档下载收益归作者所有