算法设计与分析 实验指导书

合集下载

《算法设计与分析》实验指导书_bfm(全)

《算法设计与分析》实验指导书_bfm(全)

《算法设计与分析》实验指导书本书是为配合《算法分析与设计实验教学大纲》而编写的上机指导,其目的是使学生消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。

上机实验一般应包括以下几个步骤:(1)、准备好上机所需的程序。

手编程序应书写整齐,并经人工检查无误后才能上机。

(2)、上机输入和调试自己所编的程序。

一人一组,独立上机调试,上机时出现的问题,最好独立解决。

(3)、上机结束后,整理出实验报告。

实验报告应包括:题目、程序清单、运行结果、对运行情况所作的分析。

本书共分阶段4个实验,每个实验有基本题和提高题。

基本题必须完成,提高题根据自己实际情况进行取舍。

题目不限定如下题目,可根据自己兴趣爱好做一些与实验内容相关的其他题目,如动态规划法中的图象压缩,回溯法中的人机对弈等。

其具体要求和步骤如下:实验一分治与递归(4学时)一、实验目的与要求1、熟悉C/C++语言的集成开发环境;2、通过本实验加深对递归过程的理解二、实验内容:掌握递归算法的概念和基本思想,分析并掌握“整数划分”问题的递归算法。

三、实验题任意输入一个整数,输出结果能够用递归方法实现整数的划分。

四、实验步骤1.理解算法思想和问题要求;2.编程实现题目要求;3.上机输入和调试自己所编的程序;4.验证分析实验结果;5.整理出实验报告。

一、实验目的与要求1、掌握棋盘覆盖问题的算法;2、初步掌握分治算法二、实验题:盘覆盖问题:在一个2k×2k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。

在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

