利用Python实现Smithwaterman算法

def smith_waterman(seq1, seq2, match_score=3, mismatch_penalty=-1, gap_penalty=-2):
# 初始化矩阵
matrix = [[0] * (len(seq2) + 1) for _ in range(len(seq1) + 1)]
max_score = 0
max_i, max_j = 0, 0

# 填充矩阵
for i in range(1, len(seq1) + 1):for j in range(1, len(seq2) + 1):if seq1[i - 1] == seq2[j - 1]:score = matrix[i - 1][j - 1] + match_scoreelse:score = max(matrix[i - 1][j] + gap_penalty,matrix[i][j - 1] + gap_penalty,matrix[i - 1][j - 1] + mismatch_penalty)if score > max_score:max_score = scoremax_i, max_j = i, jmatrix[i][j] = max(score, 0)# 回溯,获取最大得分路径
align1, align2 = '', ''
i, j = max_i, max_j
while i > 0 and j > 0 and matrix[i][j] != 0:if matrix[i][j] == matrix[i - 1][j - 1] + (match_score if seq1[i - 1] == seq2[j - 1] else mismatch_penalty):align1 = seq1[i - 1] + align1align2 = seq2[j - 1] + align2i -= 1j -= 1elif matrix[i][j] == matrix[i - 1][j] + gap_penalty:align1 = seq1[i - 1] + align1align2 = '-' + align2i -= 1else:align1 = '-' + align1align2 = seq2[j - 1] + align2j -= 1return max_score, align1, align2

示例用法

