我搜索了这个问题一段时间,但找不到任何相关的内容。
假设我有两种类型的对象,我想在它们之间创建一对一的对应关系。假设我的第一组是integers
,第二组是letters
。不知何故,我知道每个整数、字母对的置信度(权重/相关性等(。
还假设我有4个整数和3个字母。它们的对应关系是CCD_ 3。(我正试图得到这个结果(
此外,我知道int和字母之间的关系。
1 -> (A, 0.9)
2 -> (B, 0.5), (C, 0.4)
3 -> (B, 0.2), (C, 0.4)
4 -> (B, 0.1)
其余的是零,例如2 -> (A, 0)
等。
在此示例中,1-A
是一对高置信度0.9
,并且没有其他整数与A
匹配。因此,我将把这一对添加到匹配的对列表中。现在,我需要在2-B
和2-C
之间进行选择,而不是在3-B
和3-C
之间进行选择。由于前一种是更好的选择(置信度之和是0.9
,而不是0.6
(,我们选择2-B
和2-C
。
在分别将1, 2, 3
分配给A, B, C
之后,4
将什么都没有。所以,这将是零。
我可以使用某种蛮力算法来实现这一点,但我正在寻找一种优雅的方法来实现。对我来说,它看起来像一个图形算法,但无法想出比蛮力更好的东西。
有什么更优雅的方法可以用于这个算法吗?
语言在这一点上并不重要,但我使用的是python。
这就是所谓的赋值问题。这个链接解释了可以解决这个问题的算法之一,匈牙利算法,并提供了一些你应该能够复制和粘贴的C代码。