我试图在Javascript中构建一个文件比较脚本,它采用两个版本的文件并输出类似Github的内容,显示添加和删除。我虽然遇到了算法逻辑方面的问题。这是迄今为止我的流程的伪代码:
var j = 0;
// check current file line by line
for(i=0; i < currentFileArr.length; i++){
// see if the current line is different
if(currentFileArr[i] !== previousFileArr[j]){
if(previousFile.contains(currentFileArr[i])){
// line is a deletion. find next line that wasn't deleted
while(currentFileArr[i] !== previousFileArr[j]){
j++;
}
} else {
// line is an addition
}
} else { // lines are the same
j++;
}
}
主要问题是不是唯一的行。就像刚刚用大括号的新线条或线条一样。
答案 0 :(得分:1)
您需要将文件中的每个唯一行视为元数据,即某些扩展字母表的“字符”。通过这种方式,您的文件都将变为“metachars字符串”。
最有效的方法 - 创建哈希表,包含唯一字符串,并使用表中的索引作为元搜索。
此后,您可以搜索最少的编辑顺序 Levenshtein算法在这些字符串之间:
http://www.let.rug.nl/kleiweg/lev/levenshtein.html
http://en.wikipedia.org/wiki/Levenshtein_distance
http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance