迈尔斯算法的终点

时间:2015-10-10 13:31:24

标签: algorithm diff

我正在尝试了解Myers关于问题LCS / SES(最短编辑脚本)的算法,但不明白端点是什么,然后我们不明白继续算法。 有人会知道如何解释它吗?

以下是链接,一个位于paper by Myers,另一个位于"summary"(做得很好)。

提前感谢所有

1 个答案:

答案 0 :(得分:1)

enter image description here

LCS / SES算法

Constant MAX ∈ [0,M+N]
Var V: Array [− MAX .. MAX] of Integer

V[1] ← 0
For D ← 0 to MAX Do
    For k ← −D to D in steps of 2 Do
        If k = −D or k ≠ D and V[k − 1] < V[k + 1] Then
            x ← V[k + 1]
        Else
            x ← V[k − 1]+1
        y ← x − k
        While x < N and y < M and a x + 1 = b y + 1 Do (x,y) ← (x+1,y+1)
        V[k] ← x
        If x ≥ N and y ≥ M Then
            Length of an SES is D
            Stop
Length of an SES is greater than MAX

<强>解释

D-path 这是一条从(0, 0)开始并使用完全D非对角线边缘的路径,即垂直或水平边。

k-diagonal - 这是由(x, y)所有点组成的对角线,x-y=k

- 仅包含对角线的路径

我们在V中存储了什么? V[k]在k对角线上存储最远到达路径的端点的行索引。路径应从(0, 0)开始。

为什么我们这样做?请记住,我们希望找到从(0, 0)(N, M )的路径,该路径使用最少量的水平垂直边缘。因此,从某种意义上说,我们正在寻找最低D,以便D-path(N, M)

结尾

终点是指什么?它指的是D-path的最后一点。特别是,我们对每个k - 对角线

中最远的终点感兴趣

我们假设我们为所有VD-paths计算了D<=D'-1。要更新所有D-pathsD<=D',我们会使用以下事实:

  

对角线k上最远的D路径可以不丢失   普遍性被分解为最远到达(D-1)-path   对角线k - 1,然后是水平边缘,接着是最长的   可能的蛇或它可能被分解成最远的到达(D -   1) - 对角线k + 1上的路径,然后是垂直边缘,接着是   最长的蛇。