LCS算法

article/2025/9/11 14:15:10

LCS算法

LCS算法
LCS是Longest Common Subsequence的缩写,即最长公共子序列。一个序列,如果是两个或多个已知序列的子序列,且是所有子序列中最长的,则为最长公共子序列。LCS不是唯一的,它可以有很多种,例如<A,B,C,B,D,A,B>和<B,D,C,A,B,A>的最长子序列可以是<B,C,A,B>也可以是<B,C,B,A>,显然都成立。
问题
在这里插入图片描述
解析
设Xi=<x1,x2,…,xi>
Yj=<y1,y2,…,yj>
定义两个数组,一个二维数组dp用来存最长序列的长度,而且最终答案一定在dp[strlen(X)][strlen(Y)]上。因为我想求出最长序列,所以又设了一个二维数组c用来存储此位置上两者判断关系,当c=1时表明直接跳过Xi作为最长子序列一员的可能,c=2时换下一个Yj,c=3时表明此时序列配对成功,记录。
这么说可能不是很清楚,接下来的例子可以让你茅塞顿开!!!!!
在这里插入图片描述在这里插入图片描述
当X和Y的子序列相等时dp+1,且C = 3,在输出最长子序列时只有当c = 3时才会输出。
下面是源代码:

#include<iostream>
#include<cstring>
#include<stack>
#include<algorithm>
#define MAX 1010
using namespace std;
int dp[MAX][MAX];
int c[MAX][MAX];//存储删除信息 1删除x,2删除y,3删除两个int main()
{char a[MAX];char b[MAX];char temp[MAX];cout << "===========依次输入两个序列===========" << endl;cin>>a>>b;//获取两条序列长度int la=strlen(a);int lb=strlen(b);memset(dp,0,sizeof(dp));memset(c,0,sizeof(c));for(int i=1; i<=la; i++){for(int j=1; j<=lb; j++){if(a[i-1]==b[j-1]){//序列a=序列b时dp+=1,记录子序列长度dp[i][j]=dp[i-1][j-1]+1;c[i][j]=3;}else{dp[i][j]=max(dp[i-1][j],dp[i][j-1]);if(dp[i][j-1]>=dp[i-1][j])c[i][j]=2;else c[i][j]=1;}}}cout<<"===========最长子序列长度为==========="<<dp[la][lb]<<endl;cout<<"=============最长子序列为============" << endl;int m=la,n=lb,i=0;while(m&&n){if(c[m][n]==1){a[m--]=' ';}else if(c[m][n]==2){b[n--]=' ';}else{temp[i++]=a[m-1];a[m--]=' ';b[n--]=' ';}}for(int j=i-1;j>=0;j--)if(temp[j]!=' ')cout<<temp[j];cout << endl;return 0;
}

http://chatgpt.dhexx.cn/article/lVnNF2WT.shtml

相关文章

Oracle中索引的原理

索引的概念 索引是一种数据库结构&#xff0c;能够就数据库中的某列提供快速查询&#xff0c;而不用检索整个表格&#xff08;官方的不行&#xff09;。 在 Oracle 数据库中&#xff0c;存储的每一行数据都有一个 rowID 来标识。当 Oracle 中存储着大量的数据时&#xff0c;意…

MongoDB索引原理及实践

背景 数据库的演进 随着计算机的发展&#xff0c;越来越多的数据需要被处理&#xff0c;数据库是为处理数据而产生。从概念上来说&#xff0c;数据库是指以一定的方式存储到一起&#xff0c;能为多个用户共享&#xff0c;具有更可能小的冗余&#xff0c;与应用程序彼此独立的…

MySql存储引擎和索引原理

转载 https://blog.csdn.net/tongdanping/article/details/79878302 注意&#xff1a; 1、索引需要占用磁盘空间&#xff0c;因此在创建索引时要考虑到磁盘空间是否足够 2、创建索引时需要对表加锁&#xff0c;因此实际操作中需要在业务空闲期间进行 MySQL支持诸多存储引擎&a…

MySQL之索引原理

1 简介 索引底层就是一种数据结构&#xff0c;空间换时间&#xff0c;能够帮助我们快速定位到对应的数据&#xff0c;就类似于字典里面的目录一样。 索引虽然能快速检索数据&#xff0c;但会影响数据修改的操作&#xff0c;而且索引存储在具体的文件&#xff0c;占用一定的空…

深入浅出数据库索引原理

使用索引很简单&#xff0c;只要能写创建表的语句&#xff0c;就肯定能写创建索引的语句&#xff0c;要知道这个世界上是不存在不会创建表的服务器端程序员的。然而&#xff0c; 会使用索引是一回事&#xff0c; 而深入理解索引原理又能恰到好处使用索引又是另一回事&#xff0…

MySQL索引原理和实现

说到索引&#xff0c;很多人都知道“索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff0c;在数据十分庞大的时候&#xff0c;索引可以大大加快查询的速度&#xff0c;这是因为使用索引后可以不用扫描全表来定位某行的数…

倒排索引原理,即为什么叫倒排索引