三、实验提示void chessBoard(int tr, int tc, int dr, int dc, int size) {if (size == 1) return;int t = tile++, // L型骨牌号s = size/2; // 分割棋盘// 覆盖左上角子棋盘if (dr < tr + s && dc < tc + s)// 特殊方格在此棋盘中chessBoard(tr, tc, dr, dc, s);else {// 此棋盘中无特殊方格// 用t 号L型骨牌覆盖右下角board[tr + s - 1][tc + s - 1] = t;// 覆盖其余方格chessBoard(tr, tc, tr+s-1, tc+s-1, s);}// 覆盖右上角子棋盘if (dr < tr + s && dc >= tc + s)// 特殊方格在此棋盘中chessBoard(tr, tc+s, dr, dc, s);else {// 此棋盘中无特殊方格// 用t 号L型骨牌覆盖左下角board[tr + s - 1][tc + s] = t;// 覆盖其余方格chessBoard(tr, tc+s, tr+s-1, tc+s, s);}// 覆盖左下角子棋盘if (dr >= tr + s && dc < tc + s)// 特殊方格在此棋盘中chessBoard(tr+s, tc, dr, dc, s);else {// 用t 号L型骨牌覆盖右上角board[tr + s][tc + s - 1] = t;// 覆盖其余方格chessBoard(tr+s, tc, tr+s, tc+s-1, s);}// 覆盖右下角子棋盘if (dr >= tr + s && dc >= tc + s)// 特殊方格在此棋盘中chessBoard(tr+s, tc+s, dr, dc, s);else {// 用t 号L型骨牌覆盖左上角board[tr + s][tc + s] = t;// 覆盖其余方格chessBoard(tr+s, tc+s, tr+s, tc+s, s);}}一、实验目的与要求1、熟悉二分搜索算法;2、初步掌握分治算法;二、实验题1、设a[0:n-1]是一个已排好序的数组。

算法设计与分析实验指导

算法设计与分析实验指导

《算法设计与分析》实验指导书目录实验一单链表的建立插入及删除 (3)实验二多项式加法 (5)实验三集合的表示与操作算法设计 (7)实验四迷宫问题求解 (8)实验五树的建立及遍历 (11)实验六图的遍历的演示 (12)实验七哈希表的设计 (15)实验八Kruskal算法的设计 (17)实验九归并排序的分治策略设计 (19)实验十哈夫曼编码的贪心算法设计 (21)实验十一递归与迭代程序设计 (22)实验十二多段图问题的动态规划算法设计 (24)实验十三作业调度问题 (26)实验十四回溯算法设计 (28)实验十五搜索顺序的选择 (29)实验十六蛇和梯子 (31)实验十七游戏中寻址算法的设计 (34)实验十八旅行商问题 (36)实验十九骑士游历算法设计 (38)实验二十输油管道问题的设计与实现 (40)实验二十一邮局选址问题的设计与实现 (42)实验二十二会场安排问题的设计与实现 (44)实验二十三目录树打印程序的设计 (46)实验二十四最少演员问题 (48)附:实验(设计)报告参考格式 (50)实验一单链表的建立插入及删除[实验目的]1.掌握单链表的建立插入及删除的算法;2.进一步熟悉指针的用法;[预习要求]1.认真阅读教材或参考书, 掌握线性表算法的基本思想;2.写出求解本实验的程序;3.设计好相应的测试用例。

[类型定义]typedef struct Lnode{int data;struct Lnode *next;}Lnode,*linklist;[实验提示]void create(link *h,int n){//创建单链表link p,q;int i;p=(link)malloc(sizeof(node));p->next=null;*h=p;q=p;for(i=1;i<=n;++i){p=(link)malloc(sizeof(node));scanf("%d",&p->data);p->next=null;q->next=p;q=p;}}void print(link h){//输出单链表link p;p=h->next;while(p){printf("%d ",p->data);p=p->next;}}void insertlist(linklist *L,int i,int e){//在单链表的第i个元素之前插入元素值为e的结点}void dellist(linklist *L,int i,int *e){//删除单链表的第i个结点,被删结点通过 e返回}[实验步骤]1.先用插表头或插表尾的方法建立单链表并输出,并测试你的程序,直至正确为止;2.再进行插入和删除程序的设计;3.将你的程序和实录的界面存盘备用。

算法分析与设计实验指导书

算法分析与设计实验指导书

《算法分析与设计》实验指导书《算法分析与设计》课程是计算机专业的一门必修课程。

开设算法分析与设计实验,目的就是为了使学生消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。

《算法分析与设计》课程实验的目的:是为了使学生在课程学习的同时,通过实验环境中的实际操作,对部分算法的具体应用有一个初步的了解,使学生加深了解和更好地掌握《算法分析与设计》课程教学大纲要求的内容。

《算法分析与设计》课程实验的注意事项:在《算法分析与设计》的课程实验过程中,要求学生做到:(1)预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现的情况提前作出思考和分析。

(2)认真书写实验报告。

实验报告包括实验目的和要求,实验情况及其分析。

(3)遵守机房纪律,服从辅导教师指挥,爱护实验设备。

(4)实验课程不迟到。

如有事不能出席,所缺实验一般不补。

《算法分析与设计》课程实验的验收:实验的验收将分为两个部分。

第一部分是上机操作,包括检查程序运行和即时提问。

第二部分是提交电子的实验报告。

实验一算法实现一一、实验目的与要求熟悉C/C++语言的集成开发环境;通过本实验加深对分治法、贪心算法的理解。

二、实验内容:掌握分治法、贪心算法的概念和基本思想,并结合具体的问题学习如何用相应策略进行求解的方法。

三、实验题1. 【伪造硬币问题】给你一个装有n个硬币的袋子。

n个硬币中有一个是伪造的。

你的任务是找出这个伪造的硬币。

为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。

试用分治法的思想写出解决问题的算法,并计算其时间复杂度。

2.【找零钱问题】一个小孩买了价值为33美分的糖,并将1美元的钱交给售货员。

售货员希望用数目最少的硬币找给小孩。

假设提供了数目有限的面值为25美分、10美分、5美分、及1美分的硬币。

算法设计与分析实验指导书

算法设计与分析实验指导书

算法设计与分析实验指导书. . .. . .算法设计与分析实验指导书东北大学软件学院2012年.. .专业. .目录算法设计与分析 (1)实验指导书 (1)前言 (3)实验要求 (4)实验1 分治法的应用(2学时) (5)1.实验目的 (5)2.实验类型 (5)3.预习要求 (5)4.实验基本要求 (5)5.实验基本步骤 (7)实验2动态规划(2学时) (9)1.实验目的 (9)2.实验类型 (9)3.预习要求 (9)4.实验基本要求 (9)5.实验基本步骤 (10)实验3 回溯法(4学时) (12)1.实验目的 (12)2.实验类型 (12)3.预习要求 (12)4.实验基本要求 (12)5.实验基本步骤 (13)前言《算法设计与分析》是一门面向设计,处于计算机科学与技术学科核心地位的教育课程。

通过对计算机算法系统的学习,使学生理解和掌握计算机算法的通用设计方法,培养对算法的计算复杂性正确分析的能力,为独立设计算法和对算法进行复杂性分析奠定基础。

要求掌握算法复杂度分析、分治法、动态规划法、贪心法、回溯法、分支限界法等算法的设计方法及其分析方法。

能将这些方法灵活的应用到相应的问题中,并且能够用C++实现所涉及的算法,并尽量做到低复杂度,高效率。

通过本课程的实验,使学生加深对课程容的理解,培养学生严密的思维能力,运用所学知识结合具体问题设计适用的算法的能力;培养学生良好的设计风格,激励学生创造新算法和改进旧算法的愿望和热情。

希望同学们能够充分利用实验条件,认真完成实验,从实验中得到应有的锻炼和培养。

希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《算法设计与分析》课程成为对大家有益的课程。

实验要求《算法设计与分析》课程实验的目的是为了使学生在课堂学习的同时,通过一系列的实验,使学生加深理解和更好地掌握《算法设计与分析》课程教学大纲要求的容。

在《算法设计与分析》的课程实验过程中,要求学生做到:(1)仔细观察调试程序过程中出现的各种问题,记录主要问题,做出必要说明和分析。

算法设计与分析实验指导书

算法设计与分析实验指导书

实验一串匹配程序设计(2学时)一、实验目的(1). 熟练掌握串匹配的含义(2). 掌握BF算法匹配的过程并编程实现(3). 熟悉C++编译环境的基本操作二、实验内容给定两个字符串S和T,用BF算法,在主串S中查找字串T,输出结果,输出时要求有文字说明。

请编写程序。

三、实验要求(1)、熟悉C++编译环境的基本操作(2)、考虑各种可能的情况(匹配成功或不成功)(3)、写出完整的程序四、实验结果实验二排序问题程序设计(2学时)一、实验目的(1). 掌握选择排序和起泡排序的基本思想(2). 掌握两种排序方法的具体实现过程(3). 在掌握的基础上编程实现两种排序方法二、实验内容输入一个待排序的序列,分别用选择排序和起泡排序两种排序方法将其变换成有序的序列,输出结果,输出时要求有文字说明。

请编写程序。

三、实验要求(1)、熟悉C++编译环境的基本操作(2)、考虑各种可能的情况(序列本身已是有序序列,序列不是有序序列)(3)、写出完整程序四、实验结果实验三数字旋转方阵程序设计(2学时)一、实验目的(1). 掌握分治法的设计思想(2). 掌握数字旋转方阵的具体实现过程(3). 熟练掌握二维数组的使用方法(4). 在掌握的基础上编程实现数字旋转方阵的实现过程二、实验内容给出一个初始数据,在此数据的基础上由外层向里层填写数据,完成一个数字旋转方阵,输出结果,输出时要求有文字说明。

请编写程序。

三、实验要求(1)、熟悉C++编译环境的基本操作(2)、考虑各种可能的情况(方阵有一层,两层或更多层)(3)、写出完整程序四、实验结果实验四排序中分治法的程序设计(2学时)一、实验目的(1). 掌握归并排序和快速排序的划分方法(2). 掌握归并排序和快速排序的具体分治策略(3). 在掌握的基础上编程两种排序方法的实现过程二、实验内容给出一个初始序列,分别用归并排序和快速排序两种分治法将所给序列变换为有序序列,输出结果,输出时要求有文字说明。

算法实验指导书

算法实验指导书

算法设计与分析实验指导书信电工程学院2015.7算法设计与分析一.实验目的算法设计与分析是计算机相关专业的核心课程之一。

本实验加深学生对算法设计的基本策略、主要方法及实验过程的理解;培养学生针对具体的问题,选择合适的数据结构和设计结构清晰、正确有效的算法的能力。

二.实验内容E05210801 算法概述E05210802 分治法E05210803 动态规划E05210804 贪心法E05210805 回溯法E05210806 分支限界法E05210807 NP完全问题E05210808 近似算法三.实验方法本课程所有实验均需上机进行,每个实验都有明确的实验目的,并根据实验要求提供实验题。

每位同学通过独立思考、与同学讨论、老师辅导答疑相结合的方法完成相应的实验题,在对题目进行分析、选择有效的方法、编程及测试的过程中,将达到加深学生印象、锻炼学生运用书本知识实际解决问题的能力。

四. 实验要求学生按照实验要求,上机前写好上机实验预习报告。

上机实验时按实验要求完成每一个实验的内容。

认真书写实验报告,内容包括:实验的目的、实验原理、实验内容、实验步骤、实验结果等。

实验一算法概述1. 实验目的(1) 复习数据结构课程的相关知识,实现课程间的平滑过渡;(2) 掌握并应用算法的数学分析和后验分析方法;(3) 理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。

2. 实验内容求两个自然数m和n的最大公约数。

3. 实验要求(1) 至少设计出三个版本的求最大公约数算法;(2) 对所设计的算法采用大O符号进行时间复杂性分析;(3) 上机实现算法,并用计数法和计时法分别测算算法的运行时间;(4) 通过分析对比,得出自己的结论。

实验二分治法1. 实验目的(1) 进一步掌握递归算法的设计思想以及递归程序的调试技术;(2) 理解这样一个观点:分治与递归经常同时应用在算法设计之中。

算法设计与分析实验指导书

算法设计与分析实验指导书

<<算法设计与分析>>实验指导书实验一、回溯法一、实验目的掌握回溯法求解问题的思想,学会利用其原理求解相关问题。

二、实验内容及要求1、八皇后问题八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。

该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

高斯认为有76种方案。

1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

要求对用C实现的回溯法进行验证,并使其能扩展到任意的皇后数的情况,同时对源程序给出详细的注释。

三、实验步骤1. 理解算法思想和问题要求;2. 编程实现题目要求;3. 上机输入和调试自己所编的程序;4. 验证分析实验结果;5. 整理出实验报告。

四、实验源代码1、八皇后问题(回溯法实现)#define QUEENNO 8#define MAXNO 32#include <stdio.h>#include <stdlib.h>int X[MAXNO];char D[MAXNO][MAXNO];int count=0;void initiate(int n);void nqueen(int n);void display(int n);main(){int queenno=QUEENNO;initiate(queenno);nqueen(queenno);printf("共有%d个解,解已经保存在D盘文件result.txt中\n",count); }void initiate(int n){int i;for(i=0;i<n;i++)X[i]=-1;return;}void nqueen(int n){ int k;X[0]=0;k=0;while(k>=0){X[k]++;while(X[k]<=n&&!place(k)){X[k]++;}if(X[k]<=n){ if(k==n-1) display(n);else {k++;X[k]=0;}}else{ k--;}}}int place(int k){int i;i=0;while(i<k){if((X[i]==X[k])||(abs(X[i]-X[k])==abs(i-k)))return 0;i++;}return 1;}void display(int n){FILE *fw;int i,j;count++;fw=fopen("D:\\result.txt","a");for(i=0;i<n;i++)for(j=0;j<n;j++)D[i][j]='o';for(i=0;i<n;i++)D[i][X[i]-1]='*';fprintf(fw,"%d\n",count);fprintf(fw,"-------------------------\n");for(i=0;i<n;i++)for(j=0;j<n;j++){if(j==n-1)fprintf(fw,"%c \n",D[i][j]);else fprintf(fw,"%c ",D[i][j]); }fprintf(fw,"-------------------------\n");fclose(fw);return;}实验二:分治法(2学时)问题陈述:对所给元素存储于数组中和存储于链表中两中情况,写出自然合并排序算法.解题思路:将待排序元素分成大小大相同的两个集合,分别对两个集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合.自然排序是通过一次扫描待排元素中自然排好序的子数组,再进行子数组的合并排序.程序代码:#include <iostream.h>const int N=100;void ScanTarget(int target[], int n, int head[], int tail[]);int CountHead(int head[]);void MergeSort(int a[], int head[], int tail[], int m);void MergePass(int x[], int y[], int s, int a[], int b[], int m);void Merge(int c[], int d[], int l, int m, int r);void main(){char a;do{int target[N],head[N],tail[N];int i=0,n,m;for(; i<N; i++){head[i]=-1;tail[i]=-1;}cout<<"请输入要排序的总数:"<<endl;cin>>n;cout<<"请输入要排序的数列:" <<endl;for(i=0; i<n; i++)cin>>target[i];ScanTarget(target,n,head,tail);m=CountHead(head);MergeSort(target,head,tail,m);cout<<"排序后:"<<endl;for(i=0; i<n; i++)cout<<target[i]<<" ";cout<<endl;cout<<"是否继续(y/n):"<<endl;cin>>a;}while(a!='n' && a!='N');}void ScanTarget(int target[], int n, int head[], int tail[])//扫描待排数组;{int i,j=0,k=0;head[k]=0;k++;for(i=1;i<n;i++){if(target[i-1]>target[i]){tail[j++]=i-1;head[k++]=i;}}tail[j]=n-1;}int CountHead(int head[])//求长度;{int i(0);while(head[i]!=-1){i++;}return i;}void MergeSort(int a[], int head[], int tail[], int m){int b[N];int s=1;while(s<m){MergePass(a,b,s,head,tail,m);s+=s;MergePass(b,a,s,head,tail,m);s+=s;}}void MergePass(int x[], int y[], int s, int a[], int b[], int m){int i=0;while(i <= m-2*s){Merge(x,y,a[i],b[i+s-1],b[i+2*s-1]);i=i+2*s;}if(i+s < m){Merge(x,y,a[i],b[i+s-1],b[m-1]);}else{for(int j=i; j<m; j++)for(int k=a[j]; k<=b[j]; k++)y[k]=x[k];}}void Merge(int c[], int d[], int l, int m, int r){int i,j,k;i=l;j=m+1;k=l;while((i<=m) && (j<=r)){if( c[i] <= c[j] )d[k++]=c[i++];else d[k++]=c[j++];}if( i>m ){for(int q=j; q<=r; q++)d[k++]=c[q];}else{for(int q=i; q<=m; q++)d[k++]=c[q];}}时间复杂度:通常情况下用自然合并排序所需要的合并次数较少。

算法分析与设计》实验指导与报告书

算法分析与设计》实验指导与报告书

《算法分析与设计》实验指导与报告书实验目录实验1 求最大公约数 (1)实验2 斐波那契数列 (3)实验3 最近对问题 (6)实验4 堆排序 (7)实验5 霍纳法则和二进制幂 (8)实验6 字符串匹配问题 (9)实验7 Warshall算法和Floyd算法 (10)实验8 最优二叉查找树 (11)实验9 Huffman编码* (12)实验10 求解非线性方程* (13)实验11 投资问题* (14)注:(1)实验4和实验5为变治法应用,二选一;(2)实验7和实验8为动态规划法应用,二选一;(3)带*号的实验为选做实验,根据课时及学生实验完成情况机动安排。

实验1 求最大公约数{c = a;a = b;b = c;}while(a % b != 0){c = a % b;a = b;b = c;}printf("%d", b);return 0;}连续整数检测算法最大公约数算法:#include <stdio.h>int main(){int a,b,t;printf("Please input two integers: ");scanf("%d %d",&a,&b);if(a<b)t=a;elset=b;while(t>=1){if((a%t==0)&&(b%t==0))break;t--;}printf("%d",t);return 0;}相减循环:#include<stdio.h>int main(){int m,n;printf("Please input two integers: ");scanf("%d%d",&m,&n);while(m!=n)if(m>n) m=m-n;else n=n-m;printf("%d",m);return 0;}教师评分实验2 斐波那契数列实验目的(1)求斐波那契数列;(2)区分递归和递推思想。

算法分析与设计实验指导书

算法分析与设计实验指导书

算法分析与设计实验指导书《算法分析与设计》实验指导书本书是为配合《算法分析与设计实验教学⼤纲》⽽编写的上机指导,其⽬的是使学⽣消化理论知识,加深对讲授容的理解,尤其是⼀些算法的实现及其应⽤,培养学⽣独⽴编程和调试程序的能⼒,使学⽣对算法的分析与设计有更深刻的认识。

上机实验⼀般应包括以下⼏个步骤:(1)、准备好上机所需的程序。

⼿编程序应书写整齐,并经⼈⼯检查⽆误后才能上机。

(2)、上机输⼊和调试⾃⼰所编的程序。

⼀⼈⼀组,独⽴上机调试,上机时出现的问题,最好独⽴解决。

(3)、上机结束后,整理出实验报告。

实验报告应包括:1)问题分析2)算法描述3)运⾏结果、4)算法性能分析。

