Problem : Given two sequences, find the longest subsequence present in both of them. A subsequence is a sequence that appears in the same relative order, but not necessarily contiguous.(Reference GeekForGeeks).
LCS for input Sequences “ABCDGH” and “AEDFHR” is “ADH” of length 3.
LCS for input Sequences “AGGTAB” and “GXTXAYB” is “GTAB” of length 4.
Complete sample program :-
Sample output:-
longest lcs: BATG
Length of lcs is: 4
LCS for input Sequences “ABCDGH” and “AEDFHR” is “ADH” of length 3.
LCS for input Sequences “AGGTAB” and “GXTXAYB” is “GTAB” of length 4.
Solution using Recursion:- Order of 2n
static public int LCSRecursiveSolution(char[] arr1, char[] arr2, int m, int n) { if (m == 0 || n == 0) { return 0; } if (arr1[m - 1] == arr2[n - 1]) { return 1 + LCSRecursiveSolution(arr1, arr2, m - 1, n - 1); } return Math.max(LCSRecursiveSolution(arr1, arr2, m, n - 1), LCSRecursiveSolution(arr1, arr2, m - 1, n)); }
Using dynamic programming :-
static public int LCSUsingDynamicProgramming(char[] arr1, char[] arr2, int m, int n) { int[][] solution = new int[m + 1][n + 1]; for (int i = 0; i < m; i++) { solution[0][i] = 0; } for (int i = 0; i < n; i++) { solution[i][0] = 0; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (arr1[i - 1] == arr2[j - 1]) { solution[i][j] = solution[i - 1][j - 1] + 1; } else { solution[i][j] = Math.max(solution[i - 1][j], solution[i][j - 1]); } } } printLCS(solution, arr1, arr2, m, n); return solution[m][n]; }
Display longest common subsequence:-
static void printLCS(int[][] solution, char[] arr1, char[] arr2, int m, int n) { int i = m; int j = n; int index = 0; char[] result = new char[solution[m][n]]; while (i > 0 && j > 0) { if (arr1[i - 1] == arr2[j - 1]) { result[index] = arr1[i-1]; i--; j--; index++; } else if (solution[i][j - 1] > solution[i - 1][j]) { j = j - 1; } else { i = i - 1; } } System.out.println(result); }
Complete sample program :-
package com.ds.dp; public class LCSUsingDP { public static void main(String[] args) { char X[] = "AGGTAB".toCharArray(); char Y[] = "GXTXAYB".toCharArray(); // System.out.println(LCSRecursiveSolution(X, Y, X.length, Y.length)); System.out.println("Length of lcs is: " + LCSUsingDynamicProgramming(X, Y, X.length, Y.length)); } static public int LCSRecursiveSolution(char[] arr1, char[] arr2, int m, int n) { if (m == 0 || n == 0) { return 0; } if (arr1[m - 1] == arr2[n - 1]) { return 1 + LCSRecursiveSolution(arr1, arr2, m - 1, n - 1); } return Math.max(LCSRecursiveSolution(arr1, arr2, m, n - 1), LCSRecursiveSolution(arr1, arr2, m - 1, n)); } static public int LCSUsingDynamicProgramming(char[] arr1, char[] arr2, int m, int n) { int[][] solution = new int[m + 1][n + 1]; for (int i = 0; i < m; i++) { solution[0][i] = 0; } for (int i = 0; i < n; i++) { solution[i][0] = 0; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (arr1[i - 1] == arr2[j - 1]) { solution[i][j] = solution[i - 1][j - 1] + 1; } else { solution[i][j] = Math.max(solution[i - 1][j], solution[i][j - 1]); } } } printLCS(solution, arr1, arr2, m, n); return solution[m][n]; } static void printLCS(int[][] solution, char[] arr1, char[] arr2, int m, int n) { int i = m; int j = n; int index = 0; char[] result = new char[solution[m][n]]; while (i > 0 && j > 0) { if (arr1[i - 1] == arr2[j - 1]) { result[index] = arr1[i - 1]; i--; j--; index++; } else if (solution[i][j - 1] > solution[i - 1][j]) { j = j - 1; } else { i = i - 1; } } System.out.print("longest lcs: "); System.out.println(result); } }
Sample output:-
longest lcs: BATG
Length of lcs is: 4
Mua vé tại Aivivu, tham khảo
ReplyDeletekinh nghiệm mua vé máy bay đi Mỹ giá rẻ
vé máy bay huế đi hồ chí minh
săn vé máy bay đi hà nội
ve may bay di nha trang
chuyến bay hà nội quy nhơn
taxi sân bay nội bài 180k
4F3BCE712F
ReplyDeleteInstagram Ücretsiz İzlenme
Youtube İzlenme Hilesi
Youtube Ücretsiz İzlenme
Facebook Ücretsiz Beğeni
Telegram Ücretsiz Abone
Tumblr Takipçi Hilesi
Twitch Ücretsiz Takipçi
Pinterest Ücretsiz Takipçi
PUBG Mobile Uc Hilesi
ReplyDeleteSosyal medya pazarlaması için uygun ve güvenilir bir çözüm arıyorsanız en ucuz smm panel ile tanışabilirsiniz. Bu panel uygun fiyatları ve kaliteli hizmetleri sayesinde birçok kullanıcı tarafından tercih edilmektedir. Ayrıca ihtiyaçlarınıza uygun çeşitli paketler sunarak etkili ve hızlı sonuçlar almanızı sağlar. Eğer ekonomik ve güvenilir bir seçenek arıyorsanız kesinlikle en ucuz smm panel sizin için ideal olacaktır.