惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 尉迟方

华容道研究 - 华容道资料大全 - 华容道完全求解 最近做的在线游戏:华容道(53关),界面古朴典雅,过关过程可回放 zz代码发芽网更新 - 界面清晰、支持论坛(Discuz!)、一键复制HTML/BBcode 代码发芽网更新了22个颜色主题zz 代码发芽网(Beta版)发布,欢迎测试、试用zz 如何编写PocketPC上的输入法 如何向目标窗口发送一个Unicode 字符? firefox使用技巧 - 公司内部站点 决定搬家到 http://www.2maomao.com/blog/ ,这里以后只更新一些技术问题 如何搞定Bluehost.com上面wordpress中文版 整理了一下IE的右键菜单 - 直接禁止add on,爽 猛烈推荐开源编辑器notepad2,替换notepad 搞笑创意 zz 消遣一下:这舞跳的真tmd绝了 Bill Gate & Microsoft Windows's *BLUE* time. 中国工商银行网上银行,客户权利那么少,义务那么多,敢开吗? C# String 的问题:immutable why? how? 传值?传引用?string/String? 争论webos是否是os有什么意义? 以前看古龙时的选摘
如何实现快速的diff工具(windiff, winmerge)?
尉迟方 · 2006-08-10 · via 博客园 - 尉迟方

问题可以简化,每一行的字符串可以看成一个值,问题简化为求解两个整型数组的连续序列问题。

初步搞定之:Windiff 原理初探, 采用动态规划算法找最优解,不考虑交叉情况。

Update1:
经实验证明,在文件非常长的时候此算法非常之慢

比如10k个文件,这样就会有个10k x 10k的int数组,内存一次性耗掉有400M之多,计算量庞大无比到了难以承受的地步。

我监测了一下windiff,人家在100k大小的两个文件比较只用了一秒多,内存最多时不超过50M。

一定有更好的解法。

今天路上和朋友讨论一下,有以下几种思路:
1、贪心算法
2、贪心算法 + 部分动态规划
3、被比较对象每行的重复率很低,这个信息可能会有用。

Update2:
使用思路1的分析以及程序基本完成,效果显著,详细分析与程序流程图参见文章:Windiff 原理初探(续1)

程序运行结果对比:
我用C++在WindowsXP下实现这个程序,AMD2500+/512内存,Release版,删除printf输出(这里只算分析时间)以后,对两个12万行的文本做diff跑了10秒不到。
我试了一下WinMerge,不算其界面操作时间(即只算到分析结束,他后来死翘翘了),应该在5秒之内
不过,好像Windiff更快,一秒都不到,结果我打开一看,丫好像全错了:(,各位可以试试看,将1, 2, 3, 4, 5, 6, 7, 8每个数字一行然后重复这些行直到10万行,另一个文件用1, 2, 2, 4, 6, 6, 5每个数字一行然后重复到10万行,反正我机器VS2005的Windiff分析结果飞快,结果是这两个文件没有一行相同 :o ,汗一个

有没有更好的方法?上文里面提到的想法里面,想法2会优化结果,速度可能反而会慢一些,想法3应该是值得考虑的因素。

程序代码(估计有许多小bug):http://www.2maomao.com/blog/wp-content/uploads/mydiff.cpp.html