Я думаю, что в статье пропущено доказательство, которое очень просто, но я думаю, что пропущенное приведет к некоторой путанице (для меня), поэтому я привожу это доказательство здесь:
на странице 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]
:
lemma4: если v[k - 1] < v[k + 1]
, то путь, за которым следует v[k + 1]
с вертикальным ребром со змеей, будет дальнейшим перестроенным путем по диагонали k.
доказательство: давайте сделаем v[k - 1]
до x1
и v[k + 1]
до 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,, которую вы можете обсудить.