代码之家  ›  专栏  ›  技术社区  ›  Gurwinder Singh

查找每个单词的最佳匹配项,而不进行双匹配

  •  0
  • Gurwinder Singh  · 技术社区  · 7 年前

    我有两个字符串数组,我想将第一个数组的每个字符串与第二个数组的每个字符串进行匹配,并显示平均得分。

    科特林的幼稚实施将是:

    fun main(args: Array<String>) {
        val jw = JaroWinklerDistance()
        val a = arrayOf("FRITZ", "FRUITS")
        val b = arrayOf("FRITZ", "MARTIN", "FOOBAR")
    
        var score = 0.0
        a.forEach { x ->
            var current = 0.0
            b.forEach { y ->
                current = max(current, jw.apply(x, y))
            }
            score += current
        }
        score /= a.size
    
        println("Average score $score")
    }
    

    它打印:

    Average score 0.9288888888888889
    

    但这不是我需要的。这个词 FRITZ 已经在两个数组中完全匹配。所以应该和剩下的相匹配 FRUITS 具有 MARTIN FOOBAR . 所以平均分应该计算为:

    FRITZ  - FRITZ  : 1
    FRUITS - MARTIN : 0.5555555555555555
    FRUITS - FOOBAR : 0.4444444444444444
    
    FRITZ  = 1
    FRUITS = max (0.5555555555555555, 0.4444444444444444)
           = 0.5555555555555555
    
    Average score = (1 + 0.5555555555555555) / 2
                  = 0.7777777777777778
    

    这个问题类似于任何现存的问题吗?我只是在寻找算法,而不是代码。

    我尝试过不同的方法,但没有运气。有人能帮忙吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   btilly    7 年前

    问题是要找到一个最佳匹配。 这叫做 Assignment Problem