次のタスクにレーベンシュタイン アルゴリズムを使用したいと考えています。私の Web サイトのユーザーが何らかの値を検索する (入力に文字を入力する) 場合、Google インスタントのように、AJAX を使用して提案を即座に確認したいと考えています。
レーベンシュタイン アルゴリズムは、このようなタスクには遅すぎるという印象があります。その動作を確認するために、最初に Java で実装しString
、メソッドの再帰呼び出しごとに 2 つの を出力しました。
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
- 上記のテスト値では、アルゴリズムは無限に計算するようです
アルゴリズムを機能させるためにアルゴリズムで実行できる最適化はありますか、それとも目的のタスクを達成するためにまったく別のアルゴリズムを使用する必要がありますか?