字符串比较问题其扩展距离。

「已注销」 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;
}
算法没看懂,请大神帮忙解释一下。
...全文
317 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
heronism 2017-12-06
  • 打赏
  • 举报
回复
递归式:
val(i,j)=min{val(i-1,j)+k,val(i,j-1)+k,val(i-1,j-1)+dist(a_i,b_j)
算法是递归的,程序实现是递推的,这是个公共的算法,建议自己先搜一下: http://blog.csdn.net/asce1885/article/details/5618788
赵4老师 2017-12-03
  • 打赏
  • 举报
回复
百度搜相关关键字。 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