diff --git a/algorithm/category.json b/algorithm/category.json index 528e8276..415d28b1 100644 --- a/algorithm/category.json +++ b/algorithm/category.json @@ -27,6 +27,12 @@ "heap" : "Heap Sort" } }, + "string": { + "name": "String", + "list": { + "edit_distance": "Edit Distance" + } + }, "etc": { "name": "Uncategorized", "list": { diff --git a/algorithm/string/edit_distance/desc.json b/algorithm/string/edit_distance/desc.json new file mode 100644 index 00000000..d945d7bb --- /dev/null +++ b/algorithm/string/edit_distance/desc.json @@ -0,0 +1,18 @@ +{ + "Edit-Distance": "Given two strings str1 (length M) and str2 (length N) and below operations that can performed on str1. Find minimum number of edits (operations) required to convert str1 into str2.
Insert
Remove
Replace
All of the above operations are of equal cost", + "Applications": [ + "Displaing Near-Proximity Words", + "Information Retrieval (eg- Lucene API)", + "Natural Language Processing" + ], + "Complexity": { + "time": "worst O(|M|.|N|)", + "space": "worst O(|M|.|N|)" + }, + "References": [ + "Wikipedia" + ], + "files": { + "dynamic_programming": "Distance from str1 to str2 using Dynamic Programming (2D Array method)" + } +} diff --git a/algorithm/string/edit_distance/dynamic_programming/code.js b/algorithm/string/edit_distance/dynamic_programming/code.js new file mode 100644 index 00000000..4373ab71 --- /dev/null +++ b/algorithm/string/edit_distance/dynamic_programming/code.js @@ -0,0 +1,40 @@ +tracer._pace (200); +tracer._print ('Initialized DP Table'); +tracer._print ('Y-Axis (Top to Bottom): ' + str1); +tracer._print ('X-Axis (Left to Right): ' + str2); + +var dist = (function editDistance (str1, str2, table) { + //display grid with words + tracer._print ('*** ' + str2.split ('').join (' ')); + table.forEach (function (item, index) { + var character = (index === 0) ? '*' : str1 [index-1]; + tracer._print (character + '\t' + item); + }); + + //begin ED execution + for (var i = 1; i < str1.length+1; i++) { + for (var j = 1; j < str2.length+1; j++) { + if (str1 [i-1] === str2 [j-1]) { + tracer._select (i-1, j-1); + table [i] [j] = table [i-1] [j-1]; + tracer._notify (i, j); + tracer._deselect (i-1, j-1); + } + else { + tracer._select (i-1, j); + tracer._select (i, j-1); + tracer._select (i-1, j-1); + table [i] [j] = Math.min (table [i-1] [j], table [i] [j-1], table [i-1] [j-1]) + 1; + tracer._notify (i, j); + tracer._deselect (i-1, j); + tracer._deselect (i, j-1); + tracer._deselect (i-1, j-1); + } + } + } + + tracer._select (str1.length, str2.length); + return table [str1.length] [str2.length]; +}) (str1, str2, table); + +tracer._print ('Minimum Edit Distance: ' + dist); \ No newline at end of file diff --git a/algorithm/string/edit_distance/dynamic_programming/data.js b/algorithm/string/edit_distance/dynamic_programming/data.js new file mode 100644 index 00000000..86eae52d --- /dev/null +++ b/algorithm/string/edit_distance/dynamic_programming/data.js @@ -0,0 +1,10 @@ +var tracer = new Array2DTracer (); +var str1 = 'stack', str2 = 'racket', table = new Array (str1.length + 1); + +table [0] = Array.apply (null, {length: str2.length + 1}).map (Number.call, Number); +for (var i = 1; i < str1.length+1; i++) { + table [i] = Array.apply (null, Array (str2.length+1)).map (Number.prototype.valueOf, -1); + table [i] [0] = i +} + +tracer._setData (table); \ No newline at end of file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy