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