Patience DiffPatience difference algorithm

先以双方唯一的公共行建立有序锚点,再比较锚点之间的片段。

核心约束
锚点序列必须在两个输入中保持一致的相对顺序。
适用问题
希望保留代码块结构、改善 diff 可读性的文本比较。
边界与取舍
不保证最少编辑,重复行多时会退回其他差异算法。

时间与空间#

N 为当前两段输入总行数,u 为两侧唯一匹配行数;行内容已预处理为可常数比较的分类编号。

时间复杂度
一轮唯一行建表期望 O(N)O(N),LIS 阶段 O(ulog⁡u)O(u\log u);总成本含递归与回退
辅助空间
当前轮哈希表和候选链 O(N)O(N),递归 / 回退另计

以 Git 2.47 为例,原始文本哈希与行分类的字节处理另计;再找双方唯一行,取顺序一致的锚点。没有合适锚点时回退普通 diff;不是一个对所有输入保证 O(Nlog⁡N)O(N\log N) 的整体算法。

工程中的应用#

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

Git 2.47 · xpatience.c文件顶部说明唯一行、最长递增子序列、递归和回退步骤。

4 个概念