最长公共子序列python

ops/2024/11/13 7:19:24/

一、问题描述

一个序列的子序列是在该序列中删去若干元素后得到的序列。例:“ABCD”和“BDF”都是“ABCDEFG”的子序列。

最长公共子序列(LCS)问题:给定两个序列X和Y,求X和Y长度最大的公共子序列

例:X="ABBCBDE" Y="DBBCDB"

LCS(X,Y)="BBCD"
 

python">from audioop import reversedef lcs_lenght(x, y):m = len(x)n = len(y)c = [[0 for _ in range(n+1)] for _ in range(m+1)]for i in range(1, m+1):for j in range(1, n + 1):if x[i - 1] == y[j - 1]:c[i][j] = c[i - 1][j - 1] + 1else:c[i][j] = max(c[i-1][j], c[i][j-1])for _ in c:print(_)return c[m][n]def lcs(x, y):m = len(x)n = len(y)c = [[0 for _ in range(n + 1)] for _ in range(m + 1)]b = [[0 for _ in range(n + 1)] for _ in range(m + 1)]for i in range(1, m+1):for j in range(1, n + 1):if x[i - 1] == y[j - 1]:c[i][j] = c[i - 1][j - 1] + 1b[i][j] = '↖'elif c[i - 1][j] > c[i][j - 1]:c[i][j] = c[i-1][j]b[i][j] = '↑'else:c[i][j] = c[i][j-1]b[i][j] = '←'for _ in c:print(_)for _ in b:print(_)return c[m][n], bdef lcs_trac(x, y):c, b =lcs(x, y)i = len(x)j = len(y)res = []while i > 0 and j > 0:if b[i][j] == '↖':res.append(x[i-1])i -= 1j -= 1elif b[i][j] == '↑':i -= 1else :j -= 1return ''.join(reversed(res))print(lcs_trac('SGYV','SGYUY'))

二、结果展示

python">[0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 1]
[0, 1, 2, 2, 2, 2]
[0, 1, 2, 3, 3, 3]
[0, 1, 2, 3, 3, 3]
[0, 0, 0, 0, 0, 0]
[0, '↖', '←', '←', '←', '←']
[0, '↑', '↖', '←', '←', '←']
[0, '↑', '↑', '↖', '←', '↖']
[0, '↑', '↑', '↑', '←', '←']
SGY


http://www.ppmy.cn/ops/132691.html

相关文章

PySide6百炼成真(6)

布局控件 布局用处的介绍 常用的三种布局 垂直布局水平布局格子布局 项目:使用格子布局重新制作一个计算器 项目:重新制作进制转换器 其实还有一种布局QFormLayout但是后期开发用的比较少 from PySide6.QtWidgets import QApplication, QWidget, QVB…

基于混沌序列和小波变换层次化编码的遥感图像加密算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于小波变换层次化编码的遥感图像加密算法matlab仿真。分析加解密处理后图像的直方图,相关性,熵,解密后图像质量等。 2.测试…

sql速度优化多条合并为一条语句

在 SQL 中,结合 CASE 和 SUM 可以实现根据特定条件进行分组求和。在 ThinkPHP 中也可以使用类似的方式进行数据库查询操作。 例如,假设有一个销售数据表,包含字段 product_id (产品 ID)、 quantity (销…

B2119 删除单词后缀

B2119 删除单词后缀 #include <iostream> using namespace std; # include <string.h> #include <ctype.h> #include <algorithm> #include <string.h> int main(){ string word; cin>>word; if(word.size()> 2 && word.…

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景 简介 Spring Boot 是一个基于 Spring 框架的简化开发框架,它旨在简化 Spring 应用的初始搭建和开发过程。Spring Boot 提供了一系列的注解,使得开发者可以更加方便地进行应用开发和配置。本文将详细介绍 S…

vue2 和 vue3的区别

1.生命周期不一样 vue2 vue3 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroyDestroy onBeforeMount()onMounted()onBeforeUpdate()onUpdated()onBeforeUnmount()onUnmounted() 2.Composition组合式api Vue2是选项API&#xff08;Options API&…

Java与HTML中的标题、文本和图像

一、HTML中的标题 HTML标题标签的基础 在HTML中&#xff0c;标题使用<h1>到<h6>标签来定义&#xff0c;<h1>表示最高级别的标题&#xff0c;<h6>表示最低级别的标题。例如&#xff1a; html复制代码 <h1>这是一级标题</h1><h2>这是…

Ai绘画软件 Stable Diffusion 最新安装包(附安装包)

Stable Diffusion&#xff0c;作为近年来备受瞩目的AI图像生成工具&#xff0c;以其强大的文本到图像生成能力&#xff0c;正在逐步改变创意产业与商业应用的格局。随着Stable Diffusion 4.9的发布&#xff0c;这款工具在技术性能上取得了显著提升&#xff0c;以满足从专业研究…