GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Java/Dynamic Programming/Edit_Distance.java at master · ErrorMode/Java Expand file tree/ Copy pathEdit_Distance.javaMore file actions 89 lines (77 loc) · 2.84 KB / Copy pathEdit_Distance.javaFile metadata and controls89 lines (77 loc) · 2.84 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 /** Author : SUBHAM SANGHAI A Dynamic Programming based solution for Edit Distance problem In Java **/ /**Description of Edit Distance with an Example: Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, by counting the minimum number of operations required to transform one string into the other. The distance operations are the removal, insertion, or substitution of a character in the string. The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: kitten → sitten (substitution of "s" for "k") sitten → sittin (substitution of "i" for "e") sittin → sitting (insertion of "g" at the end).**/ import java.util.Scanner; public class Edit_Distance { public static int minDistance(String word1, String word2) { int len1 = word1.length(); int len2 = word2.length(); // len1+1, len2+1, because finally return dp[len1][len2] int[][] dp = new int[len1 + 1][len2 + 1]; /* If second string is empty, the only option is to insert all characters of first string into second*/ for (int i = 0; i <= len1; i++) { dp[i][0] = i; } /* If first string is empty, the only option is to insert all characters of second string into first*/ for (int j = 0; j <= len2; j++) { dp[0][j] = j; } //iterate though, and check last char for (int i = 0; i < len1; i++) { char c1 = word1.charAt(i); for (int j = 0; j < len2; j++) { char c2 = word2.charAt(j); //if last two chars equal if (c1 == c2) { //update dp value for +1 length dp[i + 1][j + 1] = dp[i][j]; } else { /* if two characters are different , then take the minimum of the various operations(i.e insertion,removal,substitution)*/ int replace = dp[i][j] + 1; int insert = dp[i][j + 1] + 1; int delete = dp[i + 1][j] + 1; int min = replace > insert ? insert : replace; min = delete > min ? min : delete; dp[i + 1][j + 1] = min; } } } /* return the final answer , after traversing through both the strings*/ return dp[len1][len2]; } // Driver program to test above function public static void main(String args[]) { Scanner input = new Scanner(System.in); String s1,s2; System.out.println("Enter the First String"); s1 = input.nextLine(); System.out.println("Enter the Second String"); s2 = input.nextLine(); //ans stores the final Edit Distance between the two strings int ans=0; ans=minDistance(s1,s2); System.out.println("The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 +"\" is "+ans); } } |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |