diff算法演示

让我们从头开始,从头开始理解这个算法:

第一步很容易理解,它涉及布置一个网格,使我们能够比较要比较的两个序列的不同子部分。

对角线用于表示匹配的项。

现在可以描述任何将第一个序列转换为第二个序列的编辑序列,只需描述从左上角到右下角穿过该图的路径。这两个点之间的所有路径都对应于有效的编辑序列。有些路径比其他路径更可取。

Myers 论文中描述的算法的一个重要部分涉及由 k = x - y 定义的线。这些很重要,因为给定 k 行的任何编辑序列必须至少具有 |k|插入或删除。

D 代表路径的长度

理解迈尔斯论文的一个非常重要的概念是理解“蛇”的概念。该论文将蛇定义如下:“让一条 D 路径是一条从 (0,0) 开始的路径,它恰好具有 D 条非对角边。0 路径必须仅由对角边组成。通过简单的归纳,它因此,一条 D 路径必须由一条 (D − 1) 路径组成,然后是一条非对角边,然后是一个可能为空的对角边序列,称为蛇。”不幸的是,蛇的这个定义没有明确的措辞。仅鉴于此声明,我会理解“蛇”意味着以下可能的事物之一: