cj1128.github.io icon indicating copy to clipboard operation
cj1128.github.io copied to clipboard

Git 是怎样生成 diff 的:Myers 算法

Open cj1128 opened this issue 6 years ago • 7 comments

https://cjting.me/2017/05/13/how-git-generate-diff/

Git 是怎样生成 diff 的:Myers 算法

cj1128 avatar Jul 02 '19 08:07 cj1128

十分感谢,这文章对我非常有帮助。

rc452860 avatar Dec 30 '19 05:12 rc452860

非常感谢,讲得很接地气

breezeling avatar Feb 29 '20 05:02 breezeling

想了一个dp算法,非常简单,而且最差时间复杂度是和BFS相同的都是O(mn),可以稍稍优化下空间到线性

dp[i][j] = dp[i-1][j-1] if exist diagonal else min(dp[i-1][j],dp[i][j-1])

盲猜一波Myers的变体是把行哈希了

gattonero1052 avatar Nov 22 '21 07:11 gattonero1052

👍

yanhaijing avatar Mar 17 '22 08:03 yanhaijing

很有用,正在找相关资料,写的很清晰

xxwwp avatar Aug 30 '22 02:08 xxwwp

@gattonero1052 想了一个dp算法,非常简单,而且最差时间复杂度是和BFS相同的都是O(mn),可以稍稍优化下空间到线性

dp[i][j] = dp[i-1][j-1] if exist diagonal else min(dp[i-1][j],dp[i][j-1])

盲猜一波Myers的变体是把行哈希了

@gattonero1052 想了一个dp算法,非常简单,而且最差时间复杂度是和BFS相同的都是O(mn),可以稍稍优化下空间到线性

dp[i][j] = dp[i-1][j-1] if exist diagonal else min(dp[i-1][j],dp[i][j-1])

盲猜一波Myers的变体是把行哈希了

Myers论文里是用通过从左上角和右下角同时向中间遍历来寻找split point,从而实现分治的方法,因此把空间复杂度降到了线性,因为不用存储前序路径了

caibiPro avatar Feb 14 '23 05:02 caibiPro

“使用上面存储的 v 字典(每个 d 对应一个这样的字典),从终点反向得出路径”,请问是怎么回溯的,没想明白

mml237 avatar Nov 21 '23 06:11 mml237