我是编程新手,我正在构建一个文件相似性查找器,它查找两个文件有多相似。 到目前为止,我将文件存储为两个字符串,然后使用levenshtein距离来查找文件的相似性。
问题是,没有levenshtein距离的执行时间为206ms,这是由于文件到字符串的转换。 当我使用levenshtein距离时,执行时间是惊人的19504ms
几乎是将文件转换为字符串所花费时间的95倍,这使其成为我的项目中的一个瓶颈
我对C,C++和Python很熟悉。 如果你能给我提供任何消息来源,我将不胜感激
下面是我用来计算Levenshtein距离的函数的C++代码:
//LEVENSHTEIN
int levenshtein(std::string a, std::string b){
int len_a = a.length();
int len_b = b.length();
int d[len_a + 1][len_b+1];
for(int i = 0; i < len_a + 1; i++)
d[i][0] = i;
for(int j = 0; j < len_b + 1; j++)
d[0][j] = j;
for(int i = 1; i < len_a + 1; i++){
for(int j = 1; j < len_b + 1; j++){
if(a[i - 1] == b[j - 1]){
d[i][j] = d[i - 1][j - 1];
}
else{
d[i][j] = 1 + min(min(d[i][j-1],d[i-1][j]),d[i-1][j-1]);
}
}
}
int answer = d[len_a][len_b];
return answer;
}
我只需要比较两个文件,而不是更多。 我在levenshtein中读到了trie的用法,但这对于比较多个字符串和源代码很有用。 除此之外,我的运气不太好
有一个叫做NLTK的软件包。 看看吧。
from nltk import distance
print(distance.edit_distance('aa', 'ab'))
输出:
1