繁体   English   中英

算法-唯一对分组列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM