我认为论文遗漏了一个证明,这很简单,但我认为遗漏会导致一些混乱(对我来说),所以我在这里给出这个证明:
在第 6 页第 4 行中,代码如下:
f k = −D or k ≠ D and V[k − 1] < V[k + 1] Then
x ← V[k + 1]
Else
x ← V[k − 1]+1
我不认为 lemma2 会导致这种情况,lemma2 的目的是证明这个问题可以用贪心策略来解决。并且根据Given the endpoints of the furthest reaching (D − 1)-paths in diagonal k+1 and k−1, say (x’,y’) and (x",y")
respectively, Lemma 2 gives a procedure for computing the endpoint of the furthest reaching D-path in diagonal k.
Namely, take the further reaching of (x’,y’+1) and (x"+1,y") in diagonal k and then follow diagonal edges until it is
no longer possible to do so or until the boundary of the edit graph is reached.
正常的方法是获取从v[k - 1]
和延伸的两个点,v[k + 1]
并找出哪个是更远的到达路径。但这会导致双标。这是为什么只有检查有效的证明V[k − 1] < V[k + 1]
:
引理4:如果v[k - 1] < v[k + 1]
,则v[k + 1]
带有一条蛇的垂直边缘的路径将是对角线k 中进一步向后弯曲的路径。
证明:让我们做v[k - 1]
tox1
和v[k + 1]
to x2
。所以x1
对角线k后面的点是(x1 + 1, x1 + 1 - k)
(往右走),后面的点x2
是(x2, x2 - k)
(往下走);y 位置在这里没用。那么问题变为:if x1 < x2, then x1 + 1 <= x2
既然x1 < x2 -> x2 - x1 > 0
假设x1 + 1 > x2
,那么x2 - x1 < 1
,那么0 < x2 - x1 < 1
。但是在编辑图中,基本的移动是1,0 < x2 - x1 < 1
永远不会发生,所以假设是错误的,所以x1 + 1 <= x2
.
我已经在https://github.com/psionic12/Myers-Diff-in-c-/blob/master/README.md上发布了这个和一个实现,欢迎大家讨论。