diff git 代码实现_Git diff 算法
在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 算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: count相加 sqlserver_ms
- 下一篇: mysql 锁命令_MySQL锁定状态查