【问题标题】:Edit distance with swaps使用交换编辑距离
【发布时间】:2012-01-09 03:23:29
【问题描述】:

编辑距离找出一个字符串到另一个字符串所需的插入、删除或替换的次数。我还想在这个算法中包括交换。例如,“apple”和“appel”的编辑距离应该为 1。

【问题讨论】:

    标签: edit-distance


    【解决方案1】:

    您定义的编辑距离称为Damerau–Levenshtein 距离。您可以在 Wikipedia page 上找到可能的实现。

    【讨论】:

      【解决方案2】:

      在此处查看算法。

      http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Dynamic/Edit/

      您可以为交换、添加、删除提供不同的成本。

      m[i,j] = min(m[i-1,j-1]
               + if s1[i]=s2[j] then 0 else cost_swap fi,
               m[i-1, j] + cost_insert,
               m[i, j-1] + cost_delete ),  i=1..|s1|, j=1..|s2|
      

      【讨论】:

      • 您回答的是替换而不是交换。在我上面给出的第二个字符串中的示例中,交换“el”给出“le”,因此匹配第一个字符串