编辑距离

问题描述

当一个智能终端将一行正文更新,并用新的目标串y[1..n]来替换现存的源串X [l..m]时,可有几种方式来做这种变换:源串中的单个字符可被删除(delete);被替换 (replace);或被复制到目标串中去(copy);字符也可被插入(insert);源串中的两个相邻字符可进行交换并复制到目标串中去(twiddle);在完成其它所有操作之后,源串中余下的全部后缀就可用删至行末的操作删除(kill)。

例如,将源"algorithm"转换成目标串"altruistic"的一种方法是采取下面的操作序列:

操作 目标串 源串
copy a a lgorithm
copy l al gorithm
replace g by t alt orithm
delete o alt rithm
copy r altr ithm
insert u altru ithm
insert i altrui ithm
insert s altruis ithm
twiddle it into ti altruiti hm
insert c altruitic hm
kill hm altruitic  

要达到这个结果还可有其它一些操作序列。操作delete,replace,copy,insert,twiddle和kill中每一个都有一个相联系的代价cost。例如

cost(delete)=3;

cost(replace)=6;

cost(copy)=5;

cost(insert)=4;

cost(twiddle)=4;

cost(kill)=被删除的串长*cose(delete)-1;

一个给定的操作序列的代价为序列中各操作代价之和。例如上述操作序列的代价为

 3*cost(copy)+cost(replace)+cost(delete)+3*cost(insert)+cost(twiddle)+cost(kill)

=3*5+6+3+3*4+4+2*3-1

=45

给定两个序列x[1..m],y[1..n]和一些操作代价集合,X到Y的编辑距离为将X转化为Y的最"便宜"的转换序列的代价。请给出一个算法来找出x[1..m]至y[1..n]的编辑距离,并输出一个最优转换序列。

参考答案