[英]Algorithm - Grouping List in unique pairs
我在收到作业时遇到困难,而且我很确定问题的内容是有缺陷的。 我已经将其翻译为:
考虑一个列表x [1..2n],其元素来自{1,2,..,m},m <n。 在Python中提出并实现一种算法,该算法具有O(n)的复杂度,该算法将元素分成成对的((x [i],x [j]对,i <j)对),例如每个元素都成对存在。 对于每对对,计算对的最大和,然后将其与其余对进行比较。 返回具有最小值的集合。
For example, x = [1,5,9,3] can be paired in three ways:
(1,5),(9,3) => Sums: 6, 12 => Maximum 12
(1,9),(5,3) => Sums: 10, 8 => Maximum 10
(1,3),(5,9) => Sums: 4, 14 => Maximum 14
----------
Minimum 10
Solution to be returned: (1,9),(5,3)
令我感到奇怪的是:
表内容的定义它说有1..2n, from {1..m}, m < n
元素1..2n, from {1..m}, m < n
。 但是,如果m < n
,则没有足够的元素来填充列表而不重复某些元素,这是不允许的。 因此,我假设m >= 2n
。 另外,该示例的n = 2
但使用的元素大于1,因此我假设这就是它们的意思。
O(n)复杂度? 那么有没有办法将它们组合成一个循环? 我什么都没想
我的计算:
For n = 4:
Number of ways to combine: 6
Valid ways: 3
For n = 6
Number of ways to combine: 910
Valid ways: 15
For n = 8
Number of ways to combine: >30 000
Valid ways: ?
所以很明显,我不能使用蛮力然后再确定它是否有效。 我用来计算所有可能方式的公式是
C(C(n,2),n/2)
题:
这个问题写错了并且无法解决吗? 如果是这样,应该添加或删除哪些条件才能使其可行? 如果您打算在python中建议一些代码,请记住我不能使用任何类型的预构建函数 。 谢谢
假设排序列表:
def answer(L):
return list(zip(L[:len(L)//2], L[len(L)//2:][::-1]))
或者,如果您想手动进行操作:
def answer(L):
answer = []
for i in range(len(L)//2):
answer.append((L[i], L[len(L)-i-1)]))
return answer
输出:
In [3]: answer([1,3,5,9])
Out[3]: [(1, 9), (3, 5)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.