算法设计实验指导书

合集下载

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

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

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

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

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

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

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

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

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

(4)实验课程不迟到。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

计算机科学与技术学院算法分析与设计实验指导书2011年8月于洪编写2015年9月周应华修订目录实验一分治策略排序 (3)实验二减治策略查找顺序表 (5)实验三动态规划求解0/1背包问题 (8)实验四贪心算法求解最短路径问题 (10)附录1 关于文件的操作 (12)附录2 关于如何统计运算时间 (13)实验一分治策略排序实验目的1)以排序问题为例,掌握分治法的基本设计策略;2)熟练掌握合并排序算法的实现;3)熟练掌握快速排序算法的实现;4) 理解常见的算法经验分析方法。

实验环境计算机、C语言程序设计环境实验学时2学时实验内容与步骤1.准备实验数据要求:编写一个函数data-generate,生成2000个在区间[1,10000]上的随机整数,并将这些数输出到外部文件data.txt中。

这些数作为本算法实验的输入数据。

2.实现合并排序算法要求:实现mergesort算法。

输入:待排数据文件data.txt;输出:有序数据文件resultsMS.txt(注:建议将此排好序的数据作为实验二的算法输入);程序运行时间TimeMS。

合并排序算法(类C语言):/* 数组A[] 中包含待排元素;array B[] is a work array */TopDownMergeSort(A[], B[], n){TopDownSplitMerge(A, 0, n, B);}// iBegin is inclusive; iEnd is exclusive (即:A[iEnd]不是待排元素)TopDownSplitMerge(A[], iBegin, iEnd, B[]){if(iEnd - iBegin < 2) // 如果只有1个待排元素,返回。

return;// recursively split runs into two halves until run size == 1,// then merge themiMiddle = (iEnd + iBegin) / 2; // 划分TopDownSplitMerge(A, iBegin, iMiddle, B);TopDownSplitMerge(A, iMiddle, iEnd, B);TopDownMerge(A, iBegin, iMiddle, iEnd, B); // 合并;元素放到数组B中。

《算法设计综合实验》教案(5篇)

《算法设计综合实验》教案(5篇)

《算法设计综合实验》教案(5篇)第一篇:《算法设计综合实验》教案《算法设计综合实验》教案统计与应用数学学院2012年5月11日制实验一数据类型、运算符和表达式实验目的:1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法;2、掌握不同的数据类型之间赋值的规律;3、学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加和自减运算符的使用;4、学会使用赋值运算符及复合赋值运算符;5、进一步熟悉C程序的编辑、编译、连接和运行的过程。

实验环境:Windows操作系统、Visual C++6.0实验学时:2学时;实验内容:1、整型变量实型变量、字符型变量的定义与输出,赋整型常量值时的情形,以及给整型变量赋字符常量值时的情形;2、各类数值型数据间的混合运算;3、要将“China”译成密码,密码规律是:用原来的字母后面第4各字母代替原来的字母。

例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。

因此,“China”应译成“Glmre”。

请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

实验二顺序结构程序设计实验目的:1、掌握C语言中赋值语句的使用方法;2、掌握各种类型数据的输入输出方法,能正确使用各种格式转换符;3、学习调试程序。

实验环境: Windows操作系统、Visual C++6.0 实验学时:2学时;实验内容:1、掌握各种格式转换符的正确使用方法;2、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf输入数据,输出计算结果。

输出时要有文字说明,取小数点后两位数字。

3、编程序:用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。

算法实验指导书(上交版)

算法实验指导书(上交版)

《算法设计与分析》实验指导书实验一 用贪心方法解背包问题一: 实验目的掌握按贪心方法原理求背包问题最优解的方法二:问题描述背包问题描述如下: 已知背包容量M=120物品种类数n=10各种物品的总效益pi(i=1,2,………10) : 50,60,70,80,90,80,70,60,50,40各种物品的总重量wi(i=1,2………10) : 17,30,25,41,80,70,64,56,47,38求: 各种物品所取重量占其总重量的比例xi(i=1,2,…..10),满足0<=xi<=1,且 且使得 达到最大值. 三. 基本要求(1) 按三种不同的量度标准分别计算所得最大总效益,然后比较哪个最大1. 按效益值由大到小取物品.2. 按重量值由小到大取物品3.按比值pi/wi 的值由大到小取物品四: 选做题 装箱问题问题描述:装箱问题可简述如下:设有编号为0、1、…、n-1的n 种物品,体积分别为v0、v1、…、vn-1。

