* Added Longest Common Subsequence

* Renamed the File

* Optimized the code

* Optimized the code

* Changed some styles as per the rule

* Again some style fixed

* Added Longest Increasing Subsequence program to the list

* Style changed
This commit is contained in:
Omkarnath Parida
2020-10-04 19:32:08 +05:30
committed by GitHub
parent c947571cc3
commit 9934128461
2 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,33 @@
/*
* Given two sequences, find the length of longest subsequence present in both of them.
* A subsequence is a sequence that appears in the same relative order, but not necessarily contiguous.
* For example, “abc”, “abg”, “bdf”, “aeg”, ”acefg”, .. etc are subsequences of “abcdefg”
*/
function longestCommonSubsequence (x, y, str1, str2, dp) {
if (x === -1 || y === -1) {
return 0
} else {
if (dp[x][y] !== 0) {
return dp[x][y]
} else {
if (str1[x] === str2[y]) {
dp[x][y] = 1 + longestCommonSubsequence(x - 1, y - 1, str1, str2, dp)
return dp[x][y]
} else {
dp[x][y] = Math.max(longestCommonSubsequence(x - 1, y, str1, str2, dp), longestCommonSubsequence(x, y - 1, str1, str2, dp))
return dp[x][y]
}
}
}
}
function main () {
const str1 = 'ABCDGH'
const str2 = 'AEDFHR'
const dp = new Array(str1.length + 1).fill(0).map(x => new Array(str2.length + 1).fill(0))
const res = longestCommonSubsequence(str1.length - 1, str2.length - 1, str1, str2, dp)
console.log(res)
}
main()

View File

@ -0,0 +1,27 @@
/**
* A Dynamic Programming based solution for calculating Longest Increasing Subsequence
* https://en.wikipedia.org/wiki/Longest_increasing_subsequence
*/
function main () {
const x = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]
const length = x.length
const dp = Array(length).fill(1)
let res = 1
for (let i = 0; i < length; i++) {
for (let j = 0; j < i; j++) {
if (x[i] > x[j]) {
dp[i] = Math.max(dp[i], 1 + dp[j])
if (dp[i] > res) {
res = dp[i]
}
}
}
}
console.log('Length of Longest Increasing Subsequence is:', res)
}
main()