Расстояние Дамерау-Левенштейна (Редактировать расстояние с транспозицией) c реализацией

Я реализовал расстояние Дамерау–Левенштейна в C++, но оно не дает правильного o/p для ввода (pantera ,аорта) правильное o/p равно 4, но мой код дает 5.....

int  editdist(string s,string t,int n,int m) 
{
    int d1,d2,d3,cost;
    int i,j;
    for(i=0;i<=n;i++) 
    {
        for(j=0;j<=m;j++)
        {
          if(s[i+1]==t[j+1]) 
              cost=0;
          else
              cost=1;
          d1=d[i][j+1]+1;
          d2=d[i+1][j]+1;
          d3=d[i][j]+cost;
          d[i+1][j+1]=minimum(d1,d2,d3);
          if(i>0 && j>0 && s[i+1]==t[j] && s[i]==t[j+1] )   //transposition
          {
              d[i+1][j+1]=min(d[i+1][j+1],d[i-1][j-1]+cost);
          }
        }
    }
    return d[n+1][m+1]; 
}

Я не вижу ошибок. Может кто-нибудь найти проблему с кодом?

11
задан Kevin Bedell 24 May 2012 в 10:59
поделиться