Python 订购具有已知对距离的项目
有许多项(比如a、b、c、d、e)的子集之间的相对距离是已知的。子集的大小是有限的,尽管我希望收到所有带有分数的项目的最终订单。例如:Python 订购具有已知对距离的项目,python,algorithm,sorting,Python,Algorithm,Sorting,有许多项(比如a、b、c、d、e)的子集之间的相对距离是已知的。子集的大小是有限的,尽管我希望收到所有带有分数的项目的最终订单。例如: a,b,c 1,3,5 c,d,e 4,1,10 应该会导致类似的结果 a,d,b,c,e 真正的实现将是相当大的一点(大约5.000个子集,每个5个项目),所以我试图找到一个算法,可以有效地做到这一点。有没有任何已知的解决方案可以解决这样的问题(不需要代码,一个概念性的想法会更有帮助)?在(正确地)因为没有发布解决方案而被否决后,我提出了以下建议: se
a,b,c
1,3,5
c,d,e
4,1,10
应该会导致类似的结果
a,d,b,c,e
真正的实现将是相当大的一点(大约5.000个子集,每个5个项目),所以我试图找到一个算法,可以有效地做到这一点。有没有任何已知的解决方案可以解决这样的问题(不需要代码,一个概念性的想法会更有帮助)?在(正确地)因为没有发布解决方案而被否决后,我提出了以下建议:
sets = [
[["a", 1], ["b", 5], ["c", 9]],
[["c", 3], ["d", 1], ["e", 5]]
]
pairs = {}
for set in sets:
processed_pairs = []
for first in set:
for second in set:
if first[0] is second[0]:
continue
pair = first[0]+second[0]
if pair in processed_pairs:
continue
processed_pairs.append(pair)
if second[0] not in pairs:
pairs[second[0]] = {}
if first[0] not in pairs[second[0]]:
pairs[second[0]][first[0]] = {}
pairs[second[0]][first[0]] = second[1]/first[1]
pairs
形成以下几对:
{'a': {'b': 0.2, 'c': 0.1111111111111111},
'b': {'a': 5.0, 'c': 0.5555555555555556},
'c': {'a': 9.0, 'b': 1.8, 'd': 3.0, 'e': 0.6},
'd': {'c': 0.3333333333333333, 'e': 0.2},
'e': {'c': 1.6666666666666667, 'd': 5.0}}
values = {"a": 1}
for i in ['b', 'c', 'd', 'e']:
for letter in pairs[i]:
if letter in values:
values[i] = values[letter]*pairs[i][letter]
values
导致:
{'a': 1, 'b': 5.0, 'c': 9.0, 'd': 3.0, 'e': 15.0}
这不是最漂亮的,但可以接受。您被否决了,因为您的问题只是要求我们为您编写代码。您需要包括您尝试过的内容、失败的地方等。请参阅。您的数据类型是什么?到目前为止你试过什么?