关于String Edit Distance问题的总结 - 包子IT面试培训



关于String Edit Distance问题的总结 - 包子IT面试培训

不同String之间的distance问题是面试常常考察的高频题目。所谓edit distance,通常指最小的edit distance,即从一个单词通过add,delete, replace变成另一个单词所需要的最小步骤数。实际上,找到一个字典中与当前输入string的edit distance小于k的词,常常用于文档中拼写的自动纠正当。本文主要讨论算法的难点,即如何通过使用DP尽量降低方法的复杂度。

题目

找到一个字典中与当前输入string的edit distance [1],(edit distance通常指最小的edit distance,即从一个单词通过add,delete, replace变成另一个单词所需要的最小步骤数),为1的词。

分析思路

最简单的方法就是把输入的string和字典里每个词比较edit distance,如果是一就返回 比较好的edit distance算法要求n^2时间复杂度 如果n是两个字符串的长度 这样假设字典有m个词,那总时间复杂度就是m*n^2,非常慢。

我们通常想到的string matching against一个string set的方法是给string set建立trie。这道题不能直接用这种方法,因为我们要求edit distance为1。实际上,edit distance为1就是允许trie里的string有1个字符和输入字符不匹配。这种不匹配既可以是字典里的词多了一个letter,可以是输入的string多了一个letter,也可以是这两个词有一个letter不一样。对于这道题来说,依然为dict建立一个trie,依然去匹配输入的string,在匹配时(只)允许有一个字符不匹配,然后比较输入string和字典里的每一个词,这样在trie里就可以找到所有edit distance为1的词实现时我们借用通配符的概念,如果两个string已经有一个letter不一样,那就用掉了这个通配符,这时如果还有不匹配的letter,那就不用继续比较当前两个词了。


Read full article from 关于String Edit Distance问题的总结 - 包子IT面试培训


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts