日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

diff git 代码实现_Git diff 算法

發布時間:2024/4/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。