📅  最后修改于: 2023-12-03 15:32:38.542000             🧑  作者: Mango
Levenshtein 算法是一种计算两个字符串之间编辑距离的算法。编辑距离指的是将一个字符串转换为另一个字符串所需的最少操作数,操作包括:插入、删除、替换字符。Levenshtein 算法也称为 Edit Distance 或 Levenshtein Distance。
下面给出 C 语言实现 Levenshtein 算法的示例代码:
#include <stdio.h>
#include <string.h>
int levenshtein(char *s, char *t) {
int i, j, m, n, cost = 0;
int d[strlen(s) + 1][strlen(t) + 1];
m = strlen(s);
n = strlen(t);
for (i = 0; i <= m; i++)
d[i][0] = i;
for (j = 0; j <= n; j++)
d[0][j] = j;
for (i = 1; i <= m; i++) {
for (j = 1; j <= n; j++) {
cost = s[i-1] == t[j-1] ? 0 : 1;
d[i][j] = fmin(fmin(d[i-1][j] + 1, d[i][j-1] + 1), d[i-1][j-1] + cost);
}
}
return d[m][n];
}
int main() {
char s[] = "kitten";
char t[] = "sitting";
printf("Levenshtein distance: %d \n", levenshtein(s, t));
return 0;
}
首先,在函数中声明了变量 s 和 t,分别表示两个字符串。接着,声明了变量 m 和 n,分别表示两个字符串的长度。接下来,构建了一个数组来保存计算结果,并初始化了数组的第一行和第一列。
接着,使用两个 for 循环计算编辑距离。首先,判断是否需要进行替换操作,如果需要,则计算代价为 1,否则为 0。接着,使用 fmin 函数计算最小操作数。
最后,返回计算出的 Levenshtein 距离。
Levenshtein distance: 3
这表示将 "kitten" 转换为 "sitting" 需要进行 3 次编辑操作。