将这n 种物品装到容量都为V 的若干箱子里。

约定这n 种物品的体积均不超过V ,即对于0≤i <n ,有0<vi ≤V 。

不同的装箱方案所需要的箱子数目可能不同。

装箱问题要求使装尽这n 种物品的箱子数要少。

若考察将n 种物品的集合分划成n 个或小于n 个物品的所有子集,最优解就可以找到。

但所有可能划分的总数太大。

对适当大的n ,找出所有可能的划分要花费的时间是无法承受的。

为此,对装箱问题采用非常简单的近似算法,即贪婪法。

该算法依次将物品放到它第一个能放进去的箱子中,该算法虽不能保证找到最优解,但还是能找到非常好的解。

不失一般性,设n 件物品的体积是按从大到小排好序的,即有v0≥v1≥…≥vn-1。

如不满足上述要求,只要先对这n 件物品按它们的体积从大到小排序,然后按排序结果对物品重新编号即可。

装箱算法简单描述如下: {输入箱子的容积;输入物品种数n ;按体积从大到小顺序,输入各物品的体积;预置已用箱子链为空;预置已用箱子计数器box_count 为0;for (i=0;i<n;i++){ 从已用的第一只箱子开始顺序寻找能放入物品i 的箱子j ;if (已用箱子都不能再放物品i ){ 另用一个箱子,并将物品i 放入该箱子;box_count++;}else将物品i 放入箱子j ;} }上述算法能求出需要的箱子数box_count ,并能求出各箱子所装物品。

算法实验指导书

算法实验指导书
目录页
实验一递归算法…………………………………………1
实验二分治算法…………………………………………2
实验三贪心算法…………………………………………3
实验四动态规划算法…………………………………………4
实验五图的搜索之回溯算法……………………………5
实验报告内容基本要求…………………………………………7
PC机,C/C++程序设计语言应用环境。
四、实验原理
分治算法
五、实验步骤
1.理解算法思想和问题要求;
2.编程实现题目要求;
3.上机输入和调试自己所编的程序;
4.设计实验数据并运行程序、记录运行的结果;
5.整理出实验报告。
六、实验报告要求
1.阐述实验目的和实验内容;
2.说明程序中的数据结构及模块接口功能说明;
3.提交实验程序的源码及文档;
4.记录最终测试数据和测试结果。
七、实验注意事项
八、思考题
1、设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。当搜索元素在数组中时,I和j相同,均为x在数组中的位置。
实验三贪心算法(4学时)
内容页
实验一递归算法(2学时)
一、实验目的
掌握递归算法的概念和基本思想
二、实验内容
N阶Hanoi塔问题
要求:
(1)写出相应问题的递归算法及程序
(2)要求输出整个搬动过程。
三、实验仪器、设备及材料
PC机,C/C++程序设计语言应用环境。
四、实验原理
递归算法
五、实验步骤
1.理解算法思想和问题要求;

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

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

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

二、实验内容及要求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];}}时间复杂度:通常情况下用自然合并排序所需要的合并次数较少。

算法实验指导书详解

算法实验指导书详解

算法设计与分析实验指导书信电工程学院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)准备好上机所需的程序。

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

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

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

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

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

本书共分阶段6个实验,其具体要求和步骤如下:实验一分治算法(2学时)一、实验目的与要求1、熟悉二分搜索算法;2、初步掌握分治算法;二、实验题设a[0:n-1]是一个已排好序的数组。

请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。

当搜索元素在数组中时,i和j相同,均为x在数组中的位置。

