Skip to content

Instantly share code, notes, and snippets.

@gilesc
Created July 2, 2010 14:29
Show Gist options
  • Select an option

  • Save gilesc/461431 to your computer and use it in GitHub Desktop.

Select an option

Save gilesc/461431 to your computer and use it in GitHub Desktop.
(defn levenshtein [vec1 vec2]
(cond (empty? vec1) (count vec2)
(empty? vec2) (count vec1)
:else
(let [distance (make-array Integer (count vec1) (count vec2))]
(doseq [i (range (count vec1))]
(aset distance i 0 i))
(doseq [j (range (count vec2))]
(aset distance 0 j j))
(doseq [i (range 1 (count vec1))]
(doseq [j (range 1 (count vec2))]
(aset distance i j
(min (inc (aget distance (dec i) j))
(inc (aget distance i (dec j)))
(+ (aget distance (dec i) (dec j))
(if (= (vec1 (dec i))
(vec2 (dec j)))
0 1))))))
(aget distance (dec (count vec1)) (dec (count vec2))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment