gpt4 book ai didi

python - Python中生成支架模型列表的算法

转载 作者:太空狗 更新时间:2023-10-29 21:43:52 24 4
gpt4 key购买 nike

我正在尝试制作一个简单的递归函数,它将在 Python 中生成一个嵌套列表的列表。最终结果将代表单场淘汰锦标赛。我希望创建这样的列表可以让我轻松生成所需的内容。这稍后将用于创建锦标赛比赛的模型。

所以如果有一个 4 人参加的锦标赛:

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

7 人锦标赛:

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

或者 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

最佳答案

试试这个:

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

关于python - Python中生成支架模型列表的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com