三、实验提示用i,j做参数,且采用传递引用或指针的形式带回值。

bool BinarySearch(int a[],int n,int x,int& i,int& j){int left=0;int right=n-1;while(left<right){int mid=(left+right)/2;if(x==a[mid]){i=j=mid;return true;}if(x>a[mid])left=mid+1;elseright=mid-1;}i=right;j=left;return false;}实验二动态规划算法(2学时)一、实验目的与要求1、熟悉最长公共子序列问题的算法;2、初步掌握动态规划算法;二、实验题若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。

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

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

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

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

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

本课程设计了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、理解算法思想和问题要求。

算法设计与实验指导书

算法设计与实验指导书

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

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

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

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

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

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

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

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

在《算法设计与分析》的课程实验过程中,要求学生做到:(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】是一个已排好的数组。

《算法分析与设计》实验指导书-推荐下载

《算法分析与设计》实验指导书-推荐下载

对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

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

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

算法分析与设计本书是为配合《计算机算法分析与设计》而编写的上机指导,其目的是使学生消化理论知识,加深对讲授内容的理解,增强算法分析与设计实践动手能力。

上机实验注意事项如下:(1)课前认真做好预习,准备好实验工具,熟悉实验流程和手段。

(3)课中根据实验指导书,结合课本实例进行编程实验。

实验时,一人一组,独立上机调试,上机时出现疑问,可以举手询问实验指导老师,或者与周边同学小声讨论,鼓励独立解决问题。

(4)课后按时按质按量整理出实验报告。

实验报告应独立完成,拒绝抄袭。

实验内容覆盖:递归与分治策略、动态规划、贪心算法、回溯法、分支限界法等。

实验一递归与分治策略一.实验目的与要求(1)理解和掌握递归与分治策略的基本原理。

(2)理解课本中的示例代码。

(3)调试代码通过。

二.递归与分治的基本思想(1)递归与分治方法。

递归与分治方法的基本思想是:将一个难以解决的大问题,分割成一些规模较小的、相同的子问题,以便各个击破,分而治之。

(2)递归。

递归问题分析时,要把握如下两个要素:●递归出口。

●递归公式。

其中:●递归出口给出了最简单情况下问题的解。

●递归公式则给出了一般意义下大问题(原问题)和小问题(子问题)之间的递归关系。

通过递归公式,一个难以解决的大问题会随着递归不断分解为多个小问题,小问题继续递归变为更小的小问题,直到最后到达递归出口得到解。

三.实验代码分析和说明本部分实验,需完成“棋盘覆盖”(课本P20)和“快速排序”(课本P22)两个问题。

3.1棋盘覆盖1. 棋盘覆盖问题的思路:(1)首先,将原始的棋盘覆盖问题看作最初的大问题。

(2)然后,将棋盘的行、列一分为二,从而将原始的大棋盘分为四个同样大小的小棋盘。

(3)接着,采用P21的图2-5中合适的L型骨牌,覆盖原始大棋盘的中心位置,将四个同样大小的小棋盘都转化为特殊棋盘。

(4)最后,对四个特殊小棋盘进行递归处理即可。

以上步骤(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、编制该问题的非递归算法,上机通过。

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

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

算法设计与分析实验指导

算法设计与分析实验指导

《算法设计与分析》实验指导书目录实验一单链表的建立插入及删除 (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.将你的程序和实录的界面存盘备用。

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

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

《算法设计与分析》实验指导《算法分析与设计》实验指导 .1 实验一锦标赛问题 [实验目的] 1. 基本掌握分治算法的原理. 2. 能用程序设计语言求解锦标赛等问题的算法; [预习要求] 1. 认真阅读数据结构教材和算法设计教材,了解分治算法原理; 2. 设计用分治算法求解背包问题的数据结构与程序代码. [实验题] 【问题描述】设有 n=2 k 个运动员要进行网球循环赛。

现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他 n-1 个选手各赛一次;(2)每个选手一天只能参赛一次;(3)循环赛在 n-1 天内结束。

请按此要求将比赛日程表设计成有 n 行和 n-1 列的一个表。

在表中的第 i 行,第 j 列处填入第 i 个选手在第 j 天所遇到的选手。

其中 1≤i≤n,1≤j≤n-1。

[实验提示] 我们可以按分治策略将所有的选手分为两半,则 n 个选手的比赛日程表可以通过 n/2个选手的比赛日程表来决定。

递归地用这种一分为二的策略对选手进行划分,直到只剩下两个选手时,比赛日程表的制定就变得很简单。

这时只要让这两个选手进行比赛就可以了。

1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 2 1 4 3 6 7 8 5 3 4 1 2 7 8 5 6 1 2 3 4 3 2 1 8 5 6 7 1 2 3 4 5 6 7 8 1 4 3 2 1 2 1 4 3 6 5 8 7 2 1 4 3 1 2 3 4 1 2 7 8 5 6 3 2 1 4 2 1 4 3 2 1 8 7 6 5 4 3 2 1 (1)(2)(3)图 1 2 个、4 个和 8 个选手的比赛日程表图 1 所列出的正方形表(3)是 8 个选手的比赛日程表。

其中左上角与左下角的两小块分别为选手 1 至选手 4 和选手 5 至选手 8 前 3 天的比赛日程。

据此,将左上角小块中的所有数字按其相对位置抄到右下角,又将左下角小块中的所有数字按其相对位置抄到右上角,这2 样我们就分别安排好了选手 1 至选手 4 和选手 5 至选手 8 在后 4 天的比赛日程。

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

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

《算法分析与设计》实验指导与报告书实验目录实验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)区分递归和递推思想。

算法设计与分析实验指导书(B080201110)详解

算法设计与分析实验指导书(B080201110)详解

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

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

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

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

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

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

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

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

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析实验指导书
东北林业大学信息与计算机工程学院
软件工程专业
目录
实验一递归与分治算法设计
实验二动态规划算法设计
实验三贪心算法设计
实验四近似算法设计
实验一递归与分治算法设计
一实验目的:
掌握递归与分治算法的基本原理,利用VC编程实现递归与分治算法设计,解决快速排序问题。

二实验仪器:计算机
三实验原理:
They break the problem into several subproblems that are similar to the original problem but smaller in size, solve the subproblems recursively, and then combine these solutions to create a solution to the original problem.
四实验内容
1. 编程实现快速排序算法
基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

2. 算法复杂度分析
五实验记录
The following procedure implements quicksort.
QUICKSORT(A,p,r)
{
If( p<r)
{q=Partition(A,p,r);
QUICKSORT(A,p,q-1);
QUICKSORT(A,q+1,r);
}
}
六数据处理与讨论分析
PARTITION(A,p,r)
{ x=A[p];
i=p;
j=r;
while(i<j) { //从表的两端交替地向中间扫描
while(i<j && a[j]>=x) - - j;
a[i]=a[j];
while(i<j && a[i]<=x) + + i;
a[j]=a[i];
}
a[i]=x;
return i;
}
•Performance of quicksort
• The running time of quicksort depends on whether the partitioning is balanced or unbalanced, and this in turn depends on which elements are used for partitioning.
• If the partitioning is balanced, the algorithm runs asymptotically as fast as merge sort. O(nlogn)
•If the partitioning is unbalanced, however, it can run asymptotically as slowly as insertion sort. O(n2)
实验二 动态规划算法设计
一 实验目的:
掌握动态规划算法的基本原理,利用VC 编程实现动态规划算法设计,解决0-1背包问题。

二 实验仪器:计算机
三 实验原理:
分析优化解的结构;递归地定义最优解的代价;自底向上地计算优化解的代价保存之,并获取构造最优解的信息;根据构造最优解的信息构造优化解。

四 实验内容
1. 证明0-1背包问题具有最优子结构性质和子问题重叠性质,因此可用动态规划算法求解。

2. 递归地定义最优解的代价
3 算法设计
4 算法复杂度分析
五 实验记录
设所给0-1背包问题的子问题
的最优值为m(i, j),即m(i, j)是背包容量为j ,可选择物品为i,i+1,…n 时0-1 背包问题的最优值。

由0-1 背包问题的最优子结构性质,我们可以建立计算m(i, j)的递归式如下:
六 数据处理与讨论分析
按算法Knapsack 计算后,m[1][c]给出所要求的0-1背包问题的最优解。

相应的最优解可由算法Taceback 计算如下。

如果m[1][c]=m[2][c],则x1=0, 否则x1=1 。

当x1=0时,由m[2][c]继续构造最优解。

当x1=1时,由m[2][c-w1]继续构造最优解。

依此类推,可构造出相应的最优解 。

从计算m(i,j)的递归式容易看出,上述算法Knapsack 需要O(nc)计算时间,而Traceback 需要O(n)计算时间。

⎩⎨⎧<≤+≥+++=i i i w j j i m w j v 0)
,1(})w -j 1,m(i j),1,max{m(i j) m(i,i ⎩⎨⎧<≤≥=n
n w j 00v j) m(n,n w j
return A i j }{a A then A f if s to n do for i j a A s length n s, f f f f i j i n 8765241
3}{2][1)SELECT OR(-ACT IVIT Y -GREEDY )
...(121←⋃←≥←←←←≤≤≤
实验三 贪心算法设计
一 实验目的: 掌握贪心算法的基本原理,利用VC 编程实现贪心算法设计,解决活动任务安排问题。

二 实验仪器:计算机
三 实验原理:
Algorithms for optimization problems typically go through a sequence of steps with a set of choices at each step. A greedy algorithm always makes the choice that looks best at the moment . That is, it makes a locally optimal choice in the hope that this choice will lead to a globally optimal solution.
四 实验内容
1. 证明活动任务安排问题具有最优子结构性质和贪心选择性质,因此可用贪心算法求解。

2 算法设计
3 算法复杂度分析
五 实验记录
activity-selection problem :
Input: S = {a 1, a 2, ..., an }, F={[si,fi ]}, 1≤ i ≤n
Output: a maximum-size compatible subset of S.
六 数据处理与讨论分析(略)
Complexity analysis
1)If finish time has been sort
T(n)=θ(n)
2)If finish time has not been sort
T(n)=θ(n)+θ(nlogn)=θ(nlogn)
实验四 近似算法设计
一 实验目的:
掌握近似算法的基本原理,利用VC 编程实现近似算法设计,解决顶点覆盖问题。