实验⼀实验名称:贪⼼算法应⽤及设计实验学时:6学时实验类型:验证实验⽬的:1.理解贪⼼算法的基本思想2.掌握利⽤贪⼼算法求解问题的求解步骤实验容1.活动选择问题(2学时)问题描述:设有11个会议等待安排,⽤贪⼼法找出满⾜⽬标要求的会议集合,这些会议按结束时间的⾮减序排列如下表。

实验实现提⽰:1)数据结构设计:将会议开始时间存储在数组B中,结束时间存储在数组E中,数组下标为会议的代码。

结果存储在数组A中,其元素A[i]==true,表⽰会议i被选中。

2)算法:void GreedySelect(int n, struct time B[], struct time E[], bool A[]){int i,j;A[1]=true;j=1; i=2;while( i<=n)if (B[i]>=E[j]){ A[i]=true; j=i;}elseA[i]=false;}思考题:证明所得的解是最优解?2.单源点最短路径问题。

(2学时)问题描述如图所⽰的有向带权图中,求源点0到其余顶点的最短路径及最短路径长度。

并对算法进⾏性能分析。

实现提⽰1)数据结构设计:将图存储在邻接矩阵C中,结点个数为n,源点编号为u, 源点u到其余顶点的最短路径长度存储在dist[],最短路径存储在p[]。

