Skip to content

Instantly share code, notes, and snippets.

@jdh30
Created November 21, 2022 01:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jdh30/b0e6986821bb8427d8927b16cabbd106 to your computer and use it in GitHub Desktop.
Save jdh30/b0e6986821bb8427d8927b16cabbd106 to your computer and use it in GitHub Desktop.
Levenshtein edit distance
let distance s1 s2 =
let indexable s =
let a = Array.ofString s in
Array.length a, Array.get a in
let (m, u), (n, v) = indexable s1, indexable s2 in
let d1 = Array.init n id in
let d0 = Array.init n [_ → 0] in
let () = for 1 1 (m-1) () [(), i →
let () = Array.Unsafe.set d0 0 i in
let ui = u i in
let () = for 1 1 (n-1) () [(), j →
let a = Array.get d1 j in
let b = Array.get d0 (j-1) in
let c = Array.get d1 (j-1) + if ui = v j then -1 else 0 in
1 + min (min a b) c
@ Array.Unsafe.set d0 j ] in
Array.blit d0 0 d1 0 n ] in
Array.get d0 (n-1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment