From 424f21b5a9cee88f9d8edae85720c9f482ea5993 Mon Sep 17 00:00:00 2001 From: Bruno Freitas Tissei <bft15@inf.ufpr.br> Date: Thu, 14 Feb 2019 11:57:14 -0200 Subject: [PATCH] Add Edit Distance and LIS Signed-off-by: Bruno Freitas Tissei <bft15@inf.ufpr.br> --- paradigm/edit_distance.cpp | 30 ++++++++++++++++++++++++++++++ paradigm/lis.cpp | 23 +++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 paradigm/edit_distance.cpp create mode 100644 paradigm/lis.cpp diff --git a/paradigm/edit_distance.cpp b/paradigm/edit_distance.cpp new file mode 100644 index 0000000..7f9ef11 --- /dev/null +++ b/paradigm/edit_distance.cpp @@ -0,0 +1,30 @@ +/** + * Edit Distance + * + * Complexity (Time): O(m*n) + * Complexity (Space): O(m*n) + */ + +int edit_distance(string a, string b) { + int n = a.size(); + int m = b.size(); + + vector<vector<int>> dp(n+1, vector<int>(m+1)); + + for (int i = 0; i <= n; ++i) { + for (int j = 0; j <= m; ++j) { + if (i == 0) + dp[i][j] = j; + else if (j == 0) + dp[i][j] = i; + else if (a[i-1] == b[j-1]) + dp[i][j] = d[i-1][j-1]; + else + dp[i][j] = 1 + min(dp[i][j-1], // Insert + min(dp[i-1][j], // Remove + dp[i-1][j-1])); // Replace + } + } + + return dp[n][m]; +} diff --git a/paradigm/lis.cpp b/paradigm/lis.cpp new file mode 100644 index 0000000..48ccd6e --- /dev/null +++ b/paradigm/lis.cpp @@ -0,0 +1,23 @@ +/** + * Longest Increasing Subsequence (LIS) + * + * Complexity (Time): O(n^2) + * Complexity (Space): O(n) + */ + +int lis(vector<int> v) { + int n = v.size(); + + vector<int> lis(n); + lis[0] = 1; + + for (int i = 1; i < n; ++i) { + lis[i] = 1; + + for (int j = 0; j < i; ++j) + if (v[i] > v[j] and lis[i] < lis[j] + 1) + lis[i] = lis[j] + 1; + } + + return *max_element(all(lis)); +} -- GitLab