跳转到内容

Smith-Waterman 算法

快速概览

Smith-Waterman 算法是局部比对的标准动态规划算法:它在两条序列中寻找得分最高的局部相似片段,而不要求全局对齐。

  • 关键区别在于允许从任意位置开始和结束比对
  • 它是 BLAST 等数据库搜索工具的理论基础
所属板块 核心方法

索引、比对、组装与概率模型构成的核心算法主轴。

阅读目标 帮助建立阅读上下文

先判断这页与你当前问题的关系,再决定是否深入展开。

建议前置 先建立相关基础对象与方法直觉

建议先建立相关基础对象与方法直觉,再进入本页。

Smith-Waterman 算法是 1981 年提出的用于局部序列比对的动态规划算法。它解决了以下问题:

给定两条序列和一个打分体系,找到两条序列之间得分最高的局部相似片段。

这里的”局部”意味着:比对可以从任意位置开始,在任意位置结束,不需要覆盖整个序列。

在实际生物信息学应用中,Smith-Waterman 适合的场景包括:

  • 在大型数据库中搜索保守结构域或 motif
  • 寻找两条序列中最相似的局部区域
  • 检测功能位点或保守序列模式
  • 作为 BLAST 等启发式算法的理论基础

Smith-Waterman 需要定义三个参数:

  • 匹配得分 s(a, a):相同字符对齐时的奖励
  • 错配得分 s(a, b):不同字符对齐时的惩罚(通常为负值)
  • Gap 罚分 g:插入或删除一个字符的代价(通常为负值)

设序列 X = x₁x₂...x_m,序列 Y = y₁y₂...y_n

定义 H[i][j] 为:以 x_iy_j 结尾的局部比对的最大得分。

H[0][j]=0,j=0,1,...,nH[i][0]=0,i=0,1,...,m\begin{aligned} H[0][j] &= 0, \quad j = 0, 1, ..., n \\ H[i][0] &= 0, \quad i = 0, 1, ..., m \end{aligned}

边界条件的含义:空串与任何序列的局部比对得分为 0,表示可以从任意位置开始比对。

i > 0j > 0 时:

