2 つの文字列間の編集距離を計算する必要がある宿題があります。初期機能は動作するようになりましたが、この部分で問題が発生しています
ここでカットオフを編集距離に追加します。これにより、生成される結果が変わることはありませんが、パフォーマンスが大幅に高速化されます。
ここに私の元の機能があります:
static unsigned int compute_edit_distance(const char *const a,
const char *const b)
{
if (strcmp(a, b) == 0) return 0;
if (a[0] == '\0') return strlen(b);
if (b[0] == '\0') return strlen(a);
unsigned int remove_from_a =
compute_edit_distance(a + 1, b) + 1;
unsigned int remove_from_b =
compute_edit_distance(a, b + 1) + 1;
unsigned int remove_from_both =
compute_edit_distance(a + 1, b + 1);
if (tolower(a[0]) != tolower(b[0])) ++remove_from_both;
return get_min(get_min(remove_from_a, remove_from_b),
remove_from_both);
}
いくつか試してみましたが、どれもうまくいきません。私の最近の変化はこれです
if (depth == MAX_EDIT_DISTANCE_DEPTH)
{
size_t a_length = strlen(a);
size_t b_length = strlen(b);
size_t max_length = (a_length > b_length) ? a_length : b_length;
return MAX_EDIT_DISTANCE_DEPTH + max_length;
}
新しい関数シグネチャを使用
static unsigned int compute_edit_distance(const char *const a,
const char *const b, unsigned int depth)
しかし、それもうまくいきません。
これを正しく行う方法についてヒントを得ることができますか? ありがとう!