Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 订购具有已知对距离的项目_Python_Algorithm_Sorting - Fatal编程技术网

Python 订购具有已知对距离的项目

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、d、e)的子集之间的相对距离是已知的。子集的大小是有限的,尽管我希望收到所有带有分数的项目的最终订单。例如:

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}

这不是最漂亮的,但可以接受。

您被否决了,因为您的问题只是要求我们为您编写代码。您需要包括您尝试过的内容、失败的地方等。请参阅。您的数据类型是什么?到目前为止你试过什么?