具有模糊差分度量的{Diff}算法

时间:2016-08-02 12:51:11

标签: algorithm diff

我正在寻找类似于具有字母相似度量的最大公共子序列算法的算法。我的意思是,已知算法将所有字母表字母视为完全不同,我的用例具有更易于编辑成另一个字母的字母表字母,因此它们应通过差异算法视为相似。

作为用法示例,您可能会想到将算法运算在文本行上,其中某些行与其他行更相似。

第4页的论文An O(ND) Difference Algorithm and Its Variations说明:考虑为每个边缘添加权重或成本。给对角线边缘权重0和非对角线边缘权重1 。我想选择从[0;1]区间分配任何权重。

1 个答案:

答案 0 :(得分:0)

最大公共子序列(LCS)问题通常由动态编程方法计算,您可以调整现有方法以将它们应用于您的用例。

在这个解释LCS如何工作的例子中(来自维基百科)https://en.wikipedia.org/wiki/Longest_common_subsequence_problem#Example,您应该考虑调整算法:

而不是得分:

score_j = socre_i + 1,对于j = i +1(也就是说,当您找到新的公共项目时添加1),当新项目添加到LCS时,您应该得分:

score_j = F(score_i, p(letter_i, letter_j))无论如何。

  • p(letter_i, letter_j) is the probability to change from letter_i to letter_j(即您所谈论的weight [0, 1]
  • F是一个聚合函数,从score_iscore_j知道概率p

例如,F可以定义为operator +。然后它会产生:

score_j = score_i + p(letter_i, letter_j)) 或者更准确地说:

score_j = score_i + p(letter_i, letter_j)) x 1(请将x 1视为of a character

并且woud会给出2个子序列的最大相似度(字符数),您可以通过算法末尾的回溯找到它们。

您可以找到自己的函数F以获得更好的结果。