Python中括号模型列表的生成算法

2024-10-01 09:18:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个简单的递归函数,它将在Python中生成嵌套列表的列表。最终结果将代表一个单一的淘汰赛等级。我希望创建这样的列表可以让我更容易地生成我需要的东西。这将用于创建锦标赛比赛的模型。在

因此,如果有4名参赛者参加的比赛:

[[1,4],[2,3]]

7人锦标赛:

^{pr2}$

或者是一个8人的锦标赛:

[[[1,8],[4,5]],[[2,7],[3,6]]]

我还没有一个算法类(我希望这个类最终能帮助解决这类问题),所以我不完全确定如何解决这个问题。以下是我目前为止的尝试。在

def decide_rounds(list_to_fill, player_nums):
    if len(player_nums) < 3:
        for num in player_nums:
            list_to_fill.append(num)
        return

    left = []
    decide_rounds(left, ??????) #Tried passing various things to these with no avail.
    list_to_fill.append(left)
    right = []
    decide_rounds(right, ???????)
    list_to_fill.append(right)

任何帮助或解释如何做到这一点将不胜感激!在

编辑:目前我调用的函数如下:

rounds = []
decide_rounds(rounds, range(1, size +1))
print rounds

Tags: toright列表代表leftfillnumlist
1条回答
网友
1楼 · 发布于 2024-10-01 09:18:36

试试这个:

def divide(arr, depth, m):
    if len(complements) <= depth:
        complements.append(2 ** (depth + 2) + 1)
    complement = complements[depth]
    for i in range(2):
        if complement - arr[i] <= m:
            arr[i] = [arr[i], complement - arr[i]]
            divide(arr[i], depth + 1, m)

m = int(raw_input())

arr = [1, 2]
complements = []

divide(arr, 0, m)
print arr

我们注意到,对于一个有2^n个玩家的括号,每一对的总和是相同的数字。对于每一对,右项由左元素和递归深度决定,所以我们可以先生成数组深度。我们记下这些补充,只是为了改进运行时。它适用于任何m > 1,因为一旦补码太大,它就停止递归。在

看到它的行动:http://ideone.com/26G1fB

相关问题 更多 >