标题:算法看不懂,请大神解释一下
只看楼主
景真
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-12-2
 问题点数:0 回复次数:2 
算法看不懂,请大神解释一下
对于长度相同的两个字符串A,B,其距离定义为相应位置字符距离之和。2个非空格距离是它们的ASCII码之差的绝对值。空格与空格的距离为0,空格与其他字符的距离为一定值k。在一般情况下,字符串A和B的长度不一定相同。字符串A的扩展是在A中插入若干空格字符所产生的字符串。在字符串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,j-1)+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]=MAXINT
    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;
 }
请问这个算法的思路是什么啊?我没看懂。
搜索更多相关主题的帖子: 算法 字符串 距离 扩展 tmp 
2017-12-02 12:02
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
看不太明,举个例说明一下。
2017-12-02 16:00
liaohs
Rank: 4
等 级:业余侠客
威 望:7
帖 子:61
专家分:292
注 册:2017-11-26
得分:0 
这个程序有明显错误。
算法就是求最小值。

[此贴子已经被作者于2017-12-4 19:38编辑过]

2017-12-04 18:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483027-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.194104 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved