簡體   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