【问题标题】:Difference between permutations [duplicate]排列之间的差异[重复]
【发布时间】:2016-05-04 17:47:35
【问题描述】:

有没有办法定量计算两个排列之间的距离

假设我们有以下两个元素序列:

A = {0, 1, 2, 3}
B = {0, 3, 2, 1}

我可以说排列 BA 不同,因为:

  • 我需要 1 交换操作才能将 B 转换为 A
  • B 中有 2 个元素,它们的索引与 A 中的相同元素的索引不同

还有其他方法可以比较和描述这两者之间的区别吗?

主要目标是定义一种算法,该算法能够将第二个排列B 逼近到第一个排列A,这样如果应用此过程的所有步骤,结果将是排列A本身。 但为了做到这一点,我认为最好先定义一个合理的过程,描述BA 的差异。

是否有任何已知的算法允许对另一个排列进行逼近?

【问题讨论】:

标签: c++ c algorithm permutation


【解决方案1】:

排列之间的距离可以是排列的字典索引之间的距离。

如何找到字典索引isdescribedhere

【讨论】:

    【解决方案2】:

    有几种不同的方法来定义两个序列之间的差异。仅举几例:

    Hamming distance:元素不同的位置数。

    hamming(A, B)
      B[1] is different than A[1] and B[3] is different than A[3]
    => 2
    

    Levenshtein distance:从一个序列到另一个序列所需的最少修改次数。

    levenshtein(A, B)
      replace B[1] with A[1] and replace B[3] with A[3]
    => 2
    

    Damerau–Levenshtein distance:考虑换位的前者的扩展。

    damerau_levenshtein(A, B)
      transpose B[3] with B[1]
    => 1
    

    根据您给定的示例,您对跟踪换位感兴趣,因此 Damerau-Levenshtein 距离是您的最佳选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2016-04-01
      • 2012-11-21
      相关资源
      最近更新 更多