これらの要件を満たすために、レーベンシュタインアルゴリズムを使用しています。
N文字の単語を見つけるとき、私の辞書データベースで修正として提案する単語は次のとおりです。
見つかった単語と1文字の違いがあるN文字のすべての辞書単語。例:見つかった単語:bearn、辞書の単語:bears
見つかった単語と等しいN文字を持つN+1文字のすべての辞書単語。例:見つかった単語:クマ、辞書の単語:クマ
見つかった単語と等しいN-1文字を持つN-1文字のすべての辞書単語。例:見つかった単語:クマ、辞書の単語:クマ
このC++でのレーベンシュタインアルゴリズムの実装を使用して、単語のレーベンシュタイン数が1(3つの場合すべてのレーベンシュタイン数)であるかどうかを調べていますが、提案する単語を選択するにはどうすればよいですか?Boyer-Moore-HorspoolとKnuth-Morris-Prattについて読みましたが、どちらがどのように役立つかわかりません。
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int levenshtein(const string &s1, const string &s2)
{
string::size_type N1 = s1.length();
string::size_type N2 = s2.length();
string::size_type i, j;
vector<int> T(N2+1);
for ( i = 0; i <= N2; i++ )
T[i] = i;
for ( i = 0; i < N1; i++ ) {
T[0] = i+1;
int corner = i;
for ( j = 0; j < N2; j++ ) {
int upper = T[j+1];
if ( s1[i] == s2[j] )
T[j+1] = corner;
else
T[j+1] = min(T[j], min(upper, corner)) + 1;
corner = upper;
}
}
return T[N2];
}