seq1 = “AGCACACA”
seq2 = “ACACACTA”
score, align1, align2 = smith_waterman(seq1, seq2)
print(“Alignment score:”, score)
print(“Sequence 1:”, align1)
print(“Sequence 2:”, align2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】学习笔记——string_4

文章目录 六、string类7. string类的模拟实现 未完待续 六、string类 7. string类的模拟实现 我们在上文简单实现了string类的构造函数。不知道大家有没有发现一个问题,我们在进行实现无参的构造函数时,初始化列表将 _str 初始化为 nullptr 了&#xf…

CRI-O的原理及应用详解(四)

本系列文章简介: 随着云计算和容器技术的迅猛发展,容器化应用已经成为现代软件开发和部署的重要趋势。在这一领域中,Kubernetes作为容器编排的领军者,为开发者提供了强大的容器管理和调度能力。然而,Kubernetes本身并不…

Unity LensFlare 入门

概述 在项目的制作过程中,太阳光的使用一定是不可缺少的部分,但是如果想实现真实太阳光眼睛看到的镜头炫光效果,那这部分的内容一定不要错过喔,接下来让我们来学习这部分的内容吧! Hale(光环效果) Color:…

TiDB中的PD--元数据管理和调度中心

目录 PD 架构etcd 的使用TiDB 的 PD(Placement Driver)组件是整个分布式数据库系统的关键部分, 是整个集群的元数据管理和调度中心,负责存储集群的元数据和进行 Region 调度。 主要包括: 元数据存储:PD 存储了整个 TiDB 集群的元数据,包括 TiKV 集群的拓扑结构、Namespa…

Vue在/public目录下访问process.env.NODE_ENV(其它通用)

总所周知,/public目录下的js文件是不会经过webpack处理的. 所以process.env.NODE_ENV 也无效.无法判断,当要根据这个去判断的时候就麻烦了. 但有个办法可以解决这个问题. 先安装 npm install --save-dev cross-env 就是在index.html里面去赋值到window变量中,如下 在 /pu…

操作系统:线程

目录 前言: 1.线程 1.1.初识线程 1.2.“轻量化”进程 1.3.线程与进程 2.线程控制 2.1.pthread原生线程库 2.2.线程控制的接口 2.2.1.线程创建 2.2.线程退出|线程等待|线程分离|线程取消 2.3.pthread库的原理 2.4.语言和pthread库的关系 2.5.线程局部…

数据可视化宝典:Matplotlib图形实战

在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotl…

Linux之sed命令(包含MacOS使用方法)

Linux之sed命令 一、概述二、用法1、文件末尾追加一行2、指定行后新增一行3、指定行前新增一行4、修改指定行5、删除指定行 一、概述 Linux下的sed命令是一种流编辑器,用于在命令行中对文本进行处理,常见的操作如:添加、修改、删除、追加等。…

模型智能体开发之metagpt-单智能体实践

需求分析 根据诉求完成函数代码的编写,并实现测试case,输出代码 代码实现 定义写代码的action action是动作的逻辑抽象,通过将预设的prompt传入llm,来获取输出,并对输出进行格式化 具体的实现如下 定义prompt模版 …

前端开发中可能出现内存泄漏的情况总结

前端开发中可能出现内存泄漏的情况主要包括以下几种: 1. 闭包引起的循环引用 当一个函数内部引用了外部作用域的变量,并且该函数的作用域链没有被适时断开,就可能形成循环引用。特别是当DOM元素的事件处理函数使用闭包访问外部变量时&#…

Oracle故障处理:正在使用的索引失效了

项目场景 昨日,五一放假前一天,项目现场有同事反应业务系统出了问题: 在数据库中用测试数据发现insert、update 等操作不可用。 在应用系统的输出日志中发现数据库抛出了如下异常: ORA-01502:索引 ‘XX.PK_IXXX’ 或这类索引的…

神经网络与深度学习--网络优化与正则化

文章目录 前言一、网络优化1.1网络结构多样性1.2高维变量的非凸优化1.鞍点2.平坦最小值3.局部最小解的等价性 1.3.改善方法 二、优化算法2.1小批量梯度下降法(Min-Batch)2.2批量大小选择2.3学习率调整1.学习率衰减(学习率退火)分段…

Android数据恢复软件快速比较:Android数据恢复的7最佳工具

您在 Android 设备上保留哪些类型的数据?如果您和大多数人一样,那么您可能已经列出了文档、照片、视频和音频文件。如果您使用智能手机或平板电脑的时间足够长,我们愿意打赌您拥有Android数据丢失的第一手经验。 幸运的是,我们也…

打破失联困境:门店如何利用AI智能名片B2B2C商城小程序重构与消费者的紧密连接?

在如今这个消费者行为日益碎片化的时代,门店经营者们时常感叹:消费者进店如同一场不期而遇的缘分,然而一旦离开门店,就仿佛消失在茫茫人海中,难以再觅其踪迹。这种“进店靠缘分,离店就失联”的困境&#xf…

Cisco IOS XE Web UI 权限提升漏洞复现(CVE-2023-20198)

0x01 产品简介 Web UI 是一种基于GUI的嵌入式系统管理工具,能够提供系统配置、简化系统部署和可管理性以及增强用户体验。它带有默认映像,因此无需在系统上启用任何内容或安装任何许可证。Web UI 可用于构建配置以及监控系统和排除系统故障,而无需CLI专业知识。 0x02 漏洞…

Codeforces Round 941 (Div. 2) D. Missing Subsequence Sum

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5; c…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习三

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

【刷爆力扣之二叉树】107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II 这道题要求进行自底向上的层序遍历&#xff0c;可以先使用正序层序遍历的方式对树进行遍历&#xff0c;然后将每一层的遍历结果放入一个栈数据结构中&#xff0c;等遍历完成后&#xff0c;将栈数据结构中的每一层的节点再弹出加入到结果集合&#xf…

java-spring-mvc(服务端接收客户端传参)

目录 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 ✨ 声明参数接收 ✨声明pojo类来接收 &#x1f52a;小试牛刀 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 HttpServletRequest是Java Servlet规范中定义的一个接口&#xff0c;它提供了与HTTP请求…

JVM对象锁的升级过程

在Java中&#xff0c;锁升级是一个动态过程&#xff0c;JVM根据运行时的线程竞争情况自动调整锁的状态。这个过程涵盖从偏向锁到轻量级锁&#xff0c;最后可能升级到重量级锁。下面详细解释每个步骤以及它们之间的转换机制。 1. 偏向锁 偏向锁是一种针对单线程执行代码块的优…