《算法设计与分析》实验指导书

《算法设计与分析》实验指导书

《算法设计与分析》实验指导书《算法设计与分析》实验指导书本文档主要用于《算法设计与分析》课程的实验指导。

《算法设计与分析》旨在教会学生处理各种问题的方法,通过实验,使学生能够把所学的方法用于具体的问题,并对所用算法进行比较分析,从而提高学生分析问题、解决问题的能力。

通过该课程的实验,使学生对课堂中所讲述的内容有一个直观的认识,更好地掌握所学的知识,培养学生的实际动手能力,加强学生创新思维能力的培养。

本课程设计了7个设计型实验。

实验内容包括用分治法、动态规划、贪心法、回溯法以及分支限界法求解问题。

一、实验内容安排二、实验基本要求实验前要求学生一定要先了解实验目的、内容、要求以及注意事项,要求学生熟悉实验对象,设计并编写相应的算法。

学生应独立完成所布置实验内容,编写代码,运行程序,记录结果并撰写实验报告。

三、实验报告要求实验结束后,应及时整理出实验报告,实验报告提交书面文档。

四、考核方式理论考试(60%)+实验(30%)+作业(10%)五、实验内容与指导实验一快速排序问题1.实验目的(1) 用分治法求解该问题。

2.实验环境PC机,要求安装Eclipse软件或VC++软件供学生实验。

