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

初步搞定之: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)?相关推荐

  1. git diff 比较文件_使用Python创建你自己的diff工具

    为什么我需要自己的diff工具? 我经常使用git跟踪我的编码项目.文章.业务工作等等.git的一个美妙之处在于,你可以通过简单地使用其内置的diff功能来轻松地比较你的工作的不同状态.要使用这个功能 ...

  2. quicklook不能预览office_万物皆可格!给空格键施加神奇魔法的神器软件—快速预览工具QuicklookPC软件...

    大家好,我是元力.今天给大家带来一款电脑端使用的超级神奇的软件.只需要选中文件,然后点击空格键,即可预览文件. 支持大部分格式,比如word.excel.pdf.图片.视频甚至图片的源文件等等.真正实 ...

  3. 计算机MCI风险快速筛查系统,轻度认知障碍风险快速筛查工具的测算过程及判别效果分析...

    摘要: 目的:结合神经心理学量表和认知范式,研发轻度认知障碍(MCI)风险快速筛查工具.方法:应用北京老年脑健康促进计划(BABRI)队列研究两个基线数据集:数据集1受试者5 593例,MCI组患者1 ...

  4. 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!

    哈哈哈哈,最近发现一个好用的在线编译.下载.烧录的跨平台快速原型开发工具平台,名字好记–8ms,单看名字是真的不知道干嘛的,不知道为啥叫这个?不多想了,好用就得分享给大家,独乐乐不如众乐乐呀-- 好用 ...

  5. python diff函数_使用Python创建你自己的diff工具

    为什么我需要自己的diff工具? 我经常使用git跟踪我的编码项目.文章.业务工作等等.git的一个美妙之处在于,你可以通过简单地使用其内置的diff功能来轻松地比较你的工作的不同状态.要使用这个功能 ...

  6. GBK、UTF-8 快速转码工具 —— Notepad++

    代码转码神器:Notepad++ 软件截图如下: 操作截图如下: 以上就是关于" GBK.UTF-8 快速转码工具 -- Notepad++ " 的全部内容.

  7. Unix系统的diff工具程序

    diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异,是代码版本管理的基石之一.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件> ...

  8. python︱写markdown一样写网页,代码快速生成web工具:streamlit 数据探索案例(六)

    系列参考: python︱写markdown一样写网页,代码快速生成web工具:streamlit介绍(一) python︱写markdown一样写网页,代码快速生成web工具:streamlit 重 ...

  9. python︱写markdown一样写网页,代码快速生成web工具:streamlit 缓存(五)

    系列参考: python︱写markdown一样写网页,代码快速生成web工具:streamlit介绍(一) python︱写markdown一样写网页,代码快速生成web工具:streamlit 重 ...

最新文章

  1. 【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!
  2. Source引擎的远程代码执行漏洞,可能影响千万游戏玩家
  3. 别在用U盘拷贝源码带回家了,有童鞋被判刑啦!
  4. oauth2中用户的信息如何动态获取和存储_oAuth2.0 简介
  5. ABAP常用Function
  6. 【C++】C/C++系列教程汇总(更新中......)
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨学生们参加各科测试的次数【难度简单】​
  8. TensorFlow笔记(8) LeNet-5卷积神经网络
  9. How to remove ROM in MAME
  10. 学习使用TestNG进行数据驱动测试
  11. Hexo next博客添加折叠块功能添加折叠代码块
  12. 免费下载思科 642-382考试题库
  13. 使用kali破解win7密码
  14. linux幻灯片制作软件,Marp(代码制作幻灯片软件)
  15. 阿里云ECS训练营Class6
  16. 仿拼多多砍价功能玩法解说
  17. 动手学习深度学习——2.7 文档(Pytorch)
  18. 我花了五个小时的时间,将全部文章详细整理出来了,千万不要错过!
  19. ospf状态机-通俗易懂的小故事
  20. 矩阵的定义——MATLAB

热门文章

  1. 机器学习中的异常检测手段
  2. Spring Cloud 学习笔记(四)-Spring Cloud Hystrix
  3. Java8中的HashMap分析
  4. GridView学习记录(一)
  5. 二叉树原理和作用,总结
  6. chapter4 module and port
  7. C# 用tabcontrol实现窗体类似网页排版的显示
  8. thinkPHP学习笔记(2)
  9. Mysql函数:Last_insert_id()语法讲解
  10. 游戏中反向运动学(ik)的研究与简介