C Diff算法,即最短编辑图路径

C Diff算法,即最短编辑图路径,c,algorithm,diff,C,Algorithm,Diff,我试图从著名的“diff”论文中理解该算法,该论文使用两个命令行参数中的字符。然而,我的代码并没有产生我期望的结果。我已经编写了尽可能匹配其变量的算法: $ ./diff abbcabba cbabac #Hmm.. I think it should be 5 SES: 10 $ ./diff abcdefg abcdefg #0! Great! SES: 0 $ ./diff abcXefg abcYefg # 2 seems reasonable SES: 2 $ ./diff abc

我试图从著名的“diff”论文中理解该算法,该论文使用两个命令行参数中的字符。然而,我的代码并没有产生我期望的结果。我已经编写了尽可能匹配其变量的算法:

$ ./diff abbcabba cbabac #Hmm.. I think it should be 5
SES: 10  
$ ./diff abcdefg abcdefg #0! Great!
SES: 0
$ ./diff abcXefg abcYefg # 2 seems reasonable
SES: 2
$ ./diff abcXefg abcefg # clearly wrong
SES: 7
这是我的代码(很抱歉代码墙):

a=argv[1];
b=argv[2];
alen=strlen(a);
blen=strlen(b);
tlen=alen+blen;
maxd=tlen;
vp=(int*)calloc(2*maxd+1,sizeof(int));
//我是如何看待指针算术的:
//[0,2*maxd+1]中的vp)=[0,2*maxd]
//v in[-maxd,maxd+1)=[-maxd,maxd]
v=vp+maxd;
v[1]=0;
对于(D=0;D=blen){
printf(“SES:%d\n”,d);
出去;
}
}
}
printf(“未找到任何内容。SES>%d\n”,maxd);

知道缺陷在哪里吗?我发现在线搜索此问题非常困难…

问题似乎在这一行:

while (x < alen && y < blen && a[x] == b[x]) {

有了这个更改,示例的结果是6、0、2和1。这似乎是准确的。

我对
calloc(3)
前面的
(int*)
转换感到有点惊讶——自从C89中添加了原型之后,该转换就没有必要了,它的存在可以掩盖警告和错误。
while (x < alen && y < blen && a[x] == b[x]) {
while (x < alen && y < blen && a[x] == b[y]) {