字符串比较问题其扩展距离。
「已注销」 2017-12-02 01:09:07 问题描述:对于长度相同的两个字符串A和B,其距离定义为相应位置字符距离之和。2个非空格字符的距离是它们ASCII码之差的绝对值,空格与空格的距离为0,空格与其他字符的距离为一定值k。
在一般情况下,字符串A和B的长度不一定相同。字符串A的扩展是在A中插入若干空格字符所产生的字符串。在字符串A和B的所有长度相同的扩展中,有一对距离最小的扩展,该距离称为字符串A和B的扩展距离。
对于给定的字符串A和B,编程计算A和B的扩展距离。
设字符串A和B的子串A[1..i],B[1..j]的扩展距离为val[i,j],则val[i,j]具有最小子结构性质
递归式:
val(i,j)=min{val(i-1,j)+k,val(i,j-1)+k,val(i-1,j-1)+dist(a_i,b_j)
算法:
int comp()
{
int i,j,tmp,len1,len2;
val[0][0]=0;len1=strlen(str1);len2=strlen(str2);
for(i=0;i<=len1;i++)
for(j=0;j<=len2;j++)
if(i+j){
val[i][j]=
if((i*j) && (tmp=val[i-1][j-1]+dist(str1[i-1],str2[j-1]))<val[i][j])
val[i][j]=tmp;
if(i && (tmp=val[i-1][j]+dist(str1[i-1],' '))<val[i][j])
val[i][j]=tmp;
if(j && (tmp=val[i][j-1]+dist(str2[j-1],' '))<val[i][j])
val[i][j]=tmp;
}
return val[len1][len2];
}
int main()
{
readin();
cout<<comp()<<endl;
return 0;
}
算法没看懂,请大神帮忙解释一下。