编辑距离

https://zh.wikipedia.org/wiki/%E8%90%8A%E6%96%87%E6%96%AF%E5%9D%A6%E8%B7%9D%E9%9B%A2

 

https://www.dreamxu.com/books/dsa/dp/edit-distance.html

 

按行计算矩阵,矩阵每行的元素只与其上一行的对应下标值,以及上一行对应下标-1的值,以及改行前一个值有关,因此用一维数组就能解决:
int
edit_distance(char *a, char *b) { int lena = strlen(a); int lenb = strlen(b); int d[lenb+1]; int i, j, old, tnmp; for (j = 0; j <= lenb; j++) { //初始化第一行 d[j] = j; } for (i = 1; i <= lena; i++) { // 每行从第1列开始 (第0列就是 i值) old = i - 1; // 左上角初始值 (初始值,下一行第1列的左上角就是) d[0] = i; // 每行第一个元素的值就是下标号(下一行的左上角) for (j = 1; j <= lenb; j++) { temp = d[j]; // 先保存上一行的对应下表值 // 算法中 a, b 字符串下标从 1 开始,c 语言从 0 开始,所以 -1 if (a[i-1] == b[j-1]) { d[j] = old; } else { d[j] = min_of_three(d[j] + 1, d[j-1] + 1, old + 1); } old = temp; } } return d[lenb]; }

 

posted on 2019-12-11 11:07  不忘初衷,方能致远  阅读(104)  评论(0编辑  收藏  举报

导航