3.实验内容有n个无序的数值数据,现要求将其排列成一个有序的序列。

4. 实验步骤(1) 输入实现该问题的源代码;(2) 输入测试数据,验证代码的正确性。

5.实验要求(1)做好实验预习,熟悉本实验中所使用的开发环境。

(2)写出实验报告①实验目的②实验内容③出错信息及处理方法④实验结果实验二最少硬币问题1.实验目的(1) 用动态规划求解该问题。

2.实验环境PC机,要求安装Eclipse软件或VC++软件供学生实验。

3.实验内容有n种不同面值的硬币,各硬币面值存于数组T[1:n];现用这些面值的钱来找钱;各面值的个数存在数组Num[1:n]中。

对于给定的1≤n≤10,硬币面值数组、各面值的个数及钱数m,0<=m<=2001,设计一个算法,计算找钱m的最少硬币数。

算法实验指导书12级

算法实验指导书12级

算法实验指导书12级《算法设计与分析》实验指导书本实验指导书是为配合《算法设计与分析》课程实验而编写的,其目的是使学生消化算法理论知识,加深对课堂讲授内容的理解,尤其是一些典型算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的设计与分析有更深刻的认识。

一、上机实验应遵循以下步骤:(1)实验前,先准备好上机所需的程序。

手编程序应书写整齐,并经自我检查无误后才能上机。

(2)实验时,输入并调试自己所编的程序,独立上机调试,上机时出现的问题,最好能自己独立解决。

(3)实验结束后,按照规定整理出实验报告,并在规定时间内提交。

二、实验报告的内容:实验报告应该包括:实验名称、实验目的、实验题目、问题分析、程序清单、运行结果、实验结论(即算法的时间空间分析与改进建议)。

三、需写出实验报告的实验:实验一、实验四、实验五。

实验一递归与迭代算法一、实验目的与要求1、通过本实验掌握迭代算法和递归算法的基本思想及设计工作的主要步骤。

2、通过本实验加深对循环和递归过程的理解。

3、通过本实验加深对迭代过程的理解。

4、掌握两种算法策略的主要适用范围。

二、实验题目:1、求2+22+222+……+22……22(精确计算)n个22、从键盘输入任一正整数n(n>=3),打印如下图所示的n×n 方阵(下图中n=7)。

1 2 3 4 5 6 724 25 26 27 28 29 823 40 41 42 43 30 922 39 48 49 44 31 1021 38 47 46 45 32 1120 37 36 35 34 33 1219 18 17 16 15 14 133、完成给“余”猜数的游戏:心里先想好一个1~100之间的整数x,然后输入3个除数a、b、c,再输入x分别除以a、b、c后所得到的余数ra、rb、rc,计算机能求出这个数x并输出x。

4、用递归函数判断字符串str是否为“回文”。

三、实验步骤1、理解算法思想和问题要求。

算法分析与设计实验指导书

算法分析与设计实验指导书

《算法分析与设计》实验指导本书是为配合《算法分析与设计实验教学大纲》而编写的上机指导,其目的是使学生消化理论知识,加深讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使用学生对算法的分析与设计有更深刻的认识。

上机实验一般应包括以下几个步骤:1、准备好上机所需的程序,手编程序应书写整齐,并经人工检查无误后才能上机。

2、上机输入和调试自己所编的程序。

一人一组,独立上机调试,上机时出现的问题,最好独立解决。

3、上机结束后,整理出实验报告。

实验报告应包括:题目,程序清单,运行结果,对运行情况所作的分析。

