(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 位整数
我建议您尝试在不明确构建列表的情况下解决您的任务。如果您描述了您的代码在做什么,也许有人可以提供帮助。
我正在尝试 运行 一个特定的代码来查找来自 .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
.
我建议您尝试在不明确构建列表的情况下解决您的任务。如果您描述了您的代码在做什么,也许有人可以提供帮助。