BWA-mem Smith-Waterman 算法

news2024/12/21 19:49:50

Smith-Waterman 算法简介

Smith-Waterman 算法 是一种用于局部序列比对的动态规划算法,它可以在两个序列中找到最优的局部比对,允许处理序列中的插入缺失(indels)错配。该算法最早由 Temple F. Smith 和 Michael S. Waterman 于 1981 年提出,因此得名 Smith-Waterman

核心思想

Smith-Waterman 算法通过构建一个得分矩阵,从两个序列中找到得分最高的局部比对,即找到序列中最相似的子序列,哪怕这些序列之间存在错配或 indels(插入和缺失)。

应用场景

该算法通常用于:

  • 局部比对:寻找两个序列中最相似的片段。
  • 比对短序列和长参考序列:如在基因组比对中,BWA-MEM 就使用 Smith-Waterman 算法扩展比对。
  • 序列相似性分析:用来识别基因或蛋白质序列中的相似区域。

与全局比对(如 Needleman-Wunsch 算法)的区别

  • 局部比对:Smith-Waterman 专注于找到两个序列中最相似的一部分,而不是从头到尾的全局比对。这特别有用,当你关心的是局部的相似性,而不是整个序列的相似性。
  • 允许 indels 和错配:在比对过程中,Smith-Waterman 允许插入、缺失和错配,但会根据这些事件给出相应的惩罚分数。

算法步骤

  1. 初始化得分矩阵:构建一个二维得分矩阵,序列 A 作为行,序列 B 作为列。矩阵的每个元素表示当前子序列的比对得分。
  2. 填充得分矩阵:根据相似性(匹配得分)和惩罚(错配或 indels)来填充得分矩阵。计算方式如下:
    • 匹配:如果两个字符匹配,增加匹配得分。
    • 错配:如果两个字符不匹配,扣除错配罚分。
    • 插入或缺失:如果在一个序列中存在插入或缺失,扣除 indel 罚分。
  3. 寻找最大得分:找到得分矩阵中的最大值,这表示局部比对的最优解。
  4. 回溯路径:从最大值开始,沿着得分矩阵回溯,找到局部比对的路径(即序列片段)。

示例:

假设有两个序列:

  • 序列 A:GACTTAC
  • 序列 B:CGTGAATTCAT

构建一个得分矩阵,按照上述步骤进行比对。Smith-Waterman 算法将会找到最相似的局部子序列,并返回局部比对结果。

优点:

  • 局部比对:能够准确找到最相似的片段,即使序列中有较长的不匹配部分。
  • 灵活处理 indels:适合处理带有插入和缺失的序列。

缺点:

  • 时间复杂度较高:Smith-Waterman 的时间复杂度为 O(m*n),其中 m 和 n 分别是两个序列的长度,因此对长序列的比对效率较低。

总结

Smith-Waterman 算法是一种强大的局部序列比对工具,它通过动态规划方法找到最优的局部比对区域,允许插入、缺失和错配。这使得它在基因比对、蛋白质序列分析等领域非常有用。

让我们通过这个矩阵来演示 Smith-Waterman 算法的整个比对过程。我们会逐步填写这个矩阵,并通过这个例子理解算法的流程。

输入序列
序列 A:GACTTAC
序列 B:CGTGAATTCAT
我们将通过填充比对网格,找到它们之间的最优局部比对。

步骤 1:初始化矩阵
首先,我们创建一个大小为 8 x 12 的矩阵(包括初始行和列,行列代表序列的字符)。矩阵的每个格子将存储两个字符之间的得分。

在 Smith-Waterman 算法中,矩阵的第一行和第一列初始化为 0。这是因为比对可以从任何位置开始,不必从头比到尾。
整个 Smith-Waterman 算法的比对过程。接下来,我们将继续基于序列 A (GACTTAC) 和 B (CGTGAATTCAT) 填充矩阵,找出最优的局部比对。

1. 初始化矩阵

首先,初始化矩阵第一行和第一列为 0:

      C   G   T   G   A   A   T   T   C   A   T
    +------------------------------------------
G   0   0   0   0   0   0   0   0   0   0   0
A   0
C   0
T   0
T   0
A   0
C   0

2. 定义打分规则

  • 匹配得分:+1
  • 错配罚分:-1
  • 插入/缺失(indel)罚分:-1

3. 填充矩阵

我们继续按照之前的示例填充剩下的部分。

第 1 行(序列 G 与 C, G, T, G, A, A, T, T, C, A, T)
  • (G, C):错配,得分 0。
  • (G, G):匹配,得分 1。
  • (G, T):错配,得分 0。
  • (G, G):匹配,得分 1。
  • (G, A):错配,得分 0。
  • (G, A):错配,得分 0。
  • (G, T):错配,得分 0。
  • (G, T):错配,得分 0。
  • (G, C):错配,得分 0。
  • (G, A):错配,得分 0。
  • (G, T):错配,得分 0。

因此,第 1 行填充如下:

      C   G   T   G   A   A   T   T   C   A   T
    +------------------------------------------
G   0   0   1   0   1   0   0   0   0   0   0
A   0
C   0
T   0
T   0
A   0
C   0
第 2 行(序列 A 与 C, G, T, G, A, A, T, T, C, A, T)
  • (A, C):错配,得分 0。
  • (A, G):错配,得分 0。
  • (A, T):错配,得分 0。
  • (A, G):错配,得分 0。
  • (A, A):匹配,得分 1。
  • (A, A):匹配,得分 1。
  • (A, T):错配,得分 0。
  • (A, T):错配,得分 0。
  • (A, C):错配,得分 0。
  • (A, A):匹配,得分 1。
  • (A, T):错配,得分 0。

因此,第 2 行填充如下:

      C   G   T   G   A   A   T   T   C   A   T
    +------------------------------------------
G   0   0   1   0   1   0   0   0   0   0   0
A   0   0   0   0   0   1   1   0   0   0   1
C   0
T   0
T   0
A   0
C   0
第 3 行(序列 C 与 C, G, T, G, A, A, T, T, C, A, T)
  • (C, C):匹配,得分 1。
  • (C, G):错配,得分 0。
  • (C, T):错配,得分 0。
  • (C, G):错配,得分 0。
  • (C, A):错配,得分 0。
  • (C, A):错配,得分 0。
  • (C, T):错配,得分 0。
  • (C, T):错配,得分 0。
  • (C, C):匹配,得分 1。
  • (C, A):错配,得分 0。
  • (C, T):错配,得分 0。

因此,第 3 行填充如下:

      C   G   T   G   A   A   T   T   C   A   T
    +------------------------------------------
G   0   0   1   0   1   0   0   0   0   0   0
A   0   0   0   0   0   1   1   0   0   0   1
C   0   1   0   0   0   0   0   0   1   0   0
T   0
T   0
A   0
C   0
继续填充剩余行

通过类似的步骤,我们可以逐步完成整个矩阵的填充。

4. 回溯路径

通过矩阵得分最高的区域,我们可以回溯找到局部最优的比对区域。

这就是 Smith-Waterman 算法的完整流程。你对这个过程有疑问或需要进一步的详细说明吗?

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

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

相关文章

