动态规划——最短编辑距离

    编辑距离是指两个字串之间,从一个转成另一个所需要的最少编辑操作次数,许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 
问题 
    给定两个字符串S1和S2,求S2和S1的编辑距离,即至少需要经过多少步编辑操作才可以将S1变成S2。

分析 
    定义“状态” edit[i][j],表示将S1的长度为i的前缀S1[1...i]到S2的长度为j的前缀S2[1....j]的编辑距离。则显然有:

if (i == 0 && j == 0)
    edit[i][j] = 0;
else if (i == 0 && j > 0)
    edit[i][j] = j;
else if(j == 0 && i > 0)
    edit[i][j] = i;
else
    edit[i][j] = min{edit[i-1][j] + 1, edit[i][j-1] + 1, edit[i-1][j-1] + f(i, j)}
//其中,当第一个字符串的第i个字符不等于第二个字符串的第j个字符时,f(i, j) = 1; 否则 = 0.

 

posted @ 2015-09-30 13:00  农民伯伯-Coding  阅读(218)  评论(0编辑  收藏  举报