倒排索引的英文原名是Inverted index&#xff0c;大概因为Invert有颠倒的意思&#xff0c;所以就被翻译成了倒排&#xff0c;然后我们就会在字面上出现误解&#xff1a;理解为从A-Z颠倒成Z-A。其实它并不是字面上的意思。 倒排索引源于实际应用中需要根据属性的值来查找记录&a…

【数据库】数据库索引原理

正确的创建合适的索引 是提升数据库查询性能的基础 文章目录 1.索引是什么&#xff1f;2.为什么&#xff1f;3.索引原理B tree 4.B tree 在两大引擎中的体现5.索引的原则 1.索引是什么&#xff1f; 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。 2.为…

Mysql数据库的索引原理

写在前面&#xff1a;索引对查询的速度有着至关重要的影响&#xff0c;理解索引也是进行数据库性能调优的起点。考虑如下情况&#xff0c;假设数据库中一个表有10^6条记录&#xff0c;DBMS的页面大小为4K&#xff0c;并存储100条记录。如果没有索引&#xff0c;查询将对整个表进…

MySql索引原理与使用大全

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 一、索引介绍 索引是对数据库表中一列或多列的值进行排序的一种结构。在关系数据库中&#xff0c;索引是一种与表有关的数据库结构&#xff0c;它可以使对应于表的SQL语句执行得更快。索引的作用相…

MySQL:索引原理

文章目录 1、索引概念1.1、使用场景1.2、索引代价 2、索引分类2.1、数据结构2.2、物理存储回表查询 & 覆盖索引 2.3、字段&#xff08;列&#xff09;属性2.3.1、主键索引主键的选择 2.3.2、唯一索引2.3.2、普通索引2.3.3、前缀索引 2.4、字段&#xff08;列&#xff09;个…

索引的原理和实现的方式

建立索引 需要有索引的类型和索引的方法。 索引的类型包括了Normal Unique Full text 而索引的方法包括了BTREE 和HASH 转载文章&#xff1a;https://www.cnblogs.com/aspwebchh/p/6652855.html 博主写的真好~ 一、什么是Btree B tree &#xff08;非二叉&#xff09; 了…

索引的实现原理

这篇文章是介绍MySQL数据库中的索引是如何根据需求一步步演变最终成为B树结构的以及针对B树索引的查询&#xff0c;插入&#xff0c;删除&#xff0c;更新等操作的处理方法。Oracle和DB2数据库索引的实现基本上也是大同小异的。文章写得很通俗易懂&#xff0c;就转在这了。关于…

MySQL索引的理解学习,面试不问索引原理就是事务原理

目录 MySQL执行SQL的整体流程 引言, MySQL索引底层学习原因 磁盘介绍(理解磁盘IO) 索引底层数据结构B树 B树(聚集索引) B树(辅助索引) 思考一下为何使用B树结构, 不是B树, 不是平衡树二叉树,红黑树&#xff1f; 索引总结 MySQL执行SQL的整体流程 显示需要跟MYSQL Serv…

Git | 面试官问你 Git 原理,你能回答得出来吗?

文章目录 原创声明前言一、Git 简单介绍二、解开 Git 在日常上班操作中的神秘面纱2.1 初始化仓库git init 2.2 第n次提交git add xxxgit statusgit commit -m "xxx" 2.3 分支2.3.1 创建分支 git branch xxx2.3.2 切换分支 git checkout 2.3.3 分支中提交 总结参考资料…

Git概念及工作原理总结

Git是分布式版本控制系统。Github和华为等均使用Git作为代码管理工具。之前在工作中比较常用到的是克隆、代码提交拉取、解决回合冲突、代码回滚等。在实际的工作中&#xff0c;可能回合时冲突及版本回退的情况较多&#xff0c;下文将着重介绍这两点。本文不涉及Git的安装等&am…

Git 天天用 但是 Git 原理你了解吗?

前言 做技术一定要知其然知其所以然&#xff0c;意思就是&#xff1a;知道它是这样的&#xff0c;更知道它为什么是这样的。我主要通过4块内容来简单介绍 Git 原理是什么样的。这4块内容如下&#xff1a; Git 存储目录结构介绍Git 是如何存储的Git 的对象Git引用 当然 Git 原…

(一篇就够)git原理深入理解

深入理解git原理 1&#xff1a;git工作模式 基本步骤&#xff1a; 1.workspace 本地工作空间add命令 提交到本地缓存 2、localcache本地缓存commit命令提交到本地仓库 3、localRepository本地仓库push命令提交到远程仓库 拉取步骤&#xff1a; clone 克隆到本地仓库 checkout…

git原理笔记(一)

git原理笔记&#xff08;一&#xff09; 这个笔记是对于git内部原理的一个理解。网上很多关于git的用法的教程。这里推荐廖雪峰的git教程。 这里主要记录如下的内部原理的理解 1. git如何存储 2. git如何管理版本 一&#xff0e; git如何存储 常常在使用git的过程中&#…

git工作原理

一. git工作原理 二. git分支标准流程 三. git工具&#xff1a;sourcetree 待续知识分享