算法分析与设计——动态规划法实验报告


   算法导论  课程设计


题    目:    动态规划法

学院班级:        1613013        

学    号:      16130130216      

姓    名:        库 妍          

主讲教师        张立勇         

日    期:       2019.4.11        

(1)描述最优子结构:如果最优的加括号的方式将其分解为Ai..k与Ak+1..j的乘积,则分别对Ai..k与Ak+1..j加括号的方式也一定是最优的。  

(2)递归定义最优解的值:定义m[i, j]为计算矩阵Ai..j所需标量乘法次数的最小值,对于i=j时,矩阵链乘只包含唯一的矩阵Ai,因此不需要做任何标量乘法运算,所以m[i, i]=0;当i<j时利用步骤(1)中的最优子结构来计算m[i, j]。所以,矩阵链乘的递归式为:

(3)按自底向上的方式计算最优解的值:在算法设计的时候,需要m数组记录Ai..j最小相乘次数,s数组记录构造最优解所需要的信息,其记录的k值指出了AiAi+1Aj的最优括号化方案的分割点应在AkAk+1之间。

(4)构造一个最优解。

4、项目测试(功能与性能)

矩阵链乘的时间复杂度为θ(n^3)

5、实验总结

动态规划在寻找问题的最优解时,问题解的代价通常是子问题的代价,不要忘记加上选择本身带来的开销。在阵链乘法问题中,首先要确定子链AiAi+1...Aj的最优加全部括号,然后选择矩阵Ak在该位置分裂乘积。选择本身所带来的开销为pi-1pkpj。

一、Longest Common Subsequence (LCS)

1、实验题目

用动态规划求下列字符串的最长公共子序列。

a)X: xzyzzyx   Y: zxyyzxz

b)X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD

Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG

2、使用的算法

动态规划法

3、算法分析与设计

(1)描述一个最长公共子序列:令X=<x1,x2,..xm>和Y=<y1,y2,...,yn>为两个序列,Z=<z1,z2,...,zk>为X和Y的任意LCS。

①如果xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的一个LCS。

②如果xm≠yn,则zk≠xm意味着Z是Xm-1和Y的一个LCS。

③如果xm≠yn,则zk≠yn意味着Z是X和Yn-1的一个LCS。

(2)递归定义最优解的值:定义c[i, j]为序列Xi和Yi的一个LCS长度。定义一个b[i, j]指向表项对应计算c[i, j]时所选择的子问题最优解,过程返回表b和表c,c[m, n]保持X和Y的LCS长度。

由LCS问题的最优子结构可得到递归式:

(3)按自底向上的方式计算最优解的值。

(4)由计算结果构造一个最优解。

4、项目测试(功能与性能)

LCS的时间复杂度为O(m+n),b表的空间复杂度为O(mn)。

1、实验总结

算法可以有下面的改进,比如我们可以完全可以去掉表b。每个表项c[i, j]仅依赖于另外三个c表项:c[i-1, j-1],c[i-1, j],和c[i, j-1]。给定c[i, j]的值,我们可以在O(1)时间内确定这三个值中的哪一个被用来计算c[i, j]的,而不检查表b。利用一个类似于PRINT-LCS的过程,在O(m+n)时间内即可重构一个LCS。

一、Longest Common Substring

1、实验题目

用动态规划求下列字符串的最长公共子串。

a)X: xzyzzyx   Y: zxyyzxz

b)X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD

Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG

2、使用的算法

动态规划法

3、算法分析与设计

(1)最优子结构:令X=<x1,x2,..xm>和Y=<y1,y2,...,yn>为两个序列,Z=<z1,z2,...,zk>为X和Y的任意最长公共子串。

①如果xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的一个最长公共子串。

②如果xm≠yn,则zk≠xm意味着Z是Xm-1和Y的一个最长公共子串。

③如果xm≠yn,则zk≠yn意味着Z是X和Yn-1的一个最长公共子串。  

(2)递归定义一个定义L[i, j]为以x[i]和y[j]为结尾的相同子串的最大长度。记录着X和Y的最长公共子串的最大长度。        

最长公共子串的递归式:

(3)按自底向上的方式计算最优解的值。

