Почему следующий код Python выдает ошибку памяти? - PullRequest
0 голосов
/ 24 декабря 2018

Вот код:

import itertools

num_cases = int(input())

answer_list = []

while num_cases>0:
    live_ans = []
    question_list = []
    nums = int(input())
    d1 = int(input())
    d2 = int(input())
    sample_space= {d1, d2}
    temp = []

    no_cases = 2**(nums-1)

    combs = itertools.product(sample_space, repeat = nums-1)

    for i in combs:
        temp.append(i)

    for i in temp:
        if sum(i) not in live_ans:
            live_ans.append(sum(i))
        else:
            pass
    live_ans.sort()
    answer_list.append(live_ans)
    num_cases -= 1

for i in answer_list:
    finalans = " ".join(map(str, i))
    print(finalans)

Для небольших вводов, таких как:

1
3
1
2

Программа работает просто отлично.Где для относительно большего ввода, такого как:

1
58
69
24

Это дает ошибку памяти.Я не привожу никаких причин для этого, так как код не выглядит потребляющим память вообще.Не так ли?

1 Ответ

0 голосов
/ 24 декабря 2018

Посмотрите на следующие строки:

no_cases = 2**(nums-1)
combs = itertools.product(sample_space, repeat = nums-1)
for i in combs:
    temp.append(i)

2 ** 58 = 2.8823038e + 17
Вы посчитаете, почему здесь возникает ошибка памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...