Rosalind 033 Finding a Shared Spliced Motif

2023-12-29 11:36

本文主要是介绍Rosalind 033 Finding a Shared Spliced Motif,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目背景:

上述问题的解决方法是使用动态规划来找出两个DNA字符串的最长公共子序列(LCS)。

https://rosalind.info/problems/lcsq/

很经典的动态规划问题了。直接给出解题步骤:

1. 初始化矩阵:创建一个大小为 (len(s) + 1) x (len(t) + 1) 的矩阵。将第一行和第一列的元素初始化为零。这些代表了一个字符串与空字符串的LCS,其长度为零

2. 填充矩阵:对于矩阵中的每个元素 (i, j)(不包括第一行和第一列),检查字符 s[i-1] 和 t[j-1] 是否相等。

  • 如果相等,该单元格的值为左上角对角线单元格 (i-1, j-1) 的值加1。
  • 如果不相等,取其正上方 (i-1, j) 或左侧 (i, j-1) 单元格中的最大值。

下面上图来解释这个动态的过程:

3. 回溯找出LCS:从矩阵的右下角单元格 (len(s), len(t)) 开始回溯以重构LCS。

  • 如果 s[i-1] 等于 t[j-1],则该字符是LCS的一部分。向左上对角线移动,并将此字符添加到LCS中。
  • 如果不相等,向值较高的方向移动(向上或向左)。如果两者相等,可以选择任一方向。

4. 重构LCS:在回溯过程中收集的字符(逆序排列)形成了LCS。

题目要求:

给定输入:给定两个最大长度为1kbp的DNA字符串s和t(以FASTA格式表示)。

输出:s和t的一个最长公共子序列。如果存在多个解决方案,你可以返回任何一个。

代码:

from method import fastanamelist,valuelist = fasta("")s = valuelist[0]
t = valuelist[1]def lcs(s, t):# 创建一个动态规划矩阵dp = [[0] * (len(t) + 1) for _ in range(len(s) + 1)]# 填充矩阵for i in range(1, len(s) + 1):for j in range(1, len(t) + 1):if s[i - 1] == t[j - 1]:dp[i][j] = dp[i - 1][j - 1] + 1else:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])# 回溯找出LCSi, j = len(s), len(t)lcs = []while i > 0 and j > 0:if s[i - 1] == t[j - 1]:lcs.append(s[i - 1])i -= 1j -= 1elif dp[i - 1][j] > dp[i][j - 1]:i -= 1else:j -= 1# LCS是逆序构建的return ''.join(reversed(lcs))
print(lcs(s, t))

这篇关于Rosalind 033 Finding a Shared Spliced Motif的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/549307

相关文章

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

【0324】Postgres内核 Shared Buffer Access Rules (共享缓冲区访问规则)说明

0. 章节内容 1. 共享磁盘缓冲区访问机制 (shared disk buffers) 共享磁盘缓冲区有两套独立的访问控制机制:引用计数(a/k/a pin 计数)和缓冲区内容锁。(实际上,还有第三级访问控制:在访问任何属于某个关系表的页面之前,必须持有该关系表的适当类型的锁。这里不讨论关系级锁。) Pins 在对缓冲区做任何操作之前,必须“对缓冲区pin”(即增加其引用计数, re

#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version

昨天编译文件时出现了Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~的错误。   在网上很容易找到了解决的方案,公布如下:   对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使

Windows用户取消共享文件夹密码方法(Method for Windows Users to Cancel Shared Folder Password)

Windows用户取消访问共享文件夹密码方法 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老 导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监

sqlplus: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such

在Zabbix Server服务器上安装oracle-instantclient11.2后,结果使用sqlplus命令时遇到“sqlplus: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory“错误,下面总结一下解决过程。

随机算法 - HNU 13348 Finding Lines

Finding Lines Problem's Link:  http://acm.hnu.cn/online/?action=problem&type=show&id=13348&courseid=0   Mean:  给你平面上1e5个点,让你判断是否可以找到一条直线,使得p%的点都在这条直线上。 analyse: 经典的随机算法题。 每次随机出两个点,

【POJ】 2049 Finding Nemo BFS

题目大意:给你一个奇奇怪怪的迷宫, 这个迷宫包括墙和门。再给你一个起始坐标, 问你从迷宫内到外面至少要穿越多少的门。 题目分析: 穿越多少门等同于路过了多少个格子。 为此我们可以将整个地图中的格子,门,墙,墙的交界处(格子的顶点)全部抽象成点。 即坐标(奇数,奇数)为格子的坐标,坐标(奇数,偶数)或坐标(偶数,奇数)为门或墙的坐标,坐标(偶数,偶数)为格子的顶点。 这样题目就转化成了从起

关于std::shared_ptr和enable_share_from_this的一个隐蔽的问题

在使用共享指针时,遇到了一个如下问题: #include <iostream>class traversal;class observer {std::shared_ptr<traversal> m_tra;public:observer(std::shared_ptr<traversal> t):m_tra(t) {};~observer() { std::cout << "releas

解决libstdc++.so.6: cannot open shared object file: No such file or directory:问题

使用arm-linux-gcc工具时提示config.log提示 libstdc++.so.6: cannot open shared object file: No such file or directory: 原因在于,ubuntu 18.04 版本 ia32_libs 被废弃了导致没有32位的lib库。 解决方法 sudo apt-get install lib32stdc++6

面向对象_引用类型_内存分析_垃圾回收JAVA028-033

来源:http://www.bjsxt.com/ 1、S01E028_01面向对象概述 2、面向对象编程(OOP)的本质 ——以类的方式组织代码,以对象的方式组织(封装)数据 对象:是具体的事物 类:是对对象的抽象(抽象 抽出象的部分) 先有具体的对象,然后抽象各个对象之间象的部分,归纳出类,通过类再认识其它对象 3、引用类型 JAVA中除基本类型之外的变量类型都称之为引用类型