计算机算法实验2 动态规划算法 报告.docxVIP

  • 16
  • 0
  • 约4.56千字
  • 约 12页
  • 2017-10-06 发布于重庆
  • 举报

计算机算法实验2 动态规划算法 报告.docx

计算机算法实验2 动态规划算法 报告

《算法设计与分析》姓名:班级:学号:课题:动态规划算法指导教师:2013/12/31说明:代码在后面1实验目的与要求1、熟悉最长公共子序列问题的算法2、掌握动态规划算法求解问题的一般特征和步骤3、熟悉最长最大字段和问题的算法4、使用动态规划法编程,求解0/1背包问题2实验内容2.1基本题一:最长公共子序列问题2.1.1问题概述若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。2.1.2实验截图可以修改序列1和2,这里预设为ABCBDAB和BDCABA:如果修改预设为ABCBDAB和efghj,则没有公共子序列:2.2基本题二:最大子段和问题2.2.1问题概述若给定n个整数组成的序列a1,a2,a3,……an,求该序列形如ai+ai+1+……+an的最大值。2.2.2实验截图选择书本列子,输入序列为-2,11,-4,13,-5,-2:全输入正数:全输入负数,最大为零:2.3提高题一:用动态规划法求解0/1背包问题2.3.1问题概述给定n种物品和一个背包,物品i的重量是Wi,其价值为Vi,问如何选择装入背包的物品,使得装入背包的物品的总价值最大?2.3.2实验截图采用书本例子,输入物品重量价值等信息:换另一组数据测试:3实验心得本次实验的主要内容是动态规划,涉及的题目为最长公共子序列、最大子段和及0/1背包问题。通过这三个实验题,我对动态规划的理解又加深了一步。动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不像搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。虽然这几道题解决了,但我知道自己的理解还很有限,编程还不能脱离书本。而且动态规划算法是算法里的很重要的一部分内容,很多问题都可以通过动态规划来解决。所以以后还要继续深入理解,熟练运用。1基本题一:最长公共子序列问题#include iostream#include string.husing namespace std;#define MAXLEN 100void LCSLength(char *x, char *y, int m, int n, int c[][MAXLEN], int b[][MAXLEN]){int i, j;for (i = 0; i = m; i++)c[i][0] = 0;for (j = 1; j = n; j++)c[0][j] = 0;for (i = 1; i = m; i++){for (j = 1; j = n; j++){if (x[i - 1] == y[j - 1]){c[i][j] = c[i - 1][j - 1] + 1;b[i][j] = 0;}else if (c[i - 1][j] = c[i][j - 1]){c[i][j] = c[i - 1][j];b[i][j] = 1;}else{c[i][j] = c[i][j - 1];b[i][j] = -1;}}}}void PrintLCS(int b[][MAXLEN], char *x, int i, int j){if (i == 0 || j == 0)return;if (b[i][j] == 0){PrintLCS(b, x, i - 1, j - 1);printf(%c , x[i - 1]);}else if (b[i][j] == 1)PrintLCS(b, x, i - 1, j);elsePrintLCS(b, x, i, j - 1);}int main(int argc, char **argv){char x[MAXLEN] = { ABCBDAB };char y[MAXLEN] = { BDCABA };int b[MAXLEN][MAXLEN];int c[MAXLEN][MAXLEN];int m, n;cout 预设为ABCBDAB和BDCABA endl;m = strlen(x);n = strlen(y);cout 最

文档评论(0)

1亿VIP精品文档

相关文档