收藏 分享(赏)

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

上传人:HR专家 文档编号:11316426 上传时间:2020-03-16 格式:DOC 页数:19 大小:120KB
下载 相关 举报
《算法设计与分析》实验指导书.doc_第1页
第1页 / 共19页
《算法设计与分析》实验指导书.doc_第2页
第2页 / 共19页
《算法设计与分析》实验指导书.doc_第3页
第3页 / 共19页
《算法设计与分析》实验指导书.doc_第4页
第4页 / 共19页
《算法设计与分析》实验指导书.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、算法设计与分析实验指导书本书是为配合算法分析与设计实践教学大纲而编写的上机指导,其目的是使学生消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。上机实验一般应包括以下几个步骤:(1) 、准备好上机所需的程序。手编程序应书写整齐,并经人工检查无误后才能上机。(2) 、上机输入和调试自己所编的程序。一人一组,独立上机调试,上机时出现的问题,最好独立解决。(3) 、上机结束后,整理出实验报告。实验报告应包括:题目、程序清单、运行结果、对运行情况所作的分析。目录实验一 统计数字及字符编码(2 学时) .1实验二

2、蛮力法(2 学时) .3实验三 递归与分治法(2 学时) .5实验四 贪心算法(2 学时) .8实验五 回溯算法(2 学时) .10实验六 分支限界法(2 学时) .12实验七 动态规划算法(3 学时) .15 1 实验一 统计数字及字符编码(2 学时)一、实验目的与要求1、掌握算法的计算复杂性概念。 2、掌握算法渐近复杂性的数学表述。 3、掌握用 C+语言描述算法的方法。 4 实现具体的编程与上机实验 验证算法的时间复杂性函数二、实验内容 1、统计数字问题 1)问题描述一本书的页码从自然数 1 开始顺序编码直到自然数 n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字 0。例如,第

3、 6 页用数字 6 表示而不是 06 或006 等。数字计数问题要求对给定书的总页码 n 计算出书的全部页码中分别用到多少次数字 0、1、2、9。 2)编程任务给定表示书的总页码的 10 进制整数 n (1n109) 。编程计算书的全部页码中分别用到多少次数字 0、1、2、9。3)程序算法将页码数除以 10,得到一个整数商和余数,商就代表页码数减余数外有多少个19 作为个位数,余数代表有 1余数本身这么多个数作为剩余的个位数。此外,商还代表 1商本身这些数出现了 10 次,余数还代表剩余的没有计算的商的大小的数的个数。把这些结果统计起来即可。2、字典序问题1)问题描述在数据加密和数据压缩中常需

4、要对特殊的字符串进行编码。给定的字母表 A 由 26 个小 写英文字母组成 A=a,b,z。该字母表产生的升序字符串是指字符串中字母按照从左到 右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现 1 次。例如, a,b,ab,bc,xyz 等字符串都是升序字符串。现在对字母表 A 产生的所有长度不超过 6 的升序 字符串按照字典序排列并编码如下。1 2 26 27 28 a b z ab ac 对于任意长度不超过 6 的升序字符串,迅速计算出它在上述字典中的编码。算法设计:对于给定的长度不超过 6 的升序字符串,计算出它在上述字典中的编码。 2 数据输入:输入数据由文件名为 inp

5、ut.txt 的文本文件提供。文件的第一行是一个正整数k,表示接 下来共有 k 行。接下来的 k 行中,每行给出一个字符串。结果输出:将计算结果输出到文件 output.txt 中。文件共有 k 行,每行对应于一个字符串的编码。 3 实验二 蛮力法(2 学时)一、实验目的与要求1、 掌握蛮力法的基本思想2、 使用蛮力法解决具体问题(通常,问题规模比较小时,此方法才有意义)二、实验内容 1、用 C+/C 编写程序实现 BF 算法,进行模式匹配。以下是该算法的伪代码,请进行调试。int BF(char S , char T ) i=0; j=0; while (i=strlen(T) return

6、 (i-j); else return 0;2、用 C+/C 编写程序实现 KMP 算法,进行模式匹配。 求模式串 T 的 Next 数组void GetNext(char T , int next ) next1=0;j=1; k=0;while (j= tc + s)/ 特殊方格在此棋盘中chessBoard(tr, tc+s, dr, dc, s);else / 此棋盘中无特殊方格/ 用 t 号 L 型骨牌覆盖左下角boardtr + s - 1tc + s = t;/ 覆盖其余方格chessBoard(tr, tc+s, tr+s-1, tc+s, s);/ 覆盖左下角子棋盘if (d

7、r = tr + s else / 用 t 号 L 型骨牌覆盖左上角boardtr + stc + s = t;/ 覆盖其余方格chessBoard(tr+s, tc+s, tr+s, tc+s, s);提高题一:二分搜索一、实验目的与要求1、熟悉二分搜索算法;2、初步掌握分治算法;二、实验题1、设 a0:n-1是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素 x 不在数组中时,返回小于 x 的最大元素的位置 I 和大于 x 的最小元素位置 j。当搜索元素在数组中时,I 和 j 相同,均为 x 在数组中的位置。2、设有 n 个不同的整数排好序后存放于 t0:n-1中,若存在一个下标 I

8、,0in,使得 ti=i,设计一个有效的算法找到这个下标。要求算法在最坏的情况下的计算时间为 O(logn) 。三、实验提示1、用 I,j 做参数,且采用传递引用或指针的形式带回值。bool BinarySearch(int a,int n,int x,int 7 int right=n-1;while(leftamid)left=mid+1;elseright=mid-1;i=right;j=left;return false;int SearchTag(int a,int n,int x)int left=0;int right=n-1;while(leftamid)right=mid-1

9、;elseleft=mid+1;return -1;提高题二: 用分治法实现元素选择一、实验要求与目的1、了解分治法的基本思想,掌握递归程序编写方法;2、使用分治法编程,求解线形序列中第 k 小元素。二、实验内容1、 给定线形序列集中 n 个元素和一个整数 k,1kn,输出这 n 个元素中第 k 小元素的值及其位置。2、 简述该算法的原理、步骤。对该算法与直接排序查找进行比较。3、 编写并调试程序。 8 测试要求:元素个数不少于 100;分三种情况:k=1、k=n 和 k=中位数。实验四 贪心算法(2 学时)基本题一:多机调度问题一、实验目的与要求1、熟悉多机调度问题的算法;2、初步掌握贪心算

10、法;二、实验题要求给出一种作业调度方案,使所给的 n 个作业在尽可能短的时间内由 m 台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。三、实验提示1、把作业按加工所用的时间从大到小排序2、如果作业数目比机器的数目少或相等,则直接把作业分配下去3、 如果作业数目比机器的数目多,则每台机器上先分配一个作业,如下的作业分配时,是选那个表头上 s 最小的链表加入新作业。typedef struct Jobint ID;/作业号int time;/作业所花费的时间Job;typedef struct JobNode /作业链表的节点i

11、nt ID; int time;JobNode *next;JobNode,*pJobNode;typedef struct Header /链表的表头int s;pJobNode next;Header,pHeader;int SelectMin(Header* M,int m)int k=0;for(int i=1;ihalf)|(t*(t-1)/2-counthalf) return;if (tn) sum+;elsefor (int i=0;iTypep Knap:Bound(int i)/ 计算上界Typew cleft = c - cw; / 剩余容量Typep b = cp;/

12、以物品单位重量价值递减序装入物品while (i H(1000); T *MinOut = new T n+1; / 计算 MinOut = 离开顶点 i 的最小耗费边的耗费 T MinSum = 0; / 离开顶点 i 的最小耗费边的数目 13 for (int i = 1; i =cij-1)cij=ci-1j;bij=2;else cij=cij-1;bij=3; 16 void LCS(int i ,int j, char *x ,int *b)if (i =0 | j=0) return;if (bij= 1)LCS(i-1,j-1,x,b);printf(“%c“,xi);else

13、 if (bij= 2)LCS(i-1,j,x,b);else LCS(i,j-1,x,b);基本题二:最大字段和问题一、实验目的与要求1、熟悉最长最大字段和问题的算法;2、进一步掌握动态规划算法;二、实验题若给定 n 个整数组成的序列 a1,a 2,a 3,a n,求该序列形如 aia i1 a n 的最大值。三、实验提示int MaxSum(int n,int *a,int for(int i=1;isum)sum=thissum;besti=i;bestj=j;return sum;int MaxSum(int n,int *a,int for(int i=1;isum)sum=thissum;besti=i;bestj=j;return sum; 提高题一: 用动态规划法求解 0/1 背包问题一、实验要求与目的1、 掌握动态规划算法求解问题的一般特征和步骤。2、 使用动态规划法编程,求解 0/1 背包问题。二、实验内容1、 问题描述:给定 n 种物品和一个背包,物品 i 的重量是 Wi,其价值为 Vi,问如何选择装入背包的物品,使得装入背包的物品的总价值最大?2、 算法描述。程序实现;给出实例测试结果。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报