我正在尝试了解Myers关于问题LCS / SES(最短编辑脚本)的算法,但不明白端点是什么,然后我们不明白继续算法。 有人会知道如何解释它吗?
以下是链接,一个位于paper by Myers,另一个位于"summary"(做得很好)。
提前感谢所有
答案 0 :(得分:1)
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
- 对角线
我们假设我们为所有V
,D-paths
计算了D<=D'-1
。要更新所有D-paths
,D<=D'
,我们会使用以下事实:
对角线k上最远的D路径可以不丢失 普遍性被分解为最远到达(D-1)-path 对角线k - 1,然后是水平边缘,接着是最长的 可能的蛇或它可能被分解成最远的到达(D - 1) - 对角线k + 1上的路径,然后是垂直边缘,接着是 最长的蛇。