Features
Change
enum as an abstraction fordiff::Result
,lcs_diff::DiffResult
, andwu_diff::DiffResult
;diff_changes()
,diff_diff()
,lcs_changes()
,lcs_diff()
,wu_changes()
, andwu_diff()
functions to calculate or process diffs betweena
andb
slices via LCS (Longest Common Subsequence) or Wu diff algorithms into aVec<Change>
patch()
function to reproduceb
from thea
slice andVec<Change>
insert()
andremove()
functions to enable writing a customchanges
function
Example
use *;
let a = vec!;
let b = vec!;
let diff = diff_diff;
assert_eq!;
assert_eq!;
let lcs = lcs_diff;
assert_eq!;
assert_eq!;
let wu = wu_diff;
assert_eq!;
assert_eq!;
References
- Hunt, James W; Szymanski, Thomas G. (1977). "A fast algorithm for computing longest common subsequences" http://www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/HuSz77.pdf
- Wu, Sun; Manber, Udi; Myers, Gene (1989). "An O(NP) Sequence Comparison Algorithm" https://publications.mpi-cbg.de/Wu_1990_6334.pdf
- Department of Mathematics and Computer Science. University of Southern Denmark (January 12, 2017). "The Hunt-Szymanski Algorithm for LCS" https://imada.sdu.dk/~rolf/Edu/DM823/E16/HuntSzymanski.pdf
- diff crate
- lcs-diff crate
- wu-diff crate
- Wikipedia: Hunt–Szymanski algorithm
- Wikipedia: Bitap algorithm
- Practical use case analysis