给定一个值列表和可能匹配的信息,是否有一种有效的方法来确定一对中剩余的最少数值?例如
values = [1,2,3,4]
matches[1] = [4]
matches[2] = [3, 4]
matches[3] = [2]
matches[4] = [1, 2]
这里可能的配对可能是
[(1,4),(2,3)]
[(2,4)]
其中前者是最好的,留下0未配对。
列表中任何元素的可能匹配项可以是任何值集,但关系是对称的。值可以重复
我当然可以生成所有可能的配对并测试每一个,但这很慢。尝试将其作为一种树 - 生成可能的匹配(或不匹配),从列表中删除对,并在列表耗尽后返回不匹配的数量 - 有效,但是一旦我点击就会大幅减速列表大小在20年代(介意,这可能只是我的实现)。
在内部,我将匹配信息作为字典,其中
matches[i] = [j for j in range(len(values)) if ismatch(values[j], values[i])]
本身可能有效,也可能不高效。