本书共分阶段4个实验,每个实验有基本题和提高题。

基本题必须完成,提高题根据自己实际情况进行取舍。

题目不限定如下题目,可根据自己兴趣爱好做一些与实验内容相关的其它题目,如动态规划法中的图象压缩,回溯法中的人机对弈等。

其具体内容如下:实验一分治与递归(4学时)基本题一:基本递归算法一一、实验目的与要求1、熟悉C/C++语言的集成开发环境;2、通过本实验加深对递归过程的理解;二、实验内容掌握递归算法的概念和基本思想,分析结果能够用递归方法实现整数的划分。

三、实验题:任意输入一个整数,输出结果能够用递归方法实现整数的划分。

四、四实验步骤1、理解算法思想和问题要求;2、编程实现题目要求;3、上机输入和调试自己所编写的程序;4、验证分析实验结果;5、整理实验报告。

基本题二:棋盘覆盖问题一、实验目的与要求1、掌握棋盘覆盖问题的算法;2、初步掌握分治算法。

二、实验题目棋盘覆盖问题在一个2k*2k方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一个特殊棋盘。

在棋盘覆盖问题中,要用图标4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

提高题一:二分搜索一、实验目的与要求1、熟悉二分搜索算法;2、初步掌握分治算法。

二、实验题1、高a【0:n-1】是一个已排好的数组。

《算法设计与分析》实验指导书(6学时)

《算法设计与分析》实验指导书(6学时)

《算法设计与分析B》实验指导书实验一分治与递归(2学时)[实验目的]1.基本掌握分治算法的原理.2.掌握递归算法及递归程序的设计.3.能用程序设计语言求解相关问题.[预习要求]1.了解用分治法求解的问题:当要求解一个输入规模为n,且n的取值相当大的问题时,如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1<k≤n,而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。

那末,对于这类问题分治法是十分有效的。

2.掌握分治法的一般控制流程。

DanC(p,q)global n,A[1:n]; integer m,p,q; // 1≤p≤q≤nif Small(p,q) then return G(p,q);else m=Divide(p,q); // p≤m<qreturn Combine(DanC(p,m),DanC(m+1,q));endifend DanC3.实现典型的分治算法的编程与上机实验,验证算法的时间复杂性函数。

[实验题]选题要求:题目不限定如下题目,但选题必须采用分治法求解一、实验目的与要求1、掌握棋盘覆盖问题的算法;2、初步掌握分治算法二、实验题:盘覆盖问题:在一个2k×2k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。

在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

一、实验要求与目的1、了解分治法的基本思想,掌握递归程序编写方法;2、使用分治法编程,求解线形序列中第k小元素。

二、实验内容1、给定线形序列集中n个元素和一个整数k,1≤k≤n,输出这n个元素中第k小元素的值及其位置。

2、简述该算法的原理、步骤。

对该算法与直接排序查找进行比较。

3、编写并调试程序。

测试要求:元素个数不少于100;分三种情况:k=1、k=n和k=中位数。

算法设计与分析课程设计实习指导书--2018级-0705

算法设计与分析课程设计实习指导书--2018级-0705

《算法设计与分析课程设计》指导书《算法设计与分析课程设计》实习指导书一、课程设计目的本课程设计是在学生学习《算法设计与分析》课程后,进行的一次针对具体问题进行算法设计与分析的综合训练,其目的在于加深算法设计分析的理解,掌握算法分析设计方法。

二、算法设计与分析课程设计要求1.学生必须仔细阅读《算法设计与分析课程设计》实习方案,认真主动完成课设的要求。

有问题及时主动通过各种方式与教师联系沟通。

2.学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。

3.课程设计按照教学要求需要一周(5天)时间完成。

三、实验所用仪器及实验环境PC机,Codeblocks软件环境。

四、实习基本内容本次课程设计要求在(一)、(二)、(三)、(四)组中每组选择至少一个题目完成。

(一)分治策略1、输油管道问题【题目描述】某石油公司计划建造一条由西向东的主输油管道,该管道要穿过一个有n口油井的油田。

从每口油田都要有一条输油管道沿最短路径(或南或北)与主管道相连。

如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管长度总和最小的位置?【输入】第一行是一个整数n,表示油井数量(1-1000之间),接下来n行是油井的位置,每行两个整数x和y。

【输出】各油井到主管道之间的输油管道最小长度总和。

【输入样例】51 22 21 33 -23 3【输出样例】62、船的价值问题描述:大橙子最近在玩《艦これ》,因此大橙子收集了很多很多的船(这里我们假设大橙子氪了很多金,开了无数个船位)。

去除掉重复的船之后,还剩下N(1≤N≤1,000,000)种不同的船。

每一艘船有一个稀有值,任意两艘船的稀有值都不相同,稀有值越小的船越稀有,价值也就越高。

Nettle现在通过大建又造出了一艘船,他想知道这艘船是不是重复的。

算法设计与分析实验指导书

算法设计与分析实验指导书

《算法设计与分析》实验指导书实验一递归与分治1、实验目的(1)掌握设计有效算法的分治策略;(2)通过合并排序和快速排序两个示例学习分治策略设计技巧。

2、实验要求(1)熟练掌握分治法的基本思想及其应用实现;(2)理解所给出的算法,并对其加以改进。

3、实验内容(1)分治法基本思想如果原问题可分割成k个子问题,1<k≤n ,且这些子问题都可解,并可利用这些子问题的解求出原问题的解。

由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。

在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。

