像DiffMerge这样的应用程序如何检测文本文件中的差异,以及它们如何确定行何时是新的,而不仅仅是在与要检查的文件不同的行上?
这是否相当容易实现?是否有图书馆可以做到这一点?
答案 0 :(得分:5)
这是the paper,它是UNIX命令行工具 diff 的基础。
答案 1 :(得分:4)
实际上很简单; DIFF程序 - 大部分时间 - 都基于Longest Common Sequence,可以使用图算法解决。
This web page给出了C#中的示例实现。
答案 2 :(得分:4)
这是一个复杂的问题。执行差异意味着找到两个文件之间的最小编辑距离。也就是说,将一个文件转换为另一个文件必须进行的最小更改次数。这相当于找到两个文件之间行的最长公共子序列,这是各种diff程序的基础。最常见的子序列问题是众所周知的,您应该能够在谷歌上找到动态编程解决方案。
动态编程方法的问题在于它是O(n ^ 2)。因此,对于大型文件来说速度非常慢,而对于大型二进制字符串则无法使用。编写差异程序的难点在于优化问题域的算法,以便获得合理的性能(以及合理的结果)。 Hunt和McIlroy撰写的“差分文件比较算法”一文很好地描述了Unix diff实用程序的早期版本。
答案 3 :(得分:4)
有图书馆。这是一个:http://code.google.com/p/google-diff-match-patch/
StackOverflow使用Beyond Compare作为其差异。我相信它可以通过从命令行调用Beyond Compare来实现。