最长公共子序列问题

最长公共子序列问题Python实现 最长公共子序列问题 问题介绍 最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。一个数列 ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则称为已知序列的最长公共子序列 —— [ 百度百科 ] 本文使用动态规划技术算法时间复杂度为Θ(mn),优于蛮力搜索的时间复杂度为Θ(m2n)。 使 阅读详情
#include<iostream>
#include<cstring>
#include<cmath>

using namespace std;
/*****************************************/
/*

最长公共子序列,带备忘录的自底向上的求解过程

*/
/*****************************************/

int lcs(char * s1, char *s2, int **note)
{
	int len1 = strlen(s1);
	int len2 = strlen(s2);

	note = (int **) malloc(sizeof(int *)*(len1+1));

	for(int i = 0; i <= len1; i++ )
		note[i] = (int *) malloc(sizeof(int)*(len2+1));

	for (int i = 0; i <= len1; i++ )
		note[i][0] = 0;

	for (int j = 0; j <= len2; j++ )
			note[0][j] = 0;

	for (int i = 1; i <= len1; i++ )
	{
		for (int j=1; j <= len2; j++ )
		{
			if ( s1[i-1] == s2[j-1])
			{
				note[i][j] = note[i-1][j-1] + 1;
			}else
			{
				note[i][j] = max(note[i][j-1], note[i-1][j]);
			}
		}
	}
	return note[len1][len2];
}

int main(int argc, char const *argv[])
{
	int **note = NULL;

	char s1[] = "abcdfa";

	char s2[] = "bcadh";

	int res = lcs(s1, s2, note);

	cout<<"最长公共子序列:"<<res<<endl;

	return 0;
}

 

最长公共子序列问题动态规划 最长公共子序列问题: 若给定序列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和 阅读详情

相关推荐

动态规划—最长公共子序列问题

一、动态规划 动态规划(Dynamic Programming)是一种设计的技巧,是解决多阶段决策过程最优化问题的通用方法。 基本思想:将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解(这部分与分治法相似)。与分治法不同的是,适合于用动态规划求解的问题,经分解得到的子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被

Tham 在思索中前行! 2179

最长公共子序列问题LCS

最长公共子序列问题LCS转贴自http://algorithm.diy.myrice.com/algorithm/index.html?technique/dynamic_programming/preface.htm问题描述一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=x1, x2,…, xm>,则另一序列Z=z1, z2,…, zk>是X的子序列

cspyb的专栏 3095

STM32异常与中断过程详解

1. 异常与中断概念引入 异常主要是指来自CPU内部的意外事件,比如执行了未定义指令、算术溢出、除零运算等发生在CPU内部的意外事件,这些异常的发生,会引起CPU运行相应的异常处理程序;中断一般来自硬件(如片上外设、外部I/O输入等)发生的事件,当这些硬件产生中断信号时,CPU会暂停当前运行的程序,转而去处理相关硬件的中断服务程序。但无论是异常还是中断,都会引起程序执行偏离正常的流程,转而去执行异常/中断的处理函数。 下面对异常和中断的介绍,如果中断信号的产生原因来自CPU内部,则称之为异常;如果中断信号来

luobeihai的博客 1万+

详解最长公共子序列问题

最长公共子序列问题作为动态规划的经典案例,不仅具有重要的理论价值,还在众多实际场景中发挥着关键作用。通过深入理解动态规划的思想,掌握状态定义、转移方程的推导以及算法实现和优化方法,我们能够有效解决这一问题,并将其思想应用到更多类似的问题中

2332

halcon3D 点云拟合球体

halon3D 点云拟合球面

weixin_43213429的博客 1639

汽车以太网- IEEE 802.3标准

关于汽车以太网,大家看到最多的标准大概就是IEEE802.3bw,也就是我们车内使用的百兆以太网,专业称呼是100BASE-T1,该标准是车内百兆以太网的物理层协议,是我们学习汽车以太网必须要了解的协议。在正式了解协议之前,我们先介绍下什么是IEEE802.3标准。............

weixin_39974126的博客 7106

动态规划解最长公共子序列问题

1 最长公共子序列问题概述 1.1 问题定义 序列A={a1,a2,...,am}A=\{a_1,a_2,...,a_m\}A={a1​,a2​,...,am​},序列B={b1,b2,...,bn}B=\{b_1,b_2,...,b_n\}B={b1​,b2​,...,bn​}。如果存在一个序列C={c1,c2,...,ck}C=\{c_1,c_2,...,c_k\}C={c1​,c2​,...,ck​},其中ci∈A,Bc_i \in A,Bci​∈A,B (i=1,2,...,k)(i=1,2,..

qq_39545674的博客 1197

HUAWEI华为荣耀MagicBook MateBook B D E X 13 14 16 笔记本MateStation台式机原装Win10出厂Windows11系统

HUAWEI华为MateBookX原装出厂系统恢复原厂系统,型号:MACHC-WAE9LP、EUL-W29P、MACHR-W19L、MACHR-W29、MACHD-WFE9、MRGF-16、MACHR-W19BL、MACHD-WFE9Q、WT-W19、Mach-W19、Mach-W29、WT-W09、WT-W19、MACH-W29等。HUAWEI华为MateBookE原装出厂系统恢复原厂系统,型号:PAK-AL09、GK-W7X、GK-G58、GK-W76、DRC-W76等。

QQ17855069的博客 17万+

最长公共子序列问题(C语言)

最长公共子序列(C语言) 问题描述 首先需要科普一下,最长公共子序列(longest common sequence)和最长公共子串(longest common substring)不是一回事儿。什么是子序列呢?即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。什么是子串呢?给定串中任意个连续的字符组成的子序列称为该串的子串。给一个图再解释一下: 如上图,给定的字符序列: {a,b,c,d,e,f,g,h} 它的子序列示例: {a,c,e,f} 即元素b,d,g,h被去掉后,

Weightlessly的博客 8136

LoRa模块选型指南:正点原子ATK-LORA-01与SX1278芯片深度评测(含实测距离/功耗数据)

本文深度评测了正点原子ATK-LORA-01与SX1278芯片的性能表现,通过实测数据展示其在复杂环境中的通信距离与功耗表现。特别适合智慧农业、工业监测等物联网应用场景,提供详细的配置指南和优化技巧,帮助开发者实现高效、低功耗的LoRa通信解决方案。

weixin_29191081的博客 290

【详细图文】使用MobaXterm的SSH功能远程连接服务器,并创建pytorch环境,使用yolov8训练数据集

使用MobaXterm的SSH功能远程连接服务器,并创建pytorch环境,使用yolov8训练数据集,以及MobaXterm使用介绍和linux基础命令介绍。

qq_62844901的博客 3382
上一篇: 动态规划寻找最优解(钢条切割问题)
下一篇: 二叉搜索树
Perfect_chen
博客等级 码龄8年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值