最长公共子序列

【Python】最长公共子序列LCS LCS的定义 最长公共子序列,即Longest Common Subsequence,LCS。 一个序列S任意删除若干个字符得到新序列T,则T叫做S的子序列; 两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列。 字符串13455 与245576的最长公共子序列为455 字符串acdfg与adfc的最长公共子序列为adf 注意区别最长公共子串(Longest C... 阅读详情

    最近发现以前学的那点算法知识完全忘记了,马上要ACM比赛了,要恶补啊

大二上自学了C++,STL,数据结构,数据库。一直想继续学算法,却感觉自己基础差,想早点补基础,大二上学期马上就要过去了,努力熟练运用STL,并且掌握数据结构里的树和图,大二下主攻算法,算法才是程序的灵魂啊。。。ACM的路很长,也很艰难,能坚持下的人才会有真正的提升。。

 

最常见的动态规划题目-----求最长公共子序列问题;

大致主要思想:

 用两个一维字符数组 存储两个要比较的字符串,用一个二维数组c[i][j] 计算 数组a前i个和数组b前j个的公共子序列的长度;

 

c[i][j] =   {    0                                                (i=0,j=0)

                    c[ i -1 ][ j-1 ] + 1                       ( a[i] == b[j])

                  max( c[ i-1 ][ j ],c[ i ][ j-1]);          (a[i] != b[j])

              }

代码如下:  可能写得啰嗦了一点

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char a[1000],b[1000];
int c[1000][1000];
int i,j,maxx ;
int main()
{
    while(scanf("%s%s",a+1,b+1) != EOF)
    {

        maxx = -999;
        int la = strlen(a+1);
        int lb = strlen(b+1);
        for(i = 0;i <= la; i++)
       c[i][0] = 0;
       for(j = 0;j <= lb;j ++)
       c[0][j] = 0;
        for(i = 1; i <= la; i++)
        {
            for(j = 1; j <= lb; j++)
            {
                if(a[i] == b[j])
                {
                    c[i][j] = c[i-1][j-1] +1;

                }
                else
                    c[i][j] = max(c[i-1][j],c[i][j-1]);

                if(maxx < c[i][j])
                    maxx = c[i][j];
            }
        }
        printf("%d\n",c[la][lb]);
    }
    return 0;
}

感觉动态规划 状态转移方程是最主要的, 不过很难搞,变化挺多的,多做题才是正道,不要急于求成啊。。。。
关于求解最长公共子序列的两种思路 一、题目描述 求取两个给定序列的最长子序列,仅需要求取出其中一个最长子序列即可。 比如序列 X 为 ABCBDAB ,序列 Y 为 BDCABA,则其公共最长子序列之一为 BCBA(可能不唯一)。 关于求解所有最长公共子序列的思路可以移步我的另一篇博文: https://blog.youkuaiyun.com/qq_40697071/article/details/89059844 二、解题思路 ... 阅读详情

相关推荐

关于求解所有最长公共子序列的思路

没有最好的解法,只有更好的解法 一、题目描述 求取两个给定序列的最长子序列( 需要求解出所有的最长公共子序列 )。 比如序列 X 为 ABCBDAB ,序列 Y 为 BDCABA,则其公共最长子序列之一为 BCBA( 可能不唯一 )。 二、解题思路 时隔几日,我又再次回到了这道题,如果看过我之前文章的朋友应该知道我前几天写过一篇关于求解最长公共子序列的文章,但是当时的要求就是只需求解...

Coder Yang 6309

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

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

m0_52124992的博客 8620

算法:最长公共子序列

好久没做算法题了,现在发现自己的算法能力非常薄弱,所以特意练练,顺便做个笔记方便以后查看。 今天整理一下最长公共子序列,最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。 一、最长公共子序列概念: 最长公共子序列,是指两个字符串可具有的长度最大的公共的子序列。听着好像有点绕口,举个例子吧: 上面标红的就是最长公共子序列,是不

gjnm820的博客 2764

最长公共子序列(LCS)问题(算法思想及代码)

(1)问题描述:输入:两个字符串X、Y,X=(,,...,)、Y=(,,...,);输出:Z=X和Y的最长公共子序列。 注释: 最长公共子串。如X=(a,b,d,a,c,b,a)、Y=(c,d,d,a,c,b),则最长公共子序列为Z=(d,a,c,b)。字符串的子序列是字符串的前缀。 (2)问题分析: 1.定义:设X=(,,...,)是一个序列,X的第i个前缀是一个序列,定义为=X=(,,...,) 2.优化解结构: :表示前缀X、Y的最长公共子序列的长度 子问题具有重叠性: 采用动

m0_56603583的博客 1396

最长公共子序列变种——带权的最长公共子序列

1 问题描述 在前一篇文章中

xianghonglee的专栏 1731

最长公共子序列(LCS)

最长公共子序列(LCS) 最长公共子序列是另一个经典的动态规划问题。 与上节中数字序列的子序列定义相同,在字符串 S 中按照其先后顺序依次取出若干个字符,并将它们排列成一个新的字符串,这个字符串就被称为原字符串的子串。 有两个字符串 S1 和 S2,求一个最长公共子串,即求字符串 S3,它同时为S1 和 S2 的子串,且要求它的长度最长,并确定这个长度。这个问题称为最长公共子序列问题。 与求最长递...

Yoc Lu 2871

最长公共子序列—思路清晰

1、最长公共子序列的描述 最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。一个数列 ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则称为已知序列的最长公共子序列。 最长公共子序列问题是一个经典的计算机科学问题,也是数据比较程序,比如Diff工具,和生物信息学应用的基础。它也被广泛地应用在版本控制,比如Git用来调和文件之间的改变。 2、定义 最长公共子序列,英文缩写为LCS(Longest Common Subseque.

lishifu_的博客 977

最长公共子序列问题

最长公共子序列问题 Description 给定两个序列 X={x1,x2,…,xm} 和 Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 Input 输入数据有多组,每组有两行 ,每行为一个长度不超过500的字符串(输入全是大写英文字母(A,Z)),表示序列X和Y。 Output 每组输出一行,表示所求得的最长公共子序列的长度,若不存在公共子序列,则输出0。 Sample Input...

qq_45666654的博客 2042

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

动态规划之最长公共子序列(PTA)

Wu_L7的博客 1万+

C++两字符串的最长公共子序列的个数及打印出最长公共子序列

输入两字符串,输出最长的公共子序列长度。 采用动态规划思想。 假设字符串a长度为n,字符串b的长度为m, 使用一个二维数组arr[n+1][m+1]来记录每种情况下最长公共子序列的长度。 初始状态:字符串a空元素,字符串b空元素。这样的情况就填0.也就是二维数组首行首列全为0. 假设: a{a,b,c,d} b{b,c,a,d} 行 i 是字符串a的元素,列 j 是字符串b的元素 状态转换方程:如果这个二维数组中的i行字符等于j列中字符的情况,那么arr[i][j]就等于它的左上角arr[i - 1][j

loreal8的博客 1852

最长公共子序列算法总结

最长公共子序列的两种算法简介,一种是平时最常见的算法,还有一种用滚动数组来做的。

力扣 | 最长公共子序列 | 动态规划 | 最长公共子序列长度、最长公共子序列

(我们不知道哪个回文中心最好使)

m0_63997099的博客 2817

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 183

最长公共子序列C++实现

最长公共子串,C++实现,附带思路解析

haust_允谦的博客 5550

Mamba与iTransformer融合:时间序列预测中的曼巴注意力机制创新实践

本文探讨了Mamba与iTransformer融合在时间序列预测中的创新实践,重点介绍了曼巴注意力机制的设计与优势。通过双路径信息流设计,该方案在保持O(n)复杂度的同时,显著提升了预测精度和训练效率。实验证明,混合架构在电力负荷、气象数据等多变量长序列场景中表现优异,预测误差降低至0.083,内存占用仅4.2GB。

weixin_29292535的博客 219

Nexys4DDR+OV7670实现图像灰度显示系统嵌入式

通过对硬件平台的准备、Vivado工程配置、OV7670驱动程序的编写、图像灰度处理算法的设计以及系统集成与测试,我们成功实现了一个基于嵌入式系统的图像处理应用。当系统运行时,OV7670摄像头模块将采集到的图像传输到FPGA芯片中,然后通过图像灰度处理算法将彩色图像转换为黑白图像,并在显示设备上进行显示。OV7670摄像头模块的驱动程序是实现图像采集的核心。以上代码中,我们使用了Xilinx提供的XGpio和Xil_In32函数来进行OV7670摄像头数据的读取和GPIO的初始化。OV7670驱动程序。

WangWEel的博客 337

3.3 最长公共子序列

我的理解:在字符串或序列中,子序列是指从原始序列中删除零个或多个元素后得到的序列,而且相对顺序保持不变。换句话说,子序列是从原始序列中选择出的元素,它们保持相对顺序,但可以跳过一些元素或者不选择任何元素。举个例子,考虑序列 "abcd",它的一些子序列包括:"a","b","c","d","ab","ac","ad","bc","bd","cd","abc","abd","acd","bcd","abcd"。注意,这些子序列可能不一定是连续的,可以跳过某些元素。

tang7mj的博客 3006

RDKit | 基于Murcko骨架聚类化合物库

化合物多样性评估 一种方法是使用合适的指纹技术将化合物矢量化并评估他们之间的距离。这种方法经常被使用,但是对于人类很难直观地理解化合物之间的距离。 基于Murcko骨架,分子大致聚集在化合物骨架中,并且每个簇中的顶部化合物都作为候选化合物。此方法非常符合人类的直觉,因此可以预期人将通过查看候选化合物列表来自动缩小化合物的范围。 Murcko骨架 Mur...

DrugOne 3766

洛谷 最长公共子序列

给出12n的两个排列P1​和P2​,求它们的最长公共子序列。

2401_89065428的博客 1497

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:步进电机PID位置控制系统的实现

步进电机(Stepper Motor)是一种将电脉冲信号转化为角位移的执行元件,具有结构简单、控制方便、定位精度高等优点,广泛应用于数控机床、机器人、打印机、3D打印机等需要精确定位的场合。传统的步进电机多采用开环控制,但在高速或负载变化较大的情况下容易出现丢步、振荡等问题。为提高控制精度与响应性能,闭环PID控制被引入步进电机的位置控制中,通过编码器或旋转变压器等反馈装置,实现高精度、高稳定性的位置控制。本教程将带你使用构建一个基于PID控制的步进电机位置控制系统仿真模型步进电机建模。

MHD0815的博客 9688

【第三方互联】12、支付宝(Alipay)授权第三方登录

我们创建了支付宝开放平台的网页&移动应用,审核通过后,我们需要拿到appid,支付宝公钥,私钥进项开发 一、添加应用信息至项目环境中 我们保存了 appid、应用私钥、支付宝公钥、支付宝回调地址等信息,这里的公钥为支付宝开放平台为我们生成的“支付宝公钥” 二、引入 Maven 依赖 <!-- 支付宝SDK --> <dependency> <g.........

JACKAL 21万+

算法:最长公共子序列(输出所有最长公共子序列/Python实现)

前言: 如何求最长公共子序列的长度相信大家都很熟悉,但是如何求出最长公共子序列的所有可能结果呢?接下来,就让小编带大家了解一下小编使用的方法吧。 问题描述: 我们先给定两个序列,以这个为例,求出它们最长公共子序列的所有可能,并储存入列表后输出。 s1 = '357486782' s2 = '13456778' 基本流程: 阶段一:找出最长公共子序列长度。 现在我们先研究如何找出最长公共子序列长度的问题,我们先把s1和s2的内容排成一行和一列,组成个图表,并在第一个留空,然后将留空的行列全部填

qiucd的博客 3434

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5924
上一篇: C语言程序的内存布局
下一篇: STL_ count,count_if用法
i丹明扬
博客等级 码龄15年 331粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值