Arrays 找到每个单词的最佳匹配,无需重复匹配

Arrays 找到每个单词的最佳匹配,无需重复匹配,arrays,algorithm,kotlin,string-matching,Arrays,Algorithm,Kotlin,String Matching,我有两个字符串数组,我想将第一个数组的每个字符串与第二个数组的每个字符串进行匹配,并显示平均分数 Kotlin中的简单实现将是: fun main(args: Array<String>) { val jw = JaroWinklerDistance() val a = arrayOf("FRITZ", "FRUITS") val b = arrayOf("FRITZ", "MARTIN", "FOOBAR") var score = 0.0

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

Kotlin中的简单实现将是:

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")
}
但这不是我需要的。单词FRITZ在两个数组中已经完全匹配。因此,它应该与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
这个问题是否类似于任何现存的问题?我只是在寻找算法,而不是代码


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

问题是找到最佳匹配。
这就是所谓的

,如果我的要求是找到最佳的总数而不是最佳的分配,有没有更有效的算法?我能用福特·富尔克森吗?匈牙利语对我来说太慢了。从表面上看,这个问题似乎相当简单。@GurV我很确定,找到最佳总数的最佳方法是找到最佳分配,然后将其相加。
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