(2)分治法--算法设计模式如下:Divide-and-Conquer(P)1) if |P|≤n02) then return(ADHOC(P))3) 将P分解为较小的子问题P1 ,P2 ,...,Pk4) for i←1 to k5) 5. do yi ← Divide-and-Conquer(Pi) △递归解决Pi6) 6. T ← MERGE(y1,y2,...,yk)△合并子问题7) return(T)4、实验方法1)合并排序:将待排序元素分成个数大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合并成为所要求的排序集合。

2)快速排序:对于输入的子序列L[p..r],如果规模足够小则直接进行排序,否则分三步处理:①分解(Divide):将输入的序列L[p..r]划分成两个非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。

②递归求解(Conquer):通过递归调用快速排序算法分别对L[p..q]和L[q+1..r]进行排序。

③合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在L[p..q]和L[q+1..r]都排好序后不需要执行任何计算L[p..r]就已排好序。

算法设计与分析实验指导

算法设计与分析实验指导

递归与分治二分查找合并排序快速排序回溯0-1背包问题装载问题堡垒问题(ZOJ1002)*翻硬币问题8皇后问题素数环问题迷宫问题*农场灌溉问题(ZOJ2412)*求图像的周长(ZOJ1047)*骨牌矩阵*字母转换(ZOJ1003)*踩气球(ZOJ1004)搜索Floodfill电子老鼠闯迷宫跳马独轮车皇宫小偷分酒问题*找倍数*8数码难题动态规划最长公共子序列计算矩阵连乘积凸多边形的最优三角剖分电路布线问题防卫导弹石子合并最小代价子母树旅游预算皇宫看守游戏室问题*基因问题*田忌赛马贪心与随机算法活动安排问题搬桌子问题*照亮的山景*用随即算法求解8皇后问题素数测试实验一:递归与分治实验目的理解递归算法的思想和递归程序的执行过程,并能熟练编写递归程序。

掌握分治算法的思想,对给定的问题能设计出分治算法予以解决。

实验预习内容编程实现讲过的例题:二分搜索、合并排序、快速排序。

对本实验中的问题,设计出算法并编程实现。

试验内容和步骤1.二分查找在对线性表的操作中,经常需要查找某一个元素在线性表中的位置。

此问题的输入是待查元素x和线性表L,输出为x在L中的位置或者x不在L中的信息。

