计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...
动态规划法解最长公共子序列(计算机算法设计与分析实验报告)
实报 告 实验名称:任课教师::姓 名:完成日期:二、主要实验内容及要求:
要求按动态规划法原理求解问题;
要求交互输入两个序列数据;
要求显示结果。 三、实验环境和工具:
操作系统:win7操作系统
开发工具:eclipse3.4、jdk1.6
开发语言:java
四、实验结果与结论:(经调试正确的源程序和程序的运行结果)
1、源代码:
package cn.lgh;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* 动态规划法解最长公共子系列。
* @author 蓝冠恒
*/
public class LCS {
public static List resultList = new ArrayList();
/**
* 计算最优值
* @param x
* 字符系列数组
* @param y
* 字符系列数组
* @param c
* 存储x和y最长公共子系列长度数组
* @param b
* 记录c中元素对应子问题的解的数组
*/
public static void lcsLength(char x[], char y[], int[][] c, int[][] b) {
int m = x.length - 1;
int n = y.length - 1;
resultList.clear();
for (int i = 1; i <= m; i++) {
c[i][0] = 0;
}
for (int i = 1; i <= n; i++) {
c[0][i] = 0;
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (x[i] == y[j]) {
c[i][j] = c[i - 1][j - 1] + 1;
b[i][j] = 1;
} else if (c[i - 1][j] >= c[i][j - 1]) {
c[i][j] = c[i - 1][j];
b[i][j] = 2;
} else {
c[i][j] = c[i][j - 1];
b[i][j] = 3;
}
}
}
}
/**
* 构造最长公共子系列
* @param i
* 数组下标
* @param j
* 数组下标
* @param x
* 字符系列数组
* @param b
* 记录c中元素对应子问题的解的数组
*/
public static void lcs(int i, int j, char x[], int[][] b) {
if (i == 0 || j == 0) {
return;
}
if (b[i][j] == 1) {
lcs(i - 1, j - 1, x, b);
resultList.add(x[i]);
} else if (b[i][j] == 2) {
lcs(i - 1, j, x, b);
} else {
lcs(i, j - 1, x, b);
}
}
public static void main(String arg[]) {
String input;
char[] x;
char[] y;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
do {
try {
do {
System.out.println("请输入第一串字符系列(按数字键1退出系统):");
input = in.readLine().trim();
} while (input.equals(""));
if (input.equals("1")) {
break;
}
计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...相关推荐
- 算法设计与分析——动态规划(五):最长公共子序列
分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...
- 动态规划算法解最长公共子序列LCS问题
动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...
- 动态规划算法分析和理解:最长公共子序列、公共子字符串
定义啥的就不多说了,反正我有自己的理解就行.例题是,最长公共子序列和最长公共子字符串的动态规划求解过程 目录 一.递归和动态规划 二.动态规划求解步骤 三.最长公共子序列 四.最长公共子字符串 一.递 ...
- LeetCode——1143. 最长公共子序列(Longest Common Subsequence)[中等]——分析及代码(Java)
LeetCode--1143. 最长公共子序列[Longest Common Subsequence][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 (2)代 ...
- 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 给定两个字符串A和B,返回两个字符串的最长公共子序列的长度.例如,A ...
- 动态规划——最长公共子序列(算法设计课题)
问题描述: 若给定序列X={x1,x2,-,xm},则另一序列Z={z1,z2,-,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,-,ik}使得对于所有j=1,2,-,k有:zj=xi ...
- 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)...
2019独角兽企业重金招聘Python工程师标准>>> 问题描述:序列X={x1,x2,-,xn},Y={y1,y2,-,yn},当Z={z1,z2-,zn}是X的严格递增下标顺序( ...
- vb treeview 展开子节点_详解最长公共子序列问题,秒杀三道动态规划题目
学算法认准 labuladong 后台回复进群一起力扣? 读完本文,可以去力扣解决如下题目: 1143.最长公共子序列(Medium) 583. 两个字符串的删除操作(Medium) 712.两个字符 ...
- 动态规划解最长公共子序列(LCS)(附详细填表过程)
目录 相关概念 子序列形式化定义: 公共子序列定义: 最长公共子序列(以下简称LCS): 方法 蛮力法求解最长公共子序列: 动态规划求解最长公共子序列: 分析规律: 做法: 伪代码: 下面演示下c数组 ...
最新文章
- python学习面向对象_python学习之面向对象学习
- 【学术相关】如何将半页纸论文写到十页?
- 如何在VS2008中添加WM_INITDIALOG消息映射
- 一段js实现复制文本内容到剪切板
- 聚类算法当中的K-means算法如何去做天猫淘宝的推广任务
- mysql 5.6.23 源码包安装报错_Ubuntu 14.10下编译安装MySQL 5.6.23
- 如何为curl命令添加数据?
- 左手用R右手Python系列16——XPath与网页解析库
- 晒一波程序员的桌面,逼格超级高
- macd指标计算机应用,macd是怎么计算的
- 网络技术——路由器及其配置
- C# 后台处理 webp图片
- summernote 添加emoji表情包
- 软件开源,航芯方案分享 | 全自动咖啡机设计方案
- 谈谈对数据治理的理解
- IOTOS通采盒为BIM运维、GIS、CIM、数字孪生及IBMS高效率、低成本打通数据,接入楼宇园区子系统设备
- Kvaser Leaf light HS v2 | 如何使用Excel发送和接收CAN报文数据
- JS身份证号码校验,JS根据身份证号码获取出生年月日,JS根据出生年月日获取年龄,JS根据身份证号码获取性别
- url链接还原:将url 短链接(加密、压缩后的链接)还原出原始链接
- 小米5主板原理图_小米5手机拆机图解教程