H[i][j]=max{0重新开始比对H[i1][j1]+s(xi,yj)匹配或替换H[i1][j]+g在 X 中插入 gap(删除 xiH[i][j1]+g在 Y 中插入 gap(插入 yjH[i][j] = \max \begin{cases} 0 & \text{重新开始比对} \\ H[i-1][j-1] + s(x_i, y_j) & \text{匹配或替换} \\ H[i-1][j] + g & \text{在 X 中插入 gap(删除 } x_i \text{)} \\ H[i][j-1] + g & \text{在 Y 中插入 gap(插入 } y_j \text{)} \end{cases}

当前单元格 H[i][j] 从四个来源取最大值:0(止损/重新开始)、对角线(H[i-1][j-1] + s(xi, yj))、上方(H[i-1][j] + g)、左方(H[i][j-1] + g)。

关键区别:与 Needleman-Wunsch 相比,Smith-Waterman 多了一个选项 0,表示如果当前前缀对齐已经不值得继续(得分跌破 0),就直接从这里重新开始。

最优局部比对的得分为矩阵中的最大值:

Hmax=max0im, 0jnH[i][j]H_{\max} = \max_{0 \leq i \leq m,\ 0 \leq j \leq n} H[i][j]
  1. 创建一个 (m+1) × (n+1) 的矩阵 H
  2. 将第一行和第一列全部初始化为 0

按照行优先或列优先的顺序,从 H[1][1] 开始,使用递推公式填充整个矩阵。

在矩阵中找到最大值 H_max 及其位置 (i_max, j_max)。如果有多个最大值,可以选择任意一个或全部输出。

(i_max, j_max) 开始回溯,直到遇到 H[i][j] = 0

  1. 比较三个可能的来源,确定当前单元格的值来自哪个方向:

    • H[i][j] = H[i-1][j-1] + s(x_i, y_j)x_iy_j 对齐,移动到 H[i-1][j-1]
    • H[i][j] = H[i-1][j] + gx_i 与 gap 对齐,移动到 H[i-1][j]
    • H[i][j] = H[i][j-1] + gy_j 与 gap 对齐,移动到 H[i][j-1]
    • H[i][j] = 0:停止回溯
  2. 重复上述过程直到遇到 0

  3. 将收集到的对齐片段反转,得到最终比对结果

考虑两条 DNA 序列:

  • X = GATTACA(长度 m = 7)
  • Y = GCATGCU(长度 n = 7)

使用以下打分体系:

  • 匹配得分:+1
  • 错配得分:-1
  • Gap 罚分:-2
εGCATGCU
ε00000000
G0
A0
T0
T0
A0
C0
A0

H[1][1] 为例(G 对 G):

  • 重新开始:0
  • 匹配:H[0][0] + s(G,G) = 0 + 1 = 1
  • X 插入 gap:H[0][1] + g = 0 + (-2) = -2
  • Y 插入 gap:H[1][0] + g = 0 + (-2) = -2
  • 取最大值:H[1][1] = max(0, 1, -2, -2) = 1

完整矩阵如下:

εGCATGCU
ε00000000
G01000100
A00010000
T00002000
T00001100
A00010000
C00100010
A00020000

矩阵中的最大值为 2,出现在以下位置:

  • H[4][4] = 2(T 对 T)
  • H[8][4] = 2(A 对 A)

我们选择 H[4][4] 作为起点。

H[4][4] = 2 开始回溯:

  1. H[4][4] = 2 来自 H[3][3] + s(T,T) = 0 + 1 = 1(匹配)

    • T 与 T 对齐
    • 移动到 H[3][3]
  2. H[3][3] = 1 来自 H[2][2] + s(A,A) = 0 + 1 = 1(匹配)

    • A 与 A 对齐
    • 移动到 H[2][2]
  3. H[2][2] = 0:停止回溯

得到的局部比对:

AT
||
AT

得分:1 + 1 = 2

如果从 H[7][3] = 2(最后一个A对A)回溯:

  1. H[7][3] = 2 来自 H[6][2] + s(A,A) = 1 + 1 = 2(A 与 A 匹配)
  2. H[6][2] = 1 来自 H[5][1] + s(C,G) = 0 + 1?不对,验证:H[5][1]=0, s(C,G)=-1

实际上观察矩阵,H[6][2]=1 可能来自 H[5][2]H[6][1] 的 gap 或另一条路径。

一条可能的回溯路径:

位置(7,3): A-A 匹配, 得分 +1, 剩余得分 1
位置(6,2): C 与某字符对齐...

实际回溯需要严格验证递推关系。Smith-Waterman 的核心特点是:找到矩阵最大值后,回溯直到遇到 0,期间经过的路径即构成局部比对。

  • 填充矩阵:O(mn),每个单元格需要常数时间计算
  • 找到最大值:O(mn),需要遍历整个矩阵
  • 回溯:O(m + n),最多走 m + n
  • 总时间复杂度:O(mn)
  • 存储完整矩阵:O(mn)
  • 如果只需要得分不需要回溯:可以优化到 O(min(m, n))(只保留两行或两列)
  • 如果需要回溯但空间受限:可以使用 Hirschberg 算法的思想进行优化
维度 Needleman-Wunsch Smith-Waterman
比对类型 全局比对 局部比对
边界条件 `F[i][0] = i·g`, `F[0][j] = j·g` `H[i][0] = 0`, `H[0][j] = 0`
递推公式 3 个选项 4 个选项(多一个 0)
回溯起点 固定在 `(m, n)` 矩阵中的最大值位置
回溯终点 固定在 `(0, 0)` 遇到 0 时停止
适用场景 序列整体相似 寻找局部保守片段

Smith-Waterman 算法是:

  • BLAST 的理论基础:BLAST 使用 seed-and-extend 策略近似 Smith-Waterman
  • 数据库搜索的标准方法:用于精确的局部相似性搜索
  • 保守结构域识别的基础工具

但由于其 O(mn) 的时间复杂度,Smith-Waterman 本身很少直接用于大规模数据库搜索。现代工具通常使用:

  • 启发式算法(如 BLAST):牺牲一部分敏感性换取速度
  • 硬件加速:使用 GPU 或 FPGA 加速 Smith-Waterman
  • 索引技术:结合 FM-index 等索引结构缩小搜索空间
  • GPU 加速:利用并行计算加速矩阵填充
  • FPGA 加速:专用硬件实现 Smith-Waterman
  • SIMD 指令:使用 CPU 向量指令优化
  • 分块计算:将大矩阵分块,利用缓存局部性
  • 早期终止:当得分超过阈值时提前终止
  • 带状搜索:如果已知相似区域的位置,限制搜索带宽
  • Smith, T. F., & Waterman, M. S. (1981). Identification of common molecular subsequences. Journal of molecular biology, 147(1), 195-197.
  • Durbin, R., Eddy, S., Krogh, A., & Mitchison, G. (1998). Biological sequence analysis: probabilistic models of proteins and nucleic acids. Cambridge university press.