(itertools.combinations) Python Shell 挂起大于特定数量大小并抛出内存错误

(itertools.combinations) Python Shell hangs in a bigger than specific amount size and throws memory error

我正在尝试 运行 一个特定的代码来查找来自 .in 文件的列表的所有可能组合的总和。相同的代码,当 运行 相对较小的文件时,运行s 完美地和更大的文件挂起并在一点之后抛出 MEMORY ERROR

import itertools

file = open("c_medium.in","r")
if file.mode=='r':
    content = file.readlines()
    maxSlices,numberOfPizza = map(int,content[0].split())
    numberOfSlices = tuple(map(int,content[1].split()))
    print(maxSlices)
    print(numberOfSlices)
    sol = []
    sumOfSlices = []
    for x in range(1,len(numberOfSlices)+1):
        print(x)
        for y in itertools.combinations(numberOfSlices,x):
            if sum(y) <= maxSlices:
                sumOfSlices.append(sum(y))
    sumOfSlices.sort()
    print(sumOfSlices)
    checkSum = sumOfSlices[len(sumOfSlices)-1]
    print(checkSum)
    found = False
    if found == False:
        for x in range(1,len(numberOfSlices)+1):
            print(x)
            for y in itertools.combinations(numberOfSlices,x):
                if found == False:
                    if sum(y) == checkSum:
                        for z in y:
                            sol.append(numberOfSlices.index(z))
                        found = True
    solution = tuple(map(str,sol))
    print(solution)

N个元素的number of combinations随着N的增长非常非常快

特别是关于您的代码,如果 (sum(y) <= maxSlices) 始终为真,那么您将生成一个包含 2^(numberOfSlices) 元素的列表。即,如果 numberOfSlices=32.

,您将溢出 32 位整数

我建议您尝试在不明确构建列表的情况下解决您的任务。如果您描述了您的代码在做什么,也许有人可以提供帮助。