diff winmerge 文件对比算法实践

//todo: 以备以后有空慢慢看,需要弄个Excel的Diff工具

 diff winmerge 文件对比算法实践  转自:http://blog.csdn.net/weixu_2008/article/details/2672004

参考文章:

http://www.2maomao.com/blog/how-windiff-works-continued-1/

http://www.computerhope.com/fchlp.htm

http://www.ascotti.org/programming/lcs/lcs.htm

http://ftp.gnu.org/pub/gnu/diffutils/

http://svn.collab.net/repos/svn/trunk/subversion/libsvn_diff/lcs.c

http://webtools.live2support.com/windows/fc.php

http://c2.com/cgi/wiki?DiffAlgorithm

http://en.wikipedia.org/wiki/Diff#See_also

http://www.codeproject.com/KB/recipes/vdiff.aspx

http://www.codeproject.com/KB/recipes/diffengine.aspx

http://code.google.com/p/google-diff-match-patch/wiki/API

http://www.angusj.com/delphi/

http://www.mathertel.de/Diff/ViewSrc.aspx

其中字体为绿色的效率比较高。

下面是自己写的bcb代码。

根据http://www.codeproject.com/KB/recipes/vdiff.aspx写的:

http://download.csdn.net/source/541639

根据http://www.mathertel.de/Diff/ViewSrc.aspx写的:

http://download.csdn.net/source/541646

但是以上两种算法在测试10万行代码比较的时候,需要10分钟左右的时间才行,和windows自带的fc命令,winmerge相比,效率太低。

下面介绍一下fc得用法:

time

fc /L   /T /N /A 11111.txt 22222.txt > newresult.txt
time

pause

具体可以参见:http://webtools.live2support.com/windows/fc.php或者微软的帮助,

但是这个命令也有问题,比如对比以下两个文件的时候,就有误差。

file1.txt
─────────────────────
void func(){

if(1){
}
if(1){
}


}

void func2(){

if(1){
}
if(1){
}


}


file2.txt
─────────────────────
void func()
{

if(1)
{
}
if(1)
{
}


}

void func2()
{

if(1)
{
}
if(1)
{
}


}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinMerge是一种功能强大的文件比较和合并工具,广泛用于软件开发、文档管理以及各种需要对比文本文件差异的场景。它的核心算法主要包括以下几点: ### 文件内容比较算法 WinMerge 使用了一种称为“增量式”(Incremental)的算法来进行文件内容的比较。这种算法通过将文件内容分为较小的部分(通常是固定大小的块),然后对每个部分进行哈希值计算。这种方法使得比较过程高效快速,同时还能有效地处理大量数据。 当两个文件进行比较时,WinMerge 首先会生成这两个文件的所有块的哈希表。接着,它会找出两个哈希表中相匹配的块,并进一步比较它们的内容,确定是否有变化。如果有变化,WinMerge 将指出具体的行号和差异内容。这种逐块比对的方式允许WinMerge准确地定位到文件中的细微修改位置。 ### 合并算法 除了文件比较之外,WinMerge 还支持文件的合并。在合并模式下,WinMerge 需要解决的是如何将两个版本的文件内容合并成一个新的文件版本。WinMerge 使用了一种称为“最小编辑距离算法”(Levenshtein distance algorithm)来进行最佳的合并路径选择。这个算法旨在找到最少更改操作(插入、删除、替换字符)就能从一个字符串转换到另一个字符串的序列。 合并过程中,WinMerge 显示出未合并文件不同部分,并允许用户手动或自动选择合并策略。例如,可以选择保留旧版本文件中的所有变更项,也可以根据新版本中的内容更新旧版本等。这使得WinMerge在合并文件时具有高度灵活性,可以适应各种合并需求。 ### 性能优化 WinMerge 的设计注重性能。为了提高效率,它在比较过程中充分利用了现代计算机的多核架构,能够并发地处理多个任务。此外,其内部的数据结构优化使得内存使用高效,避免了大量的临时存储开销。这种设计让WinMerge在处理大文件和大量的文件比较任务时仍保持良好的响应速度。 总的来说,WinMerge算法结合了高效的文件比较技术和灵活的文件合并机制,使其成为一款强大而实用的文件管理工具,在软件开发和日常办公中有广泛应用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值