Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
13
Task/Levenshtein-distance/Clojure/levenshtein-distance-1.clj
Normal file
13
Task/Levenshtein-distance/Clojure/levenshtein-distance-1.clj
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
(defn levenshtein [str1 str2]
|
||||
(let [len1 (count str1)
|
||||
len2 (count str2)]
|
||||
(cond (zero? len1) len2
|
||||
(zero? len2) len1
|
||||
:else
|
||||
(let [cost (if (= (first str1) (first str2)) 0 1)]
|
||||
(min (inc (levenshtein (rest str1) str2))
|
||||
(inc (levenshtein str1 (rest str2)))
|
||||
(+ cost
|
||||
(levenshtein (rest str1) (rest str2))))))))
|
||||
|
||||
(println (levenshtein "rosettacode" "raisethysword"))
|
||||
21
Task/Levenshtein-distance/Clojure/levenshtein-distance-2.clj
Normal file
21
Task/Levenshtein-distance/Clojure/levenshtein-distance-2.clj
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
(defn levenshtein [w1 w2]
|
||||
(letfn [(cell-value [same-char? prev-row cur-row col-idx]
|
||||
(min (inc (nth prev-row col-idx))
|
||||
(inc (last cur-row))
|
||||
(+ (nth prev-row (dec col-idx)) (if same-char?
|
||||
0
|
||||
1))))]
|
||||
(loop [row-idx 1
|
||||
max-rows (inc (count w2))
|
||||
prev-row (range (inc (count w1)))]
|
||||
(if (= row-idx max-rows)
|
||||
(last prev-row)
|
||||
(let [ch2 (nth w2 (dec row-idx))
|
||||
next-prev-row (reduce (fn [cur-row i]
|
||||
(let [same-char? (= (nth w1 (dec i)) ch2)]
|
||||
(conj cur-row (cell-value same-char?
|
||||
prev-row
|
||||
cur-row
|
||||
i))))
|
||||
[row-idx] (range 1 (count prev-row)))]
|
||||
(recur (inc row-idx) max-rows next-prev-row))))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue