如何根据成对元素得分值生成多个元素的最佳顺序

2024-04-25 06:51:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多元素,比如说[a, b, c, d],对于每个成对的组合,我有一个分数:

[['d-a', 0], ['a-b', 0], ['b-a', 0],
 ['a-c', 2], ['c-a', 0], ['a-d', 2],
 ['d-b', 1], ['b-c', 2], ['c-b', 0],
 ['b-d', 2], ['d-c', 2], ['c-d', 2]]

我在Python中寻找一种方法,将这些元素按顺序排列,以最小化这些分数的总和。每个单元必须出现一次,而且只能出现一次。请注意,两个元素的连续性也很重要,即'd-a' = 0'a-d' = 2。你知道吗

我将非常感谢你的回答。你知道吗

谢谢

西蒙


Tags: 方法元素分数单元总和连续性
1条回答
网友
1楼 · 发布于 2024-04-25 06:51:25
elements = ['a', 'b', 'c', 'd']
scores = [['d-a', 0], ['a-b', 0], ['b-a', 0], ['a-c', 2], ['c-a', 0], ['a-d', 2],
          ['d-b', 1], ['b-c', 2], ['c-b', 0], ['b-d', 2], ['d-c', 2], ['c-d', 2]]

s = dict(scores)
print(min(itertools.permutations(elements),
          key=lambda p: sum(s[a+'-'+b] for a, b in zip(p, p[1:]))))

打印('c', 'a', 'b', 'd')。你知道吗

相关问题 更多 >