算法设计与分析——动态规划——最长公共子序列

算法分析与设计实验 动态规划法 求最长公共子序列 实验目的   加深对动态规划法的算法原理及实现过程的理解,学习用动态规划法解决实际应用中的 最长公共子序列问题。 实验内容   内容: 用动态规划法实现求两序列的最长公共子序列,其比较结果可用于基因比较、文 章比较等多个领域。   要求:掌握动态规划法的思想,及动态规划法在实际中的应用; 分析最长公共子序列的 问题特征,选择算法策略并设计具体算法,编程实现两输入序列的比较, 并输出它 阅读详情

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<bits/stdc++.h>
#define MAXLEN 50
using namespace std;

void LCSlength(int m,int n,char *x,char *y,int c[][MAXLEN],int b[][MAXLEN])
{
	for(int i=0;i<=m;i++)//m为字符个数 
	{
		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-1]==y[j-1])//因为字符串是在从第0位开始存储的
			{
				c[i][j]=c[i-1][j-1]+1;
				b[i][j]=1;//本算法采用1,2,3三个整形作为标记
			}
			else if(c[i-1][j]>=c[i][j-1])//这个else if关键 
			{
				c[i][j]=c[i-1][j];
				b[i][j]=2;
			}
			else
			{
				c[i][j]=c[i][j-1];
				b[i][j]=3;
			}
		}
	}
}

void LCS(int i,int j,char *x,int b[][MAXLEN])
{
	if(i==0||j==0)
	{
		return;
	}
	if(b[i][j]==1)
	{
		LCS(i-1,j-1,x,b);
		cout<<x[i-1]<<" ";
	}
	else if(b[i][j]==2)//这个else if 很关键 
	{
		LCS(i-1,j,x,b); 
	}
	else
	{
		LCS(i,j-1,x,b);
	}
 } 
int main()
{
	
	

 char x[MAXLEN] = {"*abcbdab"};
    char y[MAXLEN] = {"*bdcdba"};
//传递二维数组必须知道列数,所以使用MAXLEN这个确定的数
    int  b[MAXLEN][MAXLEN];//b矩阵是用来存储这个问题是由那个子问题来解决的                       
    int  c[MAXLEN][MAXLEN];//c矩阵用来存储最长公共子串的长度 

    int m, n;

    m = strlen(x);
   // cout<<m<<endl;
    n = strlen(y);
    //cout<<n<<endl;


	LCSlength(m,n,x,y,c,b);
	cout<<"b矩阵是用来存储这个问题是由那个子问题来解决的"<<endl; 
	 for(int i=0;i<=m;i++)
	{
		for(int j=0;j<=n;j++)
		{
			cout<<b[i][j];
		}
		cout<<endl;
	 } 
	 
	 
	 cout<<"c矩阵用来存储最长公共子串的长度 "<<endl;
	  for(int i=0;i<=m;i++)
	{
		for(int j=0;j<=n;j++)
		{
			cout<<c[i][j];
		}
		cout<<endl;
	 } 

	LCS(m,n,x,b);
	
	
 } 

在这里插入图片描述

算法设计与分析:第四章 动态规划 4.5最长公共子序列 /* 最长公共子序列: 假定,A=a 1 a 2 …a n 是字母表∑上的一个字符序列,如果存在 ∑上的另外一个字符序列S=c 1 c 2 …c j ,使得对所有的k, k=1,2,…,j,有c k =a ik (其中,1≤ik≤n),是字符序列A的一个 下标递增序列,则称字符序列S是A的子序列。 如果∑={x,y,x}, ∑上的字符序列是A=xyzyxzxz,则xxx是A的 一个长度为3的子 阅读详情

相关推荐

最长公共子序列 计算机算法分析与设计

算法设计与分析中的一个算法函数,用C编的

计算机算法设计与分析 之 动态规划的最长公共子序列

动态规划 选择的算法: 最长公共子序列 算法概述: 动态规划是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 最长公共子序列,最长公共子序列是一个在一个序列集合中用来查找所有序列中最长子序列的问题。 步骤分析: 假设我们求题——对于两个子序列 Str1 和 Str2,找出它们最长的公共子序列。 定义一个二维数组 dp 用来存储最长公共子序列的长度如下面的表格所示,用 dp[i][j] 表示 Str1 的前 i 个字符与 Str

数据库爆破专家的博客 664

算法设计与分析-最长公共子序列问题

这个是个人写的关于最长公共子序列问题的C++算法,有涉及到数组长度的容错能力,但没有涉及字符不匹配的容错能力。没多少时间啊,不过里面有输出关于L二维数组,和S二维数组的具体内容。有需要的,就下载吧。

【算法设计与分析】最长公共子序列问题 动态规划算法 超详细

最长公共子序列问题描述 运行效果 调试中的一个过程截取 单步填写之后 …其余中间过程省略 最终执行结果↓ 输出:BDFI 代码 #include<iostream> #include<cstring> using namespace std; int c[10][7];//Xi Yj的最长公共子序列的长度 int s[10][7];//c[i][j]的值是由...

寒泉 3万+

java算法分析与设计之最长公共子序列问题源代码

java算法分析与设计之最长公共子序列问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,尤其是java代码简直如大海捞针。因此,做完这次课程设计,我决定把这些资源传到广大学生钟爱的优快云上供大家分享学习,希望能真正帮到大家!

自动驾驶入门到进阶完整指南:感知、预测、规划、端到端、仿真测评与场景挖掘全解析

对小白来说,不建议一开始直接冲端到端大模型。先学数据和坐标系:否则所有结果都看不懂。再学 LiDAR 3D 检测:最容易建立空间感。再学 BEV/多相机感知:这是当前主流。再学轨迹预测:理解交互和多模态。再学规划控制:理解车为什么这样开。再学仿真和闭环评测:理解 open-loop 和 closed-loop 差异。最后学端到端/VLM/VLA:这时候你才知道它到底替代了哪些模块。贯穿始终学习场景挖掘和安全测评:这是工业界最核心的能力之一。

u013250861的博客 392

【算法设计与分析】 最长公共子序列(动态规划)

【算法设计与分析】 最长公共子序列(动态规划) 【问题描述】 使用动态规划算法解最长公共子序列问题,具体来说就是,依据其递归式自底向上的方式依次计算得到每个子问题的最优值。 【输入形式】 在屏幕上输入两个序列X和Y,序列各元素数间都以一个空格分隔。 【输出形式】 序列Xi = {x1, …, xi}和序列Yj = {y1, …, yj}的最长公共子序列的长度。序列X和Y的其中一个最长公共子序列,也就是当序列X和Y有多个最长公共子序列时,只输出其中的一个。这个输出的最长公共子序列选取的方法是:当xi不等于yj

weixin_46283740的博客 2147

LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟

我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。

Ceshigo_CD的博客 4837

【算法设计与分析】动态规划:最长公共子序列

A先生找到了其失散多年的兄弟。为了确定血缘关系,A先生决定做DNA鉴定。请编写程序,比较两组基因,A先生基因片段为{A,C,T,C,C,T,A,G}, A先生兄弟基因片段为{C,A,T,T,C,A,G,C},找出两人基因片段中最长相同的部分(最长公共子序列)。采用动态规划策略解决该问题。 1)分析问题的最优子结构性质,写出最优值递归定义。 0, i= 0或j = 0 c[i][j] = { c[i-1][j-1]+1, i,j > 0和

qq_30260147的博客 856

【个人成长笔记】在Ubuntu中安装RTL8188GU USB无线网卡驱动(Driver for Linux RTL8188GU)

这篇笔记提供了在Ubuntu系统中安装RTL8188GU无线网卡驱动的完整指南。主要内容包括:驱动程序的官方来源(Github链接)、详细安装步骤(通过git下载、编译安装等命令),以及将设备转换为USB网卡模式的关键指令。特别提醒每次开机都需要执行模式转换命令,因为设备默认会以U盘模式启动。文章以简洁的技术文档形式呈现,适合Linux用户快速查阅和操作。

yuhuasheng1997的博客 1826

vue2/3 - H5 移动端网页中调用手机摄像头扫描二维码 / 条形码功能,在h5手机网页里调起相机摄像头进行二维码或条形码扫描效果详细教程(详细示例组件源码,一键复制开箱即用!)

vue扫描二维码条形码,vue网页调用摄像头扫二维码条形码,vue移动端如何实现调用相机扫描二维码,vue移动端扫一扫功能,vue怎么做移动端h5扫一扫功能,vue识别二维码和条形码,vue实现点击按钮调用摄像头扫码,vue调用本地摄像头实现拍照功能,Vue中如何进行二维码生成与扫描,如何实现vue在手机浏览器中调用摄像头实现扫描二维码功能,VUE项目移动端H5调用摄像头扫码,vue项目中实现H5调取摄像头,网页调用摄像头实现二维码扫描功能,vue调用手机摄像头,vue在调用摄像头扫码,vue自定义打开摄像

✅ 精选推荐文章 1万+

算法设计分析之三(动态规划,最长公共子序列)

1.        动态规划 动态规划是通过组合子问题的解从而得到整个问题的解。 1.1.       与分治算法区别 分治法是将问题分解为独立的子问题,递归求解子问题,最后再合并子问题从而得到问题的解。 动态规划并不要求子问题独立,因此子问题可以包含公共的子子问题。这时候如果用分治法,则会重复计算很多不必要的工作,即重复计算公共的子子问题。 1.2.       思想 动态规划是将子

onyheart的专栏 2933

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1946

计算机算法设计与分析之不定期更新的日常+动态规划矩阵连乘+最长公共子序列

计算机算法设计与分析之不定期更新的日常+动态规划矩阵连乘 代码实现与分析如下: #include #include #include using namespace std; const int maxn=50; int m[maxn][maxn]; int s[maxn][maxn]; void matrixChain(int *p,int n)///自底向上计算 {

而濡木染 1004

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 209

zynq的irq_f2p 如何增加或修改中断引脚个数(宽度)

ZYNQ开发过程中,如果使用PL到PS的中断,会产生一个疑问,设置界面显示可以有[91:84]、[68:61]共16个中断引脚,但是并没有设置中断口的宽度,如果使用多个中断引脚,应该怎么办?如果通过concat连接多个引脚,则自动调整为对应的引脚数。例如连接3个中断信号,则自动调整为:IRQ_F2P[2:0]

FPGA艺术家的博客 833

【动态规划】最长公共子序列——算法设计与分析

介绍了最长公共子序列问题及其相关概念,并按照动态规划基本步骤给出求解策略以及算法实例,分析了算法复杂度。

友人帐_的博客 5685

claude-hub:GitHub上的AI开发助手,让Claude自动帮你写代码、审代码、合代码

代码不再是人写的,而是人引导 AI 写的。在这个时代,GitHub 不再只是一个代码托管平台,而是 AI 开发代理的工作台。每一个 issue、每一条 PR,都可能是一次与 AI 合作的机会。未来属于那些敢于把开发流程交给 AI 来优化的人——他们不是在取代自己,而是在放大自己的影响力。📌关注本系列文章,我们将持续输出关于 AI 编程、GitHub 自动化、AI Agent 产品化的深度分析。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 1372

算法设计与分析——动态规划(五):最长公共子序列

分类目录:《算法设计与分析》总目录 在生物应用中,经常需要比较两个(或多个)不同生物体的DNA。一个DNA串由一串称为碱基的分子组成,碱基有腺嘌呤、鸟嘌呤、胞嘧啶和胸腺嘧啶4种类型。我们用英文单词首字母表示4种碱基,这样就可以将一个DNA串表示为有限集A,C,G,T{A,C,G,T}A,C,G,T上的一个字符串。例如,某种生物的DNA可能为S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAAS_1= ACCGGTCGAGTGCGCGGAAGCCGGCCGAAS1​=ACCGGTCGAGTGCGC

冯·诺依曼 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

算法设计与分析 动态规划 最长公共子序列 C++实现 19180319 算法设计与分析演讲稿

最长公共子串前言最长公共子序列介绍实现原理1.暴力算法2.动态规划代码展示时间复杂度分析 前言 这篇博客是为了方便我的算法设计与分析课程的讲解的,是作业驱动型,所以不会太适合用来学习 最长公共子序列 介绍 子串和子序列的区别,一言以蔽之,子串是连续的,子序列可以是不连续的,这里我借用别人的图来介绍一下 实现原理 1.暴力算法 如果使用暴力算法,大致思想是将str1中的所有可能子序列提取出来,然后在str2中寻找,是否有对应的子串,如果有,则储存起来。 这个方法其实只要稍微想一想,就是十分不合理的,首

weixin_44062380的博客 897

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【算法设计与分析】实验3:动态规划—最长公共子序列

动态规划算法通常分为以下几个步骤:找出最优问题特点:明确问题的最优解具有什么样的性质,这是使用动态规划的前提。定义递归关系:根据问题的最优子结构,建立子问题之间的递归关系,这是动态规划的核心。自底向上计算每一步结果:利用递归关系,从最小的子问题开始,逐步求解更大的子问题,直到求解出原问题。构造最优解:根据保存的中间结果,构造出原问题的最优解。

m0_73970214的博客 1450

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【算法设计与分析】动态规划算法(矩阵连乘问题、0-1背包问题、最长公共子序列问题、最优二叉检索树问题)

第二行 输入n + 1 个数,相邻两个数分别代表矩阵的行、列数。3)能够对实际问题,能够按照动态规划解题步骤,分析问题;5)能够正确分析算法的时间复杂度和空间复杂度。时间复杂度和空间复杂度均为 O(n * m)第一行 一个正整数 n 表示矩阵的个数。4)能够正确的编码、实现动态规划算法;2)掌握算法的基本要素及解题步骤;1)了解动态规划算法思想;最佳添加括号的方式为:(A。最小计算量的值为:150。

naogua_wyy的博客 1775

算法设计与分析 动态规划之最长公共子序列

添加链接描述

weixin_45351699的博客 330

算法设计与分析 | 动态规划(最长公共子序列)

英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.每组测试数据输出一个整数,表示最长公共子序列长度。第一行给出一个整数N(0

大胆尝试,小心实践 755

计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...

动态规划法解最长公共子序列(计算机算法设计与分析实验报告)实报 告 实验名称:任课教师::姓 名:完成日期:二、主要实验内容及要求:要求按动态规划法原理求解问题;要求交互输入两个序列数据;要求显示结果。 三、实验环境和工具:操作系统:win7操作系统开发工具:eclipse3.4、jdk1.6开发语言:java四、实验结果与结论:(经调试正确的源程序和程序的运行结果)1、源代码:package c...

weixin_29227425的博客 639

算法分析 | 动态规划算法设计之最长公共子序列 C语言版

算法分析 | 动态规划算法设计之最长公共子序列 C语言版 不墨迹,直接上代码! 凡代码问题,欢迎在评论区沟通。承蒙指正,一起成长!

kndjg的博客 5515
上一篇: 算法设计与分析——动态规划——数字三角形问题
下一篇: 算法设计与分析———动态规划———最大子段和
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值