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

上传人:b****6 文档编号:8856986 上传时间:2023-02-02 格式:DOCX 页数:9 大小:20.05KB
下载 相关 举报
算法分析与设计 实验指导书.docx_第1页
第1页 / 共9页
算法分析与设计 实验指导书.docx_第2页
第2页 / 共9页
算法分析与设计 实验指导书.docx_第3页
第3页 / 共9页
算法分析与设计 实验指导书.docx_第4页
第4页 / 共9页
算法分析与设计 实验指导书.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《算法分析与设计 实验指导书.docx》由会员分享,可在线阅读,更多相关《算法分析与设计 实验指导书.docx(9页珍藏版)》请在冰豆网上搜索。

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

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

太原工业学院

实验指导书

 

院(系)计算机工程系

实验课程算法分析与设计

实验教师张升

 

2015年6月9日

 

目录

实验一、递归与分治算法实验3

一、实验类型3

二、实验目的与任务3

三、预习要求3

四、实验基本原理3

五、实验内容3

六、实验步骤4

实验二动态规划算法实验5

一、实验类型5

二、实验目的与任务5

三、预习要求5

四、实验基本原理5

五、实验内容6

六、实验步骤6

实验三、贪心算法实验7

一、实验类型7

二、实验目的与任务7

三、预习要求7

四、实验基本原理7

五、实验内容8

六、实验步骤8

实验四、回溯算法实验9

一、实验类型9

二、实验目的与任务9

三、预习要求9

四、实验基本原理9

五、实验内容9

六、实验步骤10

实验一、递归与分治算法实验

一、实验类型

综合性

二、实验目的与任务

1.熟悉Java上机环境;

2.基本掌握递归算法的原理方法。

三、预习要求

1.认真阅读算法设计教材,了解递归算法原理;

2.设计用递归算法求解阶乘函数、Ackerman函数、排列问题、整数划分问题的递归程序。

四、实验基本原理

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。

求出子问题的解,就可得到原问题的解。

分治法解题的一般步骤:

1.分解,将要解决的问题划分成若干规模较小的同类问题;

2.求解,当子问题划分得足够小时,用较简单的方法解决;

3.合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

一言以蔽之:

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

由此可知,分治法求解很自然地可用一个递归过程来表示。

分治与递归像一对孪生兄弟,经常同时应用在算法设计中,并由此产生许多高效算法。

五、实验内容

1.将正整数n表示成一系列正整数之和:

n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。

正整数n的这种表示称为正整数n的划分。

求正整数n的不同划分个数。

2.设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。

3.Hanoi塔问题。

设a,b,c是3个塔座。

开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。

各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的圆盘移到塔座b上,并仍按同样顺序叠置。

在移动圆盘时应遵守以下移动规则:

规则1:

每次只能移动1个圆盘;

规则2:

任何时刻都不允许将较大的圆盘压在较小的圆盘之上;

规则3:

在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。

六、实验步骤

1.分析问题,根据问题的描述分析出该问题的递归形式;

2.根据问题的递归形式,写出问题的算法;

3.使用java语言实现算法,添加必要的初始数据和结果输出;

4.调试程序,直到结果正确为止;

5.完成实验报告,实验报告主要有以下几部分:

(1)阐述实验目的和实验内容;

(2)阐述求解问题的算法原理(算法流程图和算法描述);

(3)提交实验程序的功能模块;

(4)记录最终测试数据和测试结果。

实验二动态规划算法实验

一、实验类型

综合性实验

二、实验目的与任务

1.掌握动态规划算法的基本方法;

2.掌握动态规划算法中最优子结构的分析;

3.掌握递归求解最优值的方法;

4.掌握最优解的构造。

三、预习要求

1.认真阅读算法设计教材,了解动态规划原理;

2.掌握矩阵连乘、最长公共子序列以及电路布线问题的最优子结构性质、子问题递归形式和最优值的计算方法。

四、实验基本原理

动态规划算法通常用于求解具有某种最优性质的问题。

在这类问题中,可能会有许多可行解。

每一个解都对应于一个值,希望找到具有最优值的解。

动态规划算法与分治法类似,其基本思想也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。

在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。

依次解决各子问题,最后一个子问题就是初始问题的解。

由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

与分治法最大的差别是:

适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。

能采用动态规划求解的问题的一般要具有3个性质:

1.最优子结构:

如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。

2.阶段性:

即某阶段状态一旦确定,就不受这个状态以后决策的影响。

也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

3.重叠子问题:

即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。

(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)

五、实验内容

1.给定n个矩阵{A1,A2,…,An},其中,Ai与Ai+1是可乘的,计算这n个矩阵的连乘积。

从中找出一种乘次数最少的计算次序。

2.给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。

3.在一块电路板的上、下2端分别有n个接线柱。

根据电路设计,要求用导线(i,π(i))将上端接线柱与下端接线柱相连,确定将哪些连线安排在第一层上,使得该层上有尽可能多的连线。

该问题要求确定导线集Nets={(i,π(i)),1≤i≤n}的最大不相交子集。

六、实验步骤

1.分析问题,将问题的语言描述转换为某种形式化表示;

2.根据问题的形式化表示,分析出该问题的最优子结构性质;

3.根据问题最优子结构形式,得到该问题最优值的递归形式;

