From b84dd0a187e84a774f56745648c9ac0e0006d663 Mon Sep 17 00:00:00 2001 From: Sean Leishman Date: Sat, 24 Jun 2023 17:58:38 +0100 Subject: [PATCH] add dynammic programming solution to edit distance --- .../levenshtein_distance_dp.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 algorithms/Python/dynamic_programming/levenshtein_distance_dp.py diff --git a/algorithms/Python/dynamic_programming/levenshtein_distance_dp.py b/algorithms/Python/dynamic_programming/levenshtein_distance_dp.py new file mode 100644 index 00000000..19ebc26c --- /dev/null +++ b/algorithms/Python/dynamic_programming/levenshtein_distance_dp.py @@ -0,0 +1,27 @@ + +def edit_distance(w1, w2): + """ + Find edit distance (minimum number of changes) required to convert string w1 to string w2. + """ + + m = [[0 if x != 0 else y if y != 0 else x for x in range(len(w2) + 1)] for y in range(len(w1) + 1)] + + for i in range(1,len(w1) + 1): + m[i][0] = i + for j in range(1, len(w2) + 1): + m[0][j] = j + + for i in range(1, len(w1) + 1): + for j in range(1, len(w2) + 1): + m[i][j] = min( + m[i-1][j-1] + int(w1[i-1] != w2[j-1]), + m[i-1][j] + 1, + m[i][j-1] + 1 + ) + + return m + + +if __name__ == "__main__": + print(edit_distance("sitting", "kitten")) +