求兩字串的距離的演算法

來源:互聯網
上載者:User

萊文斯坦距離(LD)用于衡量兩個字串之間的相似性。 以下我們稱這兩個字串分別為 s (原字串) 和 t (目標字串)。萊文斯坦距離被定義為''將字串 s 變換為字串 t 所需的刪除、插入、替換操作的次數''。 例如: s="test", t="test", 那麼 LD(s,t)=0,因為不需要做任何變換兩者已相等; s="test", t="tent", 那麼 LD(s,t)=1,因為s變換為t只需做一次替換(將"s"替換為"n")。萊文斯坦距離越大,字串的相似程度越低。 inline int min_in_three ( int i, int j, int k ) { int ret = min( i, j); return min(ret, k); } // compare two char, if the same, return 0, else 1 int diff (char *left, char *right) { return (*left)==(*right)?0:1; } int CalcDistance ( char *left, char * right, int n_left, int n_right ) { if ( n_left == 0) { return n_right; } if ( n_right == 0) { return n_left; } return min_in_three( 1 + CalcDistance( left, right, n_left-1, n_right), 1 + CalcDistance( left, right, n_left, n_right-1), diff( left+n_left, right+n_right) + CalcDistance( left, right, n_left-1, n_right-1)); } int main() { char *p = "snowy"; char *q = "sunny"; int l_p = strlen(p); int l_q = strlen(q); int i_distance = CalcDistance(p, q, l_p, l_q); cout<

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.