如何实现快速的diff工具(windiff, winmerge)?
初步搞定之: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
转载于:https://www.cnblogs.com/realfun/archive/2006/08/10/473028.html
如何实现快速的diff工具(windiff, winmerge)?相关推荐
- git diff 比较文件_使用Python创建你自己的diff工具
为什么我需要自己的diff工具? 我经常使用git跟踪我的编码项目.文章.业务工作等等.git的一个美妙之处在于,你可以通过简单地使用其内置的diff功能来轻松地比较你的工作的不同状态.要使用这个功能 ...
- quicklook不能预览office_万物皆可格!给空格键施加神奇魔法的神器软件—快速预览工具QuicklookPC软件...
大家好,我是元力.今天给大家带来一款电脑端使用的超级神奇的软件.只需要选中文件,然后点击空格键,即可预览文件. 支持大部分格式,比如word.excel.pdf.图片.视频甚至图片的源文件等等.真正实 ...
- 计算机MCI风险快速筛查系统,轻度认知障碍风险快速筛查工具的测算过程及判别效果分析...
摘要: 目的:结合神经心理学量表和认知范式,研发轻度认知障碍(MCI)风险快速筛查工具.方法:应用北京老年脑健康促进计划(BABRI)队列研究两个基线数据集:数据集1受试者5 593例,MCI组患者1 ...
- 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!
哈哈哈哈,最近发现一个好用的在线编译.下载.烧录的跨平台快速原型开发工具平台,名字好记–8ms,单看名字是真的不知道干嘛的,不知道为啥叫这个?不多想了,好用就得分享给大家,独乐乐不如众乐乐呀-- 好用 ...
- python diff函数_使用Python创建你自己的diff工具
为什么我需要自己的diff工具? 我经常使用git跟踪我的编码项目.文章.业务工作等等.git的一个美妙之处在于,你可以通过简单地使用其内置的diff功能来轻松地比较你的工作的不同状态.要使用这个功能 ...
- GBK、UTF-8 快速转码工具 —— Notepad++
代码转码神器:Notepad++ 软件截图如下: 操作截图如下: 以上就是关于" GBK.UTF-8 快速转码工具 -- Notepad++ " 的全部内容.
- Unix系统的diff工具程序
diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异,是代码版本管理的基石之一.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件> ...
- python︱写markdown一样写网页,代码快速生成web工具:streamlit 数据探索案例(六)
系列参考: python︱写markdown一样写网页,代码快速生成web工具:streamlit介绍(一) python︱写markdown一样写网页,代码快速生成web工具:streamlit 重 ...
- python︱写markdown一样写网页,代码快速生成web工具:streamlit 缓存(五)
系列参考: python︱写markdown一样写网页,代码快速生成web工具:streamlit介绍(一) python︱写markdown一样写网页,代码快速生成web工具:streamlit 重 ...
最新文章
- 【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!
- Source引擎的远程代码执行漏洞,可能影响千万游戏玩家
- 别在用U盘拷贝源码带回家了,有童鞋被判刑啦!
- oauth2中用户的信息如何动态获取和存储_oAuth2.0 简介
- ABAP常用Function
- 【C++】C/C++系列教程汇总(更新中......)
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨学生们参加各科测试的次数【难度简单】​
- TensorFlow笔记(8) LeNet-5卷积神经网络
- How to remove ROM in MAME
- 学习使用TestNG进行数据驱动测试
- Hexo next博客添加折叠块功能添加折叠代码块
- 免费下载思科 642-382考试题库
- 使用kali破解win7密码
- linux幻灯片制作软件,Marp(代码制作幻灯片软件)
- 阿里云ECS训练营Class6
- 仿拼多多砍价功能玩法解说
- 动手学习深度学习——2.7 文档(Pytorch)
- 我花了五个小时的时间,将全部文章详细整理出来了,千万不要错过!
- ospf状态机-通俗易懂的小故事
- 矩阵的定义——MATLAB