我要执行word文件不同,它需要执行什么算法?文档差异算法如何工作?
回答
LCS最优化的解决方案是O(ND) Myer 's algorithm,这里是一个算法的做法,我曾经实施过不同的Office 2007文档。 Link to algorithm paper
纸链接不起作用。 – 2013-08-05 03:53:44
This正在为我工作:http://www.xmailserver.org/diff2.pdf – Zamicol 2017-02-21 18:01:54
差异基本上只是a solution到longest common sub-sequence problem。
最佳解决方案需要知识dynamic programming,所以这是一个相当复杂的问题来解决。
但是,它也可以通过构建后缀树来完成。这两种算法都被概述为here。
通常当你假设你的文档是字符或字节流时。这里的问题是关于单词文件。在实现这样一个算法之前,你需要问自己一个问题是蓝色8pt Verdana中的“Hello World”,与红色10pt Arial等中的“Hello World”相同。 – quosoo 2009-10-02 15:28:36
是的,很显然,基本算法需要额外的逻辑来解析差异,但算法的核心仍然是相同的。 – 2009-10-02 15:30:33
正如Ben S指出的那样,差分问题一般可以通过求解最长的公共子序列问题来解决。更具体地说,Hunt-McIlroy algorithm是应用于该问题的经典算法之一(例如,在Unix'diff实用程序的实现中)。
那么,一般来说,diff
'ing通常是由Longest common subsequence problem解决。还看到Diff维基百科文章的“Algorithm"部分:
差异的操作是基于 解决最长公共子 问题
在这个问题上,你有一个项目两个 序列:
a b c d f g h j q z a b c d e f g i j k r x y z
,你要查找的最长 序列物品存在于 机器人h原始序列以相同的 的顺序排列。也就是说,你想要找到一个新的 序列,它可以从 的第一个序列中删除一些 项目,并从第二个序列中删除其他项目的 。你也想 这个序列只要 是可能的。在这种情况下,它是
a b c d f g j z
从最长公共子 这只是一小步,得到 DIFF样输出:
e h i q k r x y + - + - + + + +
那说,这一切都正常工作与基于文本的文档。由于Word文档实际上是一种二进制格式,并且包含大量格式化信息和数据,因此这将变得更为复杂。理想情况下,你可以看看自动运行Word本身,因为它有能力的文档之间“差异”,详见这里:
Microsoft Word Tip: How to compare two documents for differences
实现差异算法有两个目的:只存储版本之间的差异,或显示版本之间的差异。这些是非常不同的(没有双关语意图)。 LCS通常仅用于显示差异,但为了实现最佳存储,需要更高级的算法。例如,如果您从文档的一个部分剪下大部分,并将其粘贴到另一部分中,则优秀的存储算法会检测到该部分,而不会将其存储为“嘿,这里出现了大量新数据”。 – 2009-10-02 15:32:52
@Lasse - 同意。由于最初的提问者在谈论Word文档,因此我认为他们会更偏好差异化的“视觉”方面,而不是存储方面。然而,对于存储方面你是正确的,你会看到Delta Encoding/Compression(http://en.wikipedia.org/wiki/Delta_encoding)等。 – CraigTP 2009-10-02 16:37:41
- 1. 文本差异算法
- 2. 如何计算文件内容差异?
- 3. 如何计算xy差异?
- 4. 如何计算差异
- 5. 文本比较/差异算法
- 6. nodejs是否有一个工作差异库或算法?
- 7. '最佳'差异算法
- 8. 算法需要两次计算差异
- 9. 平方和差分算法是如何工作的?
- 10. Karmarkar-karp差分算法是如何工作的?
- 11. Trivago算法,如何工作?
- 12. MD5Sum算法如何工作?
- 13. CIMedianFilter如何工作? (算法)
- 14. 计算差异
- 15. 计算差异
- 16. 计算差异
- 17. 计算差异
- 18. 计算差异
- 19. 计算差异
- 20. 计算同一文档上的两个值之间的差异
- 21. DateTime ::差异年不工作
- 22. 寻找差异不工作
- 23. 比较工作表差异
- 24. PHP工作分钟差异
- 25. 文本差异应用程序如何工作?
- 26. Django自定义后端文档差异
- 27. 差异对谷歌的文档搜索
- 28. 如何计算两次差异?
- 29. 如何计算Perl中的DateTime差异?
- 30. Java如何计算时间差异
你会用它来*显示差异,或者*以最佳方式存储差异? – 2009-10-02 15:29:25