根据他们的喜好和能力,从两组不同的人中成对。
一组人可以同时执行任务A和任务B,但大多数人只执行任务B.在另一组中,大多数人只能执行任务A.
找到一个算法,用于配对能够并且愿意执行相同任务的人。
答案 0 :(得分:0)
根据我的理解,问题可以建模为unweighted matching问题;如果两个参与者共享一种共同语言,他们将处于优势地位。然而,这个问题比bipartite graphs中的相同问题更难解决,它可以通过algorithm Edmonds在{{3}}绑定的多项式运行时内解决。
答案 1 :(得分:0)
我知道你想要所有可能的夫妻名单。如果它是正确的,你可以尝试:
可以合并步骤2和3
在python中,它可以用函数形式编写:
import itertools as it
# list of debaters as tupple
# [(name, speak english, speak french), ...]
debaters=[
('ef1', True, True), ('e2', True, False), ('f3', False, True),
('e4', True, False), ('f5', False, True) ]
result=map(
lambda x: (x[0][0], x[1][0]),
filter(lambda x: (x[0][1] and x[1][1]) or (x[0][2] and x[1][2]),
it.combinations(debaters,2)))
print(result)
它将打印:
[('ef1', 'e2'), ('ef1', 'f3'), ('ef1', 'e4'), ('ef1', 'f5'), ('e2', 'e4'), ('f3', 'f5')]
您也可以使用以下命令编写此算法:
def compute(d):
result = list()
for i in range(len(d)):
for j in range(i+1, len(d)):
if (d[i][1] and d[j][1]) or (d[i][2] and d[j][2]):
result.append((d[i][0], d[j][0]))
return result
print(compute(debaters))