(4)由计算结果构造一个最优解。

4、项目测试(功能与性能)

最长公共子串的时间复杂度为O(mn),空间复杂度为O(mn)。

5、实验总结

要同上述的最长公共子序列进行对比,区分他们的不同之处。也要理解用动态规划求解时的相同之处和不同之处。

一、Max Sum

1、实验题目

给定n个整数(可能为负数)组成的序列,a[1],a[2]...a[n],求该序列a[i]+a[i+1]...a[j]的子段和的最大值。

a)(-2,11,-4,13,-5,-2)

2、使用的算法

动态规划法

3、算法分析与设计

(1)描述最优子结构:定义当所给整数全为负数的时候,最大子段和为0,则最大子段和为max{0,a[i]+a[i+1]...+a[j]},1≤i≤j≤n 

(2)递归定义最优解的值:引入一个辅助数组b,动态规划的分解分为两步: ①计算辅助数组的值。

②计算辅助数组的最大值。

辅助数组b[j]用来记录以j为尾的子段以及集合中的最大子段和。将每一个数是否列入当前子段作为一个决策,如果加上这个数后子段和仍然大于0,那么加上这个数;如果加上这个数后子段和小于0,那么子段清零,下一个数作为新的子段的开始在这个过程中记录遇到的最大子段和。    

最大子段和的递归式:

(3)按自底向上的方式计算最优解的值。

(4)由计算结果构造一个最优解。

4、项目测试(功能与性能)

最大子段和使用动态规划进行计算的时间复杂度为O(n)。

5、实验总结

最大子段和问题求解方法有很多,还可以利用穷举法,穷举所有的[1,n]之间的区间,所以我们用两重循环,可以很轻易地做到遍历所有子区间。还可以分治法等方法求解。

五、Shortest path in multistage graphs

1、实验题目

利用动态规划法求出多段图中的最短路径。

2、使用的算法

动态规划法

3、算法分析与设计

(1)描述最优解的结构:设 是从顶点u到顶点v的最短路径, w是路径内部异于u和v的任一点,推断也分别是从u到w和从w到v的最短路径。

(2)递归定义最优解的值:我们的目的是求0-15之间的最短路径,由图可知与节点15相连的是结点14和节点13,W(i,p)表示从源s 到v(i,p) 的最短路径长度。假设我们已经求出0-13的最短路径的值W13和0-14的最短路径的值W14,那么我们只需要比较W13 + w(13-15)和W14 + w(14-15)的大小就可以知道从哪个节点出发到节点15的路径最短。按照这个思想一直往前推,推到节点0时结束,自然就求出了节点0-节点15的最短路径,这个思路是递归的,如果用递归的方法,时间复杂度很高,当然你也可以用备忘录,记录已经计算过的值,我这里将递归转换成迭代。

最短路径的递归式为:

(3)按自底向上的方式计算最优解的值。

(4)由计算结果构造一个最优解。

4、项目测试(功能与性能)

时间复杂度为O(n^2)。

5、实验总结

求最短路径众所周知有Dijistra算法、Bellman-ford等,除了这些算法,用动态规划也可以求出最短路径,时间复杂度为O(n^2),跟没有优化的Dijistra算法一样(优化后的Dijistra算法时间复杂度为O((m+n)lgn))。

原文地址:https://www.cnblogs.com/ku1274755259/p/11108477.html

时间: 2024-10-03 19:26:55

算法分析与设计——动态规划法实验报告的相关文章

算法分析与设计——分治法实验报告

   算法导论  课程设计 成 绩 题    目:  算法导论课程设计实验报告 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.6.3         录 分治法 一.Implement exercise 2.3-7................................

算法分析与设计——贪心法实验报告

   算法导论  课程设计 成 绩 题    目:    贪心法 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.5.9         一.Knapsack Problem 1.实验题目 下面有5个具有值和权重列表的项目,背包最多可以包含100磅.解决了分数背包和0/1背包问题

南邮算法分析与设计实验2 动态规划法

