2010-02-11 84 views
4

有益的維基百科聲稱差異實現了最長的公共子序列。什麼是Linux diff -y的算法?

這不可能是這樣。至少在-y模式下,Diff有三種類型的報告:添加,刪除和替換。 LCS沒有任何'替代'的概念。

diff是什麼算法?我有理由不相信這是Levenshtein距離,但我可能誤解了這一點。

+0

不能插入和刪除彼此相鄰被視爲替代? – 2010-02-11 13:35:39

+0

這可能是答案。 – bmargulies 2010-02-11 13:51:43

+0

相應的源代碼只使用添加和刪除。乍一看看最長的公共子序列... (見http://git.savannah.gnu.org/cgit/diffutils.git/tree/src/analyze.c?id=fecd0079fe6e15b0f53bf953721d838d9099bf05) – mre 2010-02-11 14:48:19

回答

2

This answer(by ioplex)說GNU diff實現了Eugene Myers的「O(ND)diff算法」。