2.合并排序3.快速排序以上算法的一个执行实例如图1所示,其中pivot=L[p]=5:Partition过程的一个执行实例实验总结及思考合并排序的递归程序执行的过程实验二:回溯算法实验目的:熟练掌握回溯算法实验内容:回溯算法的几种形式实验步骤:1.回溯算法的一般模式a)用回溯算法搜索子集树的一般模式void search(int m){if(m>n) //递归结束条件output(); //相应的处理(输出结果)else{a[m]=0; //设置状态:0表示不要该物品search(m+1); //递归搜索:继续确定下一个物品a[m]=1; //设置状态:1表示不要该物品search(m+1); //递归搜索:继续确定下一个物品}}b)用回溯算法搜索子集树的一般模式void search(int m){if(m>n) //递归结束条件output(); //相应的处理(输出结果)elsefor(i=m;i<=n;i++){swap(m,i); //交换a[m]和a[i]if()if(canplace(m)) //如果m处可放置search(m+1); //搜索下一层swpa(m,i); //交换a[m]和a[i](换回来)}}习题1.0-1背包问题在0 / 1背包问题中,需对容量为c 的背包进行装载。

《算法设计与分析报告报告材料》实验指导及报告材料书

《算法设计与分析报告报告材料》实验指导及报告材料书

常熟理工学院
《算法设计与分析》实验指导与报告书
______学年第____ 学期
专业:___________________________________________ 学号:___________________________________________ 姓名:___________________________________________ 实验地点:___________________________________________ 指导教师:___________________________________________
计算机科学与工程学院
2012
实验目录
实验一求最大公约数 (4)
实验二串匹配问题 (7)
实验三斐波那契数列 (10)
实验四堆的创建与堆排序 (13)
实验五霍纳法则 (16)
实验六Warshall算法和Floyed算法 (19)
实验七最优二叉查找树 (22)
实验八解非线性方程的算法 (25)
实验一求最大公约数
实验二串匹配问题
实验三斐波那契数列
实验四堆的创建与堆排序
实验五霍纳法则
实验六Warshall算法和Floyed算法
实验七最优二叉查找树
实验八解非线性方程的算法。

《算法设计与分析》实验目的

《算法设计与分析》实验目的

《算法设计与分析》实验指导书曹严元计算机与信息科学学院2007年5月目录实验一递归算法与非递归算法 (2)实验二分治算法 ................................................... 错误!未定义书签。

实验三贪心算法 (3)实验四动态规划 (2)实验五回溯法 (3)实验六分枝—限界算法 (4)实验七课程设计 (4)实验一递归与分治算法实验目的1.了解并掌握递归的概念,掌握递归算法的基本思想;2.掌握分治法的基本思想方法;3.了解适用于用递归与分治求解的问题类型,并能设计相应递归与分治算法;4.掌握递归与分治算法复杂性分析方法,比较同一个问题的递归算法与循环迭代算法的效率。

实验二动态规划实验目的1.掌握动态规划的基本思想方法;2.了解适用于用动态规划方法求解的问题类型,并能设计相应动态规划算法;3.掌握动态规划算法复杂性分析方法。

实验三贪心算法实验目的1.掌握贪心法的基本思想方法;2.了解适用于用贪心法求解的问题类型,并能设计相应贪心法算法;3.掌握贪心算法复杂性分析方法分析问题复杂性。

实验五回溯法实验目的1.掌握回溯法的基本思想方法;2.了解适用于用回溯法求解的问题类型,并能设计相应回溯法算法;3.掌握回溯法算法复杂性分析方法,分析问题复杂性。

实验六 分枝—限界算法实验目的1. 掌握分枝—限界的基本思想方法;2. 了解适用于用分枝—限界方法求解的问题类型,并能设计相应动态规划算法;3. 掌握分枝—限界算法复杂性分析方法,分析问题复杂性。

实验七 课程设计实验目的1. 在已学的算法基本设计方法的基础上,理解算法设计的基本思想方法;2. 掌握对写出的算法的复杂性分析的方法,理解算法效率的重要性;3. 能运用所学的基本算法设计方法对问题设计相应算法,分析其效率,并建立对算法进行改进,提高效率的思想意识。

预习与实验要求1. 预习实验指导书及教材的有关内容,回顾所学过的算法的基本思想;2. 严格按照实验内容进行实验,培养良好的算法设计和编程的习惯;3. 认真听讲,服从安排,独立思考并完成实验。

算法设计与分析课程设计-实验指导书 -

算法设计与分析课程设计-实验指导书 -

算法设计与分析课程设计实验指导书一、运动员比赛日程表设有n=2k个运动员要进行网球比赛。

设计一个满足以下要求的比赛日程表:●每个选手必须与其它n-1个选手各赛一次●每个选手一天只能赛一次●循环赛一共进行n-1天1、运用分治策略,该问题的递归算法描述如下,根据算法编制程序并上机通过。

输入:运动员人数n(假定n恰好为2的i次方)输出:比赛日程表A[1..n,1..n]1. for i←1 to n //设置运动员编号2. A[i,1]←i3. end for4. Calendar(0,n) //位移为0,运动员人数为n。

过程Calendar(v, k) //v表示位移(v=起始行-1),k表示运动员人数。

1. if k=2 then //运动员人数为2个2. A[v+2,2]←A[v+1,1] //处理右下角3. A[v+1,2]←A[v+2,1]//处理右上角4. else5. Calendar(v,k/2) //假设已制定了v+1至v+k/2运动员循环赛日程表6. Calendar(v+k/2,k/2) //假设已制定了v+k/2+1至v+k运动员循环赛日程表7. comment:将2个k/2人组的解,组合成1个k人组的解。

8. for i←1 to k/29. for j←1 to k/210. A[v+i+k/2,j+k/2]←A[v+i,j] //沿对角线处理右下角11. end for12. end for13. for i←k/2+1 to k14. for j←1 to k/215. A[v+i-k/2,j+k/2]←A[v+i,j] //沿对角线处理右上角16. end for17. end for18. end if2、编制该问题的非递归算法,上机通过。

将如上文件保存在命名为“学号+姓名+实验一”的文件夹中并上传到指定的服务器。

二、最长公共子序列运用动态规划法最长公共子序列问题,给出最优值并输出最优解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法设计与分析课程实验指导书一、 使用说明
本课程的目的是使学生掌握计算机科学技术领域中的一些常用的、经典的算 法设计技术,学会分析算法、估计算法的时空复杂性,在非数值计算的层面上, 具备把实际问题抽象描述为数学模型的能力,同时能针对不同的问题对象设计有 效的算法,用典型的方法来解决科学研究及实际应用中所遇到的问题。并且具备 分析算法效率的能力,能够科学地评估有关算法和处理方法的效率。
上机的工作环境要求:Windows 2000 或以上操作系统、VC 或 Python 学生应按指导教师的要求独立完成实验,并按要求撰写实验报告(应包含实 验核心程序、实验过程和结果中的关键图片)。
二、 实验说明
1.分治法 目的: 理解递归算法的思想和递归程序的执行过程,并能熟练编写递归程序。掌握分治算法的思想, 对给定的问题能设计出分治算法予以解决。 内容: 二分查找 在对线性表的操作中,经常需要查找某一个元素在线性表中的位置。此问题的输入是待查元 素 x 和线性表 L,输出为 x 在 L 中的位置或者 x 不在 L 中的信息。 提高:试对线性表运用快速排序的方法进行排序。 2.减治法 目的: 理解减治法的思想,并能熟练的编写程序。对给定的问题予以解决。 内容: 深度优先搜索和广度优先搜索 在对图的操作过程中,经常要查找某一元素在图中的位置。此问题的输入为一个图,输出图 的顶点,并按照深度优先或者广度优先遍历第一次访问到的先后次序,用连续的整数标记。 3.动态规划 目的:理解动态规划的基本思想,理解动态规划算法的两个基本要素最优子结构性质和子问
-1-
题的重叠性质。熟练掌握典型的动态规划问题。掌握动态规划思想分析问题的一般方法,对 较简单的问题能正确分析,设计出动态规划算法,并能快速编程实现。 内容:编程实现最长公共子序列问题、矩阵连乘问题,设计出算法并编程实现。 4.贪心算法 目的:理解贪心算法的思想,掌握贪心算法的思想,对给定的问题能设计出贪心算法予以解 决。 内容:0-1 背包问题 在 0 / 1 背包问题中,需对容量为 c 的背包进行装载。从 n 个物品中选取装入背包的物品, 每件物品 i 的重量为 wi ,价值为 pi 。对于可行的背包装载,背包中物品的总重量不能超 过背包的容量,最佳装载是指所装入的物品价值最高。
编写者签字 : 周华兵 审阅者签字:
分管实验教学领导签字:
-2-
相关文档
最新文档