我有一個家庭作業,我需要計算兩個字符串之間的編輯距離。我得到了初始功能的工作,但我一直有這個部分的問題從遞歸函數提前退出時返回什麼?
現在添加截斷到編輯距離。這不應該改變產生的結果,但會大大加快性能。
這是我原來的功能:
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)
但這並不工作。
我可以得到一個關於如何做到這一點的提示嗎?謝謝!
什麼是截斷? – Rndm 2012-07-15 06:20:29
@ user1416970您從遞歸函數中早期返回的情況,因爲您知道您不會從遞歸獲得任何東西。 – quasiverse 2012-07-15 06:22:09
這必須做點事情。你是否正確地將「深度」傳遞給函數? – 2012-07-15 06:30:38