Git diff 算法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM