在Git中,有四种diff算法,即Myers,Minimal,Patience和Histogram。默认Myers。Minimal是Myers的改进,Histogram是Patience的改进。Myers总是通过完全相同的行来实现匹配,它的问题在于可能会有大量的空行和括号影响结果。Histogram通过“少量的独特的行”做锚定,来更合适的标记代码段的移动。

Myers算法我觉得这个文章讲的非常好:

https://www.dazhuanlan.com/2019/12/05/5de8b95bf1dba/?__cf_chl_captcha_tk__=543b5104e7fd004468911afb048ec39aa0825007-1602557816-0-AW3rYqpZ0emcbioiQkuXhPmDNLL664JohKrR6_NXEyU2IKEgbxnO4LLWbSksogDlpyYU6MvtrWuKzKAZZkjUVpK49_0Ngeb6k6e_yyoyX5Ga8edOjvvbMO2-5geYPYu3rYCSktaDOZMeqRzih89lENvLSF14lV1PEizy0XLRBkIjL7w2_II0wnmIOZe0mfNV4nDMn4PP1IGUkP5WfNK9JmFcaPKZA8RGQYoubsUN52tBShJGgMbkcc1u1SF8nJXpsulDbjHzbr1SECdmMOBV6qImrI5JVlQlUfRz4xpNkUEwUAHGmSuClZeHmRrBSRxtJrOE0SNoWgxM5sj8uQPOdA52UukFoFVQ_g2kTRLMoFBM1HDgkbWhcR00jFf4j1A2uQ

大体思路就是一个贪心的BFS,向右或者向下算新的一层,走对角线不算新的一层。但是这种方法,在最坏的情况下,时空复杂度好像还是n^2

下面的链接讲了Patience和Histogram的区别

https://stackoverflow.com/questions/32365271/whats-the-difference-between-git-diff-patience-and-git-diff-histogram

下面的链接讲了Histogram的实现:

https://link.springer.com/article/10.1007/s10664-019-09772-z

大概意思就是先找到出现次数最少但是在修改前后都出现的行,对这些行做LCS(这时候是一个子任务集,规模比较小)。然后递归的对被这些行分割的区域做一样的操作。

另外,按行做diff算法,现在看起来,就是求一个LCS,在用Myers的时候,不明白大家为什么不直接用nlogn的LCS来做。。。

https://blog.csdn.net/accelerator_/article/details/11339459

diff git 代码实现_Git diff 算法相关推荐

  1. diff git 指定时间_Git diff 代码比较的高级技巧

    Git diff 代码比较的高级技巧 Git是使用branch来管理不同的功能点开发的,那么我们怎样能比较不同branch的不同呢? 使用 git diff  branch1 branch2 , 就可 ...

  2. diff git 代码实现_Git 自救指南:这些坑你都跳得出吗?

    每天都会写架构师文章,Java技术文章天天更新,感兴趣的点个关注再走呗! Git 虽然因其分布式管理方式,不完全依赖网络,良好的分支策略,容易部署等优点,已经成为最受欢迎的源代码管理方式. 但是一分耕 ...

  3. diff git 指定时间_Git 自救指南

    Git 虽然因其分布式管理方式,不完全依赖网络,良好的分支策略,容易部署等优点,已经成为最受欢迎的源代码管理方式.但是一分耕耘一分收获,如果想更好地掌握 git,需要付出大量的学习成本.即使在各种 G ...

  4. diff git 指定时间_【GIT】从指定分支两个Tag中获取差异文件,进行代码的增量更新...

    介绍 随着DevOps兴起,在做CD代码上线交付时候,代码全量更新是很费时间的.下面代码就可以帮助我们从指定分支两个Tag中获取差异文件,进行代码的增量更新. 环境 Jenkins Git代码管理 获 ...

  5. php怎么像git那样做diff,Git 基本操作

    Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作介绍. 获取与创建项目命令 git init 用 git init 在目录中创建新的 Git ...

  6. Git 常用操作(5)- git clone/git checkout -b/git diff/git push/git pull

    1. git clone--获取远程仓库 当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容.它只会获取数据然后 让你自己合并. 然而,有一个命令叫作 git p ...

  7. git diff Git查看版本改动

    git diff git diff命令用于显示提交和工作树等之间的更改.此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容. 描述 在工作树和索引或树之间 ...

  8. git apply、git am打补丁.diff 和 .patch

    前提: 生成patch: git format-patch -M master 生成指定patch,0163bed3bf59ae74c36cc5138b4c24f1556d8304是commit id ...

  9. Git 2.19 对Diff、Branch和Grep等做了改进

    \Git的最新版带来了丰富的新功能以及内部更新,包括改进的diff.branch和grep,更好的命令行补全,新的range-diff命令等.\\Git diff现在可以正确地标记以intent-to ...

最新文章

  1. 3.2 进阶-好多鱼
  2. 使用Idea创建SpringCloud父子工程
  3. Java入门算法(树篇)
  4. Android 中文 API (16) —— AnalogClock
  5. 多核CPU上python多线程并行的一个假象(转)
  6. 【MyBatis框架】查询缓存-二级缓存原理
  7. rabbit mq 入门
  8. ansible批量安装服务器思路
  9. 剑指Offer面试题:16.合并两个排序的链表
  10. 不能All in的人别去创业公司
  11. (CFD)投影法求解二维不可压缩N-S方程
  12. matlab评价模型和预测模型
  13. html js 合并单元格合并单元格,htmljs合并单元格 excel怎样合并单元格
  14. 面试题 - 头条、京东
  15. 东北大学秦皇岛分校计算机类排名,东北大学秦皇岛分校全国排名,2021东北大学秦皇岛分校排名榜...
  16. Spring-初识Spring框架-IOC控制反转(DI依赖注入)
  17. 【基础】dB、dBm、dBc等概念的解释
  18. 聚观早报 | 茅台市值超过腾讯位列第一;三星正研发智能戒指
  19. MATLAB虚拟现实
  20. Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版

热门文章

  1. 运维与自动化运维发展概括
  2. oracle中文乱码问题
  3. 0811-按钮操作(加法计算器)(拖控件找控件代码属性名称)(frame center bounds)(上下左右移动button图片)...
  4. OWASP出品:Xenotix XSS漏洞测试框架及简单使用
  5. 操作系统实验报告13:线程池简单实现
  6. blackarch 安装美化等
  7. Java Web开发小结
  8. 【数据结构与算法】之深入解析“扁平化多级双向链表”的求解思路与算法示例
  9. Django MPTT —— 概述
  10. 378. Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素