Ben Eugene Myers' Diff Algorithm Paper gözden oldum en uzun ortak sonradan bulma. Bu, popüler diff
programında uygulanan algoritmadır. "Eugene Myers'ın Diff Algoritma: 'A' ve 'B'
LCS(A, N, B, M)
If N > 0 and M > 0 Then
Find the middle snake and the length of an optimal path for A and B.
Suppose it is from (x, y) to (u, v).
If D > 1 Then
LCS(A[1..x], x, B[1..y], y)
Output A[x+1..u]
LCS(A[u+1..N], N-u, B[v+1..M], M-v)
Else If M > N Then
Output A[1..N].
Else
Output B[1..M].
varsayalım A = "A" ve B =:
kağıdın 12. sayfada, bu A
ve B
en uzun ortak alt dizisini bulmak için algoritması için sözde kodu göstermektedir B". Bu durumda, N = 1 ve M = 1'dir. Orta yılan, (x, y) = (0, 1) ve (u, v) = (0, 1) olur, çünkü diyagonal yoktur. Bu durumda D = 1 çünkü algoritma sadece bir adım attı.
Algoritma, bu senaryoda yapılacak tek şeyin Output B[1..M]
, "B" ye eşit olduğunu, çünkü N> 0, M> 0, D = 1 ve M = N olduğunu söylüyor. Ancak bu yanlış görünüyor, çünkü "A" ve "B" arasında ortak bir alt sıra yoktur. Gazetenin açıklama, "D < = 1 daha sonra B ya da silerek elde edilen veya en fazla bir sembolüne sokulması durumunda", "A" kaldırılmalıdır çünkü yanlış ve "B" eklendi.
Burada ne yanlış yorumlama ben?