动态规划法 实验目的: 加深对动态规划法的算法原理及实现过程的理解,学习用动态规划法解决实际应用中的最长公共子序列问题. 实验内容: 用动态规划法实现求两序列的最长公共子序列,其比较结果可用于基因比较.文章比较等多个领域. 实验要求: 掌握动态规划法的思想,及动态规划法在实际中的应用:分析最长公共子序列的问题特征,选择算法策略并设计具体算法,编程实现两输入序列的比较,并输出它们的最长公共子序列. 实验原理及内容(包括操作过程.结果分析等) 1.最长公共子序列(LCS)问题是:给定两个字符序列X=

嵌入式软件设计第8次实验报告-140201236-沈樟伟

嵌入式软件设计第8次实验报告 学号:140201236                   姓名:沈樟伟 组别:第二组                实验地点:D19 一.实验目的: 1.熟悉WWW技术中的CGI(公共网关接口)技术. 2.学会使用CGI技术编写C语言代码驱动嵌入式开发板的LED灯和蜂鸣器. 二.实验内容: 1.编写代码完成Web服务器端蜂鸣器的驱动. 2.编写代码完成Web服务器端LED灯的驱动.三.实验过程描述及结果展示: 1.实验原理 CGI技术简介:公共网关接口CGI(C

130242014045 林承晖 实验报告一 软件设计的网络支持环境

实验报告一 课程  软件系统设计与体系结构   实验名称   软件设计的网络支持环境     第      页 专业___软件工程_____  班级_ 2班____  学号____130242014045___   姓名  林承晖 实验日期:  2017  年 09  月 14  日 --    年   月   日 一.实验目的 了解主流软件体系结构与设计技术网站,不断丰富软件体系结构和软件设计技术最新知识的学习方法. 二.实验内容 1.概念理解 (1)请根据你的理解和看法,给出'软件体系结构'

嵌入式软件设计第11次实验报告-140201235-陈宇

嵌入式软件设计第11次实验报告 学号:140201235             姓名:陈宇 组别:第3组                实验地点:D19 一.实验目的: 1.了解短信AT指令的使用方法. 2.掌握使用短信AT指令驱动SIM900A发送和接收短信的方法. 二.实验内容: 1.使用AT命令进行模块测试,发送和接收短信. 2.编写程序利用触摸屏完成固定号码短信的发送和接收.(需要加上AT测试命令模块.手机SIM卡检测模块.手机信号质量检测模块等等.) 三.实验过程描述及结果展示: 短

嵌入式软件设计第12次实验报告-140201235-陈宇

嵌入式软件设计第12次实验报告 学号:140201235             姓名:陈宇 组别:第3组                实验地点:D19 一.实验目的: 1.掌握通过GSM短信远程与嵌入式设备进行交互的方法. 二.实验内容: 1.编写程序把嵌入式开发板采集到的温度信息通过GSM短信传送给指定号码.(每10秒发送1次) 2.编写程序,使手机可以通过短信指令的方式控制嵌入式开发板的蜂鸣器和LED灯.(比如手机编辑"BEEP_ON"和"BEEP_OFF"

嵌入式软件设计第11次实验报告-140201133-李宇昕

嵌入式软件设计第11次实验报告 学号:140201133            姓名:李宇昕 组别:第3组                实验地点:D19 一.实验目的: 1.了解短信AT指令的使用方法. 2.掌握使用短信AT指令驱动SIM900A发送和接收短信的方法. 二.实验内容: 1.使用AT命令进行模块测试,发送和接收短信. 2.编写程序利用触摸屏完成固定号码短信的发送和接收.(需要加上AT测试命令模块.手机SIM卡检测模块.手机信号质量检测模块等等.) 三.实验过程描述及结果展示: 短

第二次课程设计实验报告

2019春第二次课程设计实验报告 一.实验项目名称 贪吃蛇小游戏 二.实验项目功能描述 玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁或者自己游戏结束. 三.项目模块结构介绍 程序关键在于表示蛇的图形及蛇的移动.用一个小圆点来表示蛇的一节身体,身体每长一节,增加一个圆点,蛇头用四节来表示.移动时必须从蛇头开始,所以蛇不能向相反的大反向移动,如果不按任意键,蛇自行在当前方向上前移,如果按与蛇方向相反的方向键,此游戏就会暂停,再按向前的方向键才能继续游戏,但按下有效方向键后,蛇头