跳转到内容

带状动态规划

快速概览

带状动态规划是序列比对的加速优化技术:它限制搜索在主对角线附近的带状区域内进行,将时间复杂度从 O(mn) 降低到 O(b·min(m,n))。

  • 核心假设是两条序列的相似度较高,最优路径不会偏离主对角线太远
  • 它是 seed-and-extend 策略中扩展阶段常用的优化方法
所属板块 核心方法

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

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

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

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

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

带状动态规划(Banded Dynamic Programming)是对标准动态规划算法的空间和时间优化技术。

它的核心思想是:如果两条序列的相似度较高,那么最优比对路径通常不会偏离主对角线太远。因此,我们可以限制 DP 矩阵的计算只在主对角线附近的带状区域内进行。

标准动态规划算法(如 Needleman-Wunsch、Smith-Waterman)的时间复杂度是 O(mn),对于长序列来说计算成本很高。

带状动态规划解决了这个问题:

  • 当序列相似度较高时,可以大幅减少计算量
  • 在 seed-and-extend 策略中,扩展阶段通常只需要在局部区域进行精细比对
  • 对于已知的同源序列比对,带状 DP 可以在保证最优性的同时显著加速

设序列 X 的长度为 m,序列 Y 的长度为 n。

定义带宽 b(bandwidth),表示允许偏离主对角线的最大距离。

对于位置 (i, j),如果满足以下条件,则在带状区域内:

ijb|i - j| \leq b

或者更精确地,考虑到序列长度差异:

i/mj/nϵ|i/m - j/n| \leq \epsilon

其中 ε 是允许的相对偏差。

带状矩阵只计算对角线附近的单元格:

j
0 1 2 3 4 5 6 7
0 ● ● ●
1 ● ● ● ●
i 2 ● ● ● ● ●
3 ● ● ● ● ●
4 ● ● ● ● ●
5 ● ● ● ●
6 ● ● ●
7 ● ●

其中 表示需要计算的单元格,空白区域不需要计算。

在带状区域内,边界条件需要调整:

  • 对于带状区域外的单元格,设为 -∞(对于最大化问题)
  • 只在带状区域内进行递推计算

根据序列相似度估计或经验值选择带宽 b

  • 如果已知序列相似度约为 90%,则 b ≈ 0.1 × max(m, n)
  • 在 seed-and-extend 中,根据 seed 的位置和长度估计带状区域
  • 保守选择:b = max(m, n) / 2(退化为完整 DP)

创建一个 (m+1) × (2b+1) 的压缩矩阵,只存储带状区域内的值。

按照标准 DP 递推公式填充带状矩阵,但只计算满足 |i - j| ≤ b 的单元格。

从带状矩阵的终点(或最大值位置)开始回溯,回溯路径限制在带状区域内。

考虑两条序列:

  • X = AGTACG(长度 m = 6)
  • Y = ACATAG(长度 n = 6)

假设两条序列相似度较高,选择带宽 b = 2

带状区域包括满足 |i - j| ≤ 2 的单元格:

εACATAG
ε
A
G
T
A
C
G

其中 表示需要计算的单元格。

使用标准 Needleman-Wunsch 递推公式:

  • 匹配得分:+1
  • 错配得分:-1
  • Gap 罚分:-2

为简化演示,这里只展示部分计算:

  • F[1][1](A 对 A):max(0+1, -2-2, -2-2) = 1
  • F[2][2](G 对 C):max(1-1, 1-2, 0-2) = 0

(完整矩阵填充省略)

F[6][6] 开始回溯,路径限制在带状区域内。

  • 带状区域内单元格数量:O(b·min(m, n))
  • 每个单元格计算:O(1)
  • 总时间复杂度:O(b·min(m, n))

b << max(m, n) 时,这比 O(mn) 有显著改进。

  • 存储带状矩阵:O(b·min(m, n))
  • 可以进一步优化到 O(b)(只保留当前带状行)

如果已知序列相似度为 s,则:

b(1s)×max(m,n)b \approx (1 - s) \times \max(m, n)

例如,相似度 90% 的序列,b ≈ 0.1 × max(m, n)

在 seed-and-extend 策略中:

  1. 找到精确匹配的 seed
  2. 根据 seed 的位置和长度估计带状区域
  3. 带宽通常设置为 seed 长度的一定比例

一些实现使用自适应带宽:

  • 初始使用较小带宽
  • 如果在带状区域内找不到有效路径,逐步扩大带宽
  • 直到找到路径或带宽达到最大值
  • 两条序列相似度较高(> 80%)
  • 已知序列的大致对齐位置
  • seed-and-extend 策略中的扩展阶段
  • 需要快速近似比对的结果
  • 序列相似度很低
  • 存在大型结构变异或重排
  • 需要精确的全局比对结果
  • 序列长度差异很大
维度 完整 DP 带状 DP
时间复杂度 O(mn) O(b·min(m,n))
空间复杂度 O(mn) O(b·min(m,n))
最优性保证 总是最优 只有在带宽足够时才最优
适用场景 通用 高相似度序列

带状动态规划是:

  • BWA-MEM 扩展阶段的核心技术
  • minimap2 chaining 后局部比对的基础
  • BLAST extension 阶段的常用优化
  • 基因组比对中处理高相似度区域的标准方法

现代 read mapper 通常结合带状 DP 和其他优化技术(如 SIMD 指令、硬件加速)来进一步提升性能。

同时从左上角和右下角进行带状 DP,在中间相遇。这可以进一步减少计算量。

使用多个不同带宽的带状 DP:

  • 先用小带宽快速搜索
  • 如果需要,再用大带宽精细比对

根据中间结果动态调整带宽:

  • 如果当前路径得分下降,扩大带宽
  • 如果路径稳定,缩小带宽
  • Pearson, W. R. (1995). Flexible sequence similarity searching with the FASTA3 program package. Methods in enzymology, 266, 227-258.
  • Altschul, S. F., et al. (1990). Basic local alignment search tool. Journal of molecular biology, 215(3), 403-410.