Myers DiffMyers difference algorithm

在编辑图上逐层扩展可达路径,寻找较短的编辑脚本。

核心约束
每个编辑层保留各对角线上最远的匹配进展。
适用问题
版本差异与序列比较。
边界与取舍
实际实现可能采用提前退出等启发式,不能默认得到最小脚本。

时间与空间#

N 为两段序列长度之和,D 为最短插入 / 删除编辑脚本长度;单个序列元素的相等判断按 O(1)O(1) 计。

时间复杂度
O(N(D+1))O(N(D+1))
辅助空间
保存回溯轨迹的基本版 O(N(D+1))O(N(D+1));线性空间变体 O(N)O(N)

常写作 O(ND)O(ND) 的主项,D=0 时仍需 O(N)O(N) 扫描。比较单位可为行、字符或 token;按行 / token 比较需已建立可常数判等的编号,否则另计内容比较与预处理。D 只计插入和删除。工程 diff 还可能为时延或可读性采用启发式截断。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

Myers 1986 · An O(ND) difference algorithm作者所在机构收录的原论文,包含线性空间变体。

Git 2.47 · xdiff core最短编辑路径及工程启发式的实现。

4 个概念