序列对齐 DP:一张表跑出四种算法
LCS(最长公共子序列)、编辑距离(Levenshtein)、Needleman–Wunsch(全局序列比对)看着是三道题,底层却是同一个二维 DP。它们都在一张「行为序列
、列为序列
」的表上填格:每个格子
只从对角(替换或匹配)、上(删)、左(插)三个来源里,按
或
取最优。真正区分这几个算法的,只是每个方向记什么代价、以及取
还是
这一组参数。本页把它抽象成一个 spec,用同一个引擎在四者之间切换。
1 · 格子的转移来源
把 排成行、 排成列, 表示 的前 个字符与 的前 个字符之间的最优值。要算它,只需看三个已经算好的邻居,各加上一步操作的代价再聚合:
其中 是 或 ,而 、、 是三个方向各自的代价函数。边界(第一行与第一列)对应「一方为空串」,沿单一方向累积即可。填完整张表后,从终点 沿方向指针回溯,就能还原出完整的对齐与编辑脚本。
2 · spec 与算法的对应
把四个算法按两个维度摆成一张 2×2 矩阵。纵轴是聚合方向: 配相似度(分越高越像)对 配代价(代价越低越像)。横轴是代价取法:朴素的 0 与 1 对带权打分。四个格子恰好落到四个算法。
- LCS( 加朴素):相等才 ,删插不计,求最长公共子序列。
- Needleman–Wunsch( 加打分):匹配、失配、gap 各给一个可正可负的得分,求总分最高的全局比对。
- 编辑距离( 加朴素):增、删、改各记 ,求把 改成 的最少操作数。
- 带权编辑( 加带权):增、删、改各带不同权重,求最小总代价。
这个「换 spec 即换算法」的说法可以验证。给 LCS、编辑距离与 Needleman–Wunsch 各写一份不复用引擎的参考实现,在 14 个词两两组合的 196 组输入上比对,引擎的表末值与三份参考实现逐组一致,无一例外。
3 · 四种 spec 的参数对照
四个算法的差别全部浓缩在下表——同一套 solve(A, B, spec) 填表逻辑,只是喂进去的
、、
与
不同。
| 算法 | 对角 | 上 | 左 | |
|---|---|---|---|---|
| LCS | ||||
| Needleman–Wunsch | ||||
| 编辑距离 | ||||
| 带权编辑 |
LCS 的对角取 是因为它不允许替换:两个字符不相等时绝不能走对角占一个匹配位,只能从上或左绕过(即删或插)。把失配的对角代价设成 ,在 聚合下它永远不会被选中,等于禁掉了替换。编辑距离则相反,替换是合法的一步,失配对角记 。
4 · 相似度与代价的同构
有的算法求 、有的求 ,根源是相似度等于代价取负。把一个 spec 的全部代价取负、并把 翻成 (反之亦然),得到的是同一个问题的另一种说法:最优路径完全不变,只是表里每个数字镜像取负。同样在那 196 组输入上实测,翻转前后的表末值严格互为相反数,回溯出的操作序列一字不差。
警示 · 这解释了为什么生物信息学惯用 Needleman–Wunsch 的得分()语言,而编辑距离用代价()语言。两者并非不同算法,只是同一个 DP 在符号上的两种约定。
5 · LCS 与编辑距离的化归
当编辑距离只允许增、删而不允许替换时,它与 LCS 之间有一个精确等式:
直觉是:两串各长
与
,公共子序列里的那
个字符两边都保留,其余
个要删、
个要插。这个等式同样在 196 组输入上逐组核过,无一例外。以 kitten 与 sitting 为例:,仅增删的编辑距离是
,而允许替换的编辑距离只有
——替换省下的正是那两步「删一个再插一个」。
6 · DTW 与时间轴对齐
前面四个算法比的是字符序列。把序列换成数值(音频帧、笔迹坐标、传感器采样),问题就从「怎么改」变成「两条随时间变化、但快慢不同的信号怎么对齐、有多像」,这就是 DTW(dynamic time warping,动态时间规整)。它和编辑距离是近亲:同样一张二维表、同样三方向、同样取 。但有三处关键不同,不能当成第五个 spec 并进上面的引擎。
格子代价是距离:每格付 ,是实数,不是 0 与 1 或操作权重。
三方向付同一份代价:,三个前驱都加同一个 再取最优;编辑距离则是三方向各付各的。
边界是无穷、产物是 warping 路径: 逼对齐从 起;回溯得到的是「一个点对多个点」的时间轴伸缩关系,不是增删改的编辑脚本。
建议 · 这是字幕对齐(forced alignment)的内核:已知一段音频与对应文本,把音频特征帧序列与文本音素序列用 DTW 或 HMM 对齐,就能算出「第几个字落在哪个时间区间」,生成逐字高亮的字幕。手势识别同理,把用户画的轨迹与模板轨迹对齐,快慢与点数不同也不影响判定。这类功能在前端通常藏在媒体或手势库内部。
7 · 参考文献
- Levenshtein, V. I. (1966). Binary codes capable of correcting deletions, insertions, and reversals. Soviet Physics Doklady, 10(8), 707–710.
- Needleman, S. B., & Wunsch, C. D. (1970). A general method applicable to the search for similarities in the amino acid sequence of two proteins. Journal of Molecular Biology, 48(3), 443–453.
- Sakoe, H., & Chiba, S. (1978). Dynamic programming algorithm optimization for spoken word recognition. IEEE Transactions on Acoustics, Speech, and Signal Processing, 26(1), 43–49.
相关链接
- Longest common subsequence Wikipedia 对应 LCS 模式:子序列与子串的区别、DP 递推、回溯还原一条 LCS,以及与编辑距离的化归关系。
- Levenshtein distance Wikipedia 对应编辑距离模式:增 / 删 / 改各记 1 的经典定义,以及带权(Wagner–Fischer)推广。
- Needleman–Wunsch algorithm Wikipedia 对应 Needleman–Wunsch 模式:生物信息学里的全局序列比对,match / mismatch / gap 打分矩阵与 max 聚合。
- Wagner–Fischer algorithm Wikipedia 对应带权编辑模式:把编辑距离推广到「每种操作各带权重」的标准填表算法。
- 列表 diff / 最小差异更新 本站 · list-diff LCS 的工程应用:用它求两个列表的最长公共子序列,推导出最少的 DOM 增删移动(框架 diff 的核心)。
- Dynamic time warping Wikipedia 对应本页近亲 DTW 节:数值序列的时间轴对齐,三方向 min DP + dist 代价,以及在语音 / 手势识别里的应用。
- Forced alignment Wikipedia DTW / HMM 的落地:把音频与已知文本对齐到时间轴,生成逐字字幕的技术。
- 字符串匹配 本站 · string-search 编辑距离作为「近似匹配 / 模糊搜索」基础的一节,与本页的统一视角互补。