我想在NxN矩阵中找到整数序列的最佳匹配。问题是我不知道如何提取这个最佳匹配的位置。我有以下代码应该计算编辑距离,但我想知道我的网格中编辑距离最短的位置!
function res = searchWordDistance(word,grid)
% wordsize = length(word); % extract the actual size
% [x ,y] = find(word(1) == grid);
D(1,1,1)=0;
for i=2:length(word)+1
D(i,1,1) = D(i-1,1,1)+1;
end
for j=2:length(grid)
D(1,1,j) = D(1,1,j-1)+1;
D(1,j,1) = D(1,j-1,1)+1;
end
% inspect the grid for best match
for i=2:length(word)
for j=2:length(grid)
for z=2:length(grid)
if(word(i-1)==grid(j-1,z-1))
d = 0;
else
d=1;
end
c1=D(i-1,j-1,z-1)+d;
c2=D(i-1,j,z)+1;
c3=D(i,j-1,z-1)+1;
D(i,j,z) = min([c1 c2 c3]);
end
end
end
我已经使用这段代码(少了一个维度)来比较两个字符串。 编辑使用5x5矩阵作为示例
15 17 19 20 22
14 8 1 15 24
11 4 17 3 2
14 2 1 14 8
19 23 5 1 22
现在如果我有序列[4,1,1]
和[15,14,12,14]
,则应使用该算法找到它们。第一个是完美匹配(对角线从(3,2)开始)。第二列是第一列,是该序列最接近的匹配,因为只有一个数字是错误的。