4.设计最优值的计算方法和存储结构,以及最优值计算过程中需要的状态信息的存储表示方法;

5.根据上述分析和设计内容,设计程序算法;

6.使用java语言实现算法,添加必要的初始数据和结果输出;

7.调试程序,直到结果正确为止;

8.完成实验报告,实验报告主要有以下几部分:

(1)阐述实验目的和实验内容;

(2)阐述求解问题的算法原理(算法流程图和算法描述);

(3)提交实验程序的功能模块;

(4)记录最终测试数据和测试结果。

实验三、贪心算法实验

一、实验类型

综合性实验

二、实验目的与任务

1.掌握贪心算法的基本思想;

2.掌握贪心算法中贪心选择性质和最优子结构性质的分析与证明;

3.掌握贪心算法求解问题的方法。

三、预习要求

1.认真阅读算法设计教材,了解贪心算法思想及方法;

2.了解用贪心算法求解最优装载哈夫曼编码、单源最短路径、最小生成树的贪心选择性质和最优子结构性质;

3.了解贪心算法正确性证明的基本思想。

四、实验基本原理

贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。

也就是说,不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。

贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。

须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。

贪心算法的基本思路:

1.建立数学模型来描述问题;

2.把求解的问题分成若干个子问题;

3.对每一子问题求解,得到子问题的局部最优解;

4.把子问题的解局部最优解合成原来解问题的一个解。

贪心算法适用的前提是:

局部最优的选择能导致产生全局最优解,即问题具有贪心选择性质。

对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。

证明方法同活动安排问题的贪心选择证明

1.证明问题的一个整体最优解可以由贪心选择开始。

2.使用数学归纳法证明贪心选择后,原问题简化为规模更小的类似子问题,可以继续通过贪心,最终得到整体最优解。

五、实验内容

1.哈夫曼编码问题。

哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。

给出文件中各个字符出现的频率,求各个字符的哈夫曼编码方案。

2.单源最短路径问题。

给定带权有向图G=(V,E),其中每条边的权是非负实数。

另外,还给定V中的一个顶点,称为源。

现在要计算从源到所有其他各顶点的最短路长度。

这里路的长度是指路上各边权之和。

3.最小生成树问题。

设G=(V,E)是无向连通带权图,即一个网络。

E中每条边(v,w)的权为c[v][w]。

如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。

生成树上各边权的总和称为该生成树的耗费。

在G的所有生成树中,耗费最小的生成树称为G的最小生成树。

求G的最小生成树。

六、实验步骤

1.分析问题,将问题的语言描述转换为某种形式化(数学模型)表示;

2.根据问题的形式化表示,分析出该问题的最优子结构性质及贪心选择策略;

3.根据最优子结构性质及贪心选择策略,得到该问题的迭代形式及条件;

4.根据上述分析和设计内容,设计程序算法;

5.使用java语言实现算法,添加必要的初始数据和结果输出;

6.调试程序,直到结果正确为止;

7.完成实验报告,实验报告主要有以下几部分:

(1)阐述实验目的和实验内容;

(2)阐述求解问题的算法原理(算法流程图和算法描述);

(3)提交实验程序的功能模块;

(4)记录最终测试数据和测试结果。

 

实验四、回溯算法实验

一、实验类型

综合性实验

二、实验目的与任务

1.掌握回溯法的基本思想;

2.掌握回溯法中问题的解空间、解向量、显式约束条件、隐式约束条件以及子集树与排列树的递归算法结构等内容;

3.掌握回溯法求解具体问题的方法。

三、预习要求

1.认真阅读算法设计教材,了解回溯法思想及方法;

2.了解用回溯算法求解装载问题、n后问题、图的m着色问题过程中各个问题的解空间、解向量、约束条件等相关内容。

四、实验基本原理

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”,尝试别的路径。

回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。

这种方法适用于解一些组合数相当大的问题。

在问题的解空间树中,回溯法按深度优先策略,从根结点出发搜索解空间树。

算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。

如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。

运用回溯法解题通常包含以下三个步骤:

1.针对所给问题,定义问题的解空间;

2.确定易于搜索的解空间结构;

3.以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

五、实验内容

1.装载问题。

有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为wi,且∑wi≤C1+C2。

装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。

如果有,找出一种装载方案。

2.n皇后问题。

在n×n格的棋盘上放置彼此不受攻击的n个皇后。

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。

3.图的m着色问题。

给定无向连通图G和m种不同的颜色。

用这些颜色为图G的各顶点着色,每个顶点着一种颜色。

是否有一种着色法使G中每条边的2个顶点着不同颜色。

这个问题是图的m可着色判定问题。

六、实验步骤

1.分析问题,将问题的语言描述转换为某种形式化(数学模型)表示;

2.根据问题的形式化表示,表示出该问题的解向量、解空间、显式约束和隐式约束;

3.根据上述分析和设计内容,设计程序算法;

4.使用java语言实现算法,添加必要的初始数据和结果输出;

5.调试程序,直到结果正确为止;

6.完成实验报告,实验报告主要有以下几部分:

(1)阐述实验目的和实验内容;

(2)阐述求解问题的算法原理(算法流程图和算法描述);

(3)提交实验程序的功能模块;

(4)记录最终测试数据和测试结果。

 

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

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1