【最新华为OD机试E卷-支持在线评测】英文输入法(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

AD之Layout设计规则

设计规则&#xff1a; 间距 线宽 过孔 铺铜 其他 1.添加类 这里建立了PWR类&#xff0c;与电源相关的网络 2.间距规则:6mil的成本低 3.线宽规则&#xff1a;PWR的优先级排第一&#xff0c;否则不起作用 4.过孔规则&#xff1a;8mil<大小<12mil 4.铺铜规则

音视频开发:FFmpeg库的使用

文章目录 一、FFmpeg的介绍二、FFmpeg的安装三、FFmpeg的使用1.ffplay&#xff1a;播放音视频2.ffprobe&#xff1a;查看视频信息3.ffmpeg&#xff1a;处理视频(1)格式转换(2)帮助 四、参考资料 一、FFmpeg的介绍 FFmpeg 是使用广泛的多媒体框架&#xff0c;是一个强大的音视频…

LeetCode讲解篇之740. 删除并获得点数

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 首先对于这题我们如果将所有点数装入一个切片f中&#xff0c;该切片f中的i号下标表示所有点数为i的点数之和 那么这题就转换成了打家劫舍这道题&#xff0c;也就是求选择了切片中某个下标的元素后&#xff0c;该…

观察者模式和发布-订阅模式的区别

观察者模式是&#xff0c;当被观察者的数据发生变化时&#xff0c;调用被观察者的 notify 方法&#xff0c;去通知所有观察者执行 update 方法进行更新&#xff1b; 对于发布-订阅模式&#xff0c;首先发布者与订阅者互相并不知道彼此的存在&#xff0c;他们是通过事件中心来进…

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况&#xff0c;没理过&#xff0c;因为不影响啥除了不美观...但今天看着实在是难受&#xff0c;怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法&#xff0c;都不得行&#xff0c;后面发现了这篇文章&#xff0c;解决了! 感谢&#xff01; Element中t…

微知-Mellanox 网卡和NVIDIA Bluefield DPU如何备份firmware?

某些场合需要从网卡或者DPU上读取网卡的firmware 备份命令&#xff1a; flint -d 06:00.0 ri 1.bin实操&#xff1a; 注意&#xff1a; 有些网卡不支持到处firmware

工具软件分享:11个免费的 android数据恢复应用程序功能分析

在手机上丢失数据是一个很大的错误。但是&#xff0c;在这种情况下&#xff0c;除了惊慌失措之外&#xff0c;最好开始使用android数据恢复应用程序搜索以查找将其取回的方法。您可以检查手机的备份存储以在Android上进行数据恢复&#xff0c;但是如果数据仍然无处可寻&#xf…

elementui时间选择器time-picker返回值不对的问题

1. 问题 天杀的elementui的time-picker&#xff0c;导致我开发的系统出现了一次生产问题&#xff0c;原因竟然是因为组件库的bug&#xff01;直接上截图。 如图&#xff0c;正常情况下&#xff0c;选择时间后&#xff0c;想要得到的值理应是当天的时间&#xff0c;如图是当年…

什么是AI网关?AI网关在企业系统中承担什么角色?

AI 大模型的发展正在推动各行业的增长&#xff0c;据有关报告显示&#xff1a;“未来十年内预计年均增长率将达到37.3%&#xff0c;全球企业预计在2027年之前将在AI领域投入8000亿美元"。这一迅猛发展促使许多企业进行战略转型&#xff0c;技术团队也需要调整其构建、运行…

牛客编程初学者入门训练——BC17 缩短二进制

BC17 缩短二进制 描述 我们处理的整数通常用十进制表示&#xff0c;在计算机内存中是以二进制补码形式存储&#xff0c;但通常二进制表示的整数比较长&#xff0c;为了便于在程序设计过程中理解和处理数据&#xff0c;通常采用八进制和十六进制&#xff0c;缩短了二进制补码表…

Spark高级用法-自定义函数

用户可以根据需求自己封装计算的逻辑&#xff0c;对字段数据进行计算 内置函数&#xff0c;是spark提供的对字段操作的方法 &#xff0c;split(字段) 对字段中的数进行切割&#xff0c;F.sum(字段) 会将该字段下的数据进行求和 实际业务中又能内置函数不满足计算需求&#xff0…

AI如何对产品设计带来更多的可能性?

AI(人工智能)对产品设计带来了广泛而深远的可能性&#xff0c;这些可能性主要体现在以下几个方面 1.创新设计的激发 创意生成:AI能够学习和模仿人类设计师的创作过程&#xff0c;通过深度学习等技术生成全新的、独特的设计概念。这些概念可能源于对大量设计案例的学习和分析&am…

AMD在Advancing AI发布会上发布三大核心硬件产品,挑战英伟达AI芯片市场

美国时间10月10日&#xff0c;AMD在旧金山召开了Advancing AI发布会。 这是老对手英伟达2024 AI Summit 结束后的第三天。与英伟达大会的不同之处在于&#xff0c;英伟达专注于软件方面的更新&#xff0c;而AMD主打“硬”牌。 这一次&#xff0c;他们带来了三款核心硬件产品&…

Python 批量转换 Shapefile 为 GeoJSON

批量转换 Shapefile (.shp) 为 GeoJSON 文件的脚本详解 &#x1f5fa;️&#x1f504; 在地理信息系统&#xff08;GIS&#xff09;和遥感领域&#xff0c;Shapefile&#xff08;.shp&#xff09;格式与GeoJSON格式是两种常用的数据格式。Shapefile 作为矢量数据的标准格式之一…

使用scss生成旋转圆圈

图片 html代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

直播相关04-录制麦克风声音, 通过编程录音

一 通过编程录音 开发录音功能的主要步骤是&#xff1a; 注册设备获取输入格式对象打开设备采集数据释放资源 需要用到的FFmpeg库有4个。 extern "C" { // 设备相关API #include <libavdevice/avdevice.h> // 格式相关API&#xff0c;也就是说&#xff0c;win…

Mysql(2)—SQL语法详解(通俗易懂)

一、关于SQL 1.1 简介 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发&#xff0c;旨在处理关系数据模型…

Python基础常见面试题总结

文章目录 1.深拷贝与浅拷贝2.迭代器3.生成器4.装饰器5.进程、线程、协程6.高阶函数7.魔法方法8.python垃圾回收机制 1.深拷贝与浅拷贝 浅拷贝是对地址的拷贝&#xff0c;只拷贝第一层&#xff0c;第一层改变的时候不会改变&#xff0c;内层改变才会改变。深拷贝是对值的拷贝&a…

【第十六周】回顾线性回归与逻辑回归以及它们的详细推导过程

目录 摘要Abstract1.线性回归1.1.一元线性回归1.1.1.函数凹凸性判断 1.2.多元线性回归1.3.进一步理解梯度下降法 2.逻辑回归2.1.信息论角度推导交叉熵损失函数2.2.概率论角度推导交叉熵损失函数 3.额外阅读&#xff1a;Label Smoothing3.1.One-hot 和 Label Smoothing 的优缺点…