二 实验仪器:计算机
三 实验原理:
采用近似算法求解顶点覆盖问题。

输入:无向图G=(V ,E )
输出:V V '⊆,满足
(1).()∀∈u v E ,,u V ∈'、v V ∈'或{u,v }⊆V’
(2).V '是满足条件(1)的最小集合。

*理论上已经证明优化结点覆盖问题是NP-完全问题。

四 实验内容
1. 编程设计解决顶点覆盖问题的近似算法
2. 近似算法的性能分析
五 实验记录(略)
APPROX-Vertex-Cover (G)
1.θ←C
2.[]E E G '←
3.while E '≠θ DO
4. 任取()u v E ,'∈
5. {}C C u v ← ,
6. E’←E ’-{(u’,v’)|u’=u 或v’=v }
7. Roturn C
Approx-Vertex-Cover 具有Ratio Bound 2
六 数据处理与讨论分析(略)
Approx-Vertex-Cover 具有Ratio Bound 2
分析: 令A={(,)(,)u v u v 是算法第4步选中的边}。

若(u,v)∈A ,则所以与(u,v )邻接的边皆从'E 中删除。

于是, A 中无相邻接边.
于是,第五步的每次运行增加两个结点到C ,|C |=2|A |
设C*是优化解,C*必须覆盖A。

由于A中无邻接边,C*至少包含A中每条边的一个结点。

于是,|A|≤|C*|,|C|=2|A|≤2|C*|,即|C|/|C*|≤2.。

相关文档
最新文档