我想将Levenshtein 算法用于以下任务:如果用户在我的网站上搜索某个值(他在输入中输入字符),我想立即使用 AJAX 检查建议,就像 Google Instant 一样。
我的印象是 Levenshtein 算法对于这样的任务来说太慢了。String为了检查它的行为,我首先用 Java 实现了它,在方法的每个递归调用中打印出两个s。
public class Levenshtein {
    public static void main(String[] arg){
        String a = "Hallo Zusammen";
        String b = "jfdss Zusammen";
        int res = levenshtein(a, b);
        System.out.println(res);
    }
    public static int levenshtein(String s, String t){
        int len_s = s.length();
        int len_t = t.length();
        int cost = 0;
        System.out.println("s: " + s + ", t: " + t);
        if(len_s>0 && len_t>0){
            if(s.charAt(0) != t.charAt(0)) cost = 1;
        }
        if(len_s == 0){
            return len_t;
        }else{
            if(len_t == 0){
                return len_s;
            }else{
                String news = s.substring(0, s.length()-1);
                String newt = t.substring(0, t.length()-1);
                return min(levenshtein(news, t) + 1,
                            levenshtein(s, newt) + 1,
                            levenshtein(news, newt) + cost);
            }
        }
    }
    public static int min(int a, int b, int c) {
          return Math.min(Math.min(a, b), c);
    }
}
但是,这里有几点:
- 检查
if(len_s>0 && len_t>0)是我添加的,因为我得到了一个StringIndexOutOfBoundsException以上测试值。 - 使用上述测试值,算法似乎可以无限计算
 
是否可以对算法进行优化以使其适合我,或者我应该使用完全不同的算法来完成所需的任务?