学号 姓名 实验二递归与分治策略
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析与设计实验报告
学号姓名班级
上课地点教师上课时间
实验二递归与分治策略
1. 实验目的
1.1 理解递归算法的思想,并学会应用递归思想解决问题。
1.2 掌握分治法的基本思想,并学会应用分治思想解决问题。
2. 实验环境
2.1 Eclipse
2.2 Window XP
3. 实验内容(以下三题选做两题,也可以全做)
3.1 全排列问题:输入n个字符,要求输出这n个字符的所有排列情况。
要求利用递归与分治思想设计与实现。
3.2 二分搜索问题:输入n个按升序排列的元素和待查找的元素x,输出是否存在这一特定元素x。
要求利用递归与分治思想设计与实现。
3.3 随机快速排序问题:利用随机快速排列算法对输入的n个元素从小到大排列,并输出排列结果。
要求利用递归与分治思想设计与实现。
4. 教师批改意见
成绩
签字:
日期:
1
实验报告细表
1 全排列
1.1 算法设计思想
可文字描述,适当添加一些伪代码,或者流程图来进行补充说明
1、将当前元素与后面位置的每个元素依此交换
2、交换后取后一个位置的元素为当前元素的位置,再执行1
3、当当前位置是最后一个元素的位置则输出
全排列伪代码为:
public static void perm(int[]arr,int k,int m)
{
if(k==m-1)
{
System.out.println(Arrays.toString(arr));
}
else
{
for(int i=k;i<m;i++)
{
swap(arr,k,i);
perm(arr,k+1,m);
swap(arr,k,i);
}
}
}
1.2 程序源码
全排列代码:
package quanpailie;
import java.util.Arrays;
public class quanpailie {
public static void main(String[] args)
{
int[]arr={1,2,3};
perm(arr,0,arr.length);
}
public static void swap(int[]arr,int i,int j)
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void perm(int[]arr,int k,int m)
{
if(k==m-1)
{
System.out.println(Arrays.toString(arr));
}
else
{
for(int i=k;i<m;i++)
{
swap(arr,k,i);
perm(arr,k+1,m);
swap(arr,k,i);
}
}
}
}
1.3 实验结论
要有截图,验证最后结果(图片分布要合理)。
截图格式参考如下:
输入
int[]arr={1,2,3};
输出
1.4 心得体会
全排列在数学中有学过,但是用代码实现由一定的难度。
通过参考和修正,终于得到正确代码。
这是一个很棒的过程。
3
2二分搜索问题
2.1 算法设计思想
将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较,如果x= a[n/2],则找到x,算法终止。
若x< a[n/2],则只要在数组a的左半部分继续搜索,若x> a[n/2],则只要在数组a的右半部分继续搜索。
二分查找伪代码为
public static int binarySearch(int a[],int left,int right,int x)
{
if (left<=right)
{
int middle = (left+right)/2;
if(x == a[middle])
return middle;
else if(x<a[middle])
return binarySearch(a,left,middle-1,x);
else if(x>a[middle])
return binarySearch(a,middle+1,right,x);
}
else
return -1;
}
2.2 程序源码
package binarySearch;
public class binarySearch {
public static void main(String[] args)
{
int a []={2,4,8,9,18,35,90,98};
System.out.println(binarySearch(a,0,a.length-1,18));
}
public static int binarySearch(int a[],int left,int right,int x)
{
if (left<=right)
{
int middle = (left+right)/2;
if(x == a[middle])
return middle;
else if(x<a[middle])
return binarySearch(a,left,middle-1,x);
else if(x>a[middle])
return binarySearch(a,middle+1,right,x);
}
else
return -1;
return x;
}
}
2.3 实验结论
2.4 心得体会
二分搜索算法在课本上有非递归法,递归法是简单且相对有效的算法。
通过这节课的编程,对递归可以更加熟练的运用
5。