Существует определенное число C (C - целое число) и дается список чисел (назовем его N, все числа в списке N являются целыми числами). Моя задача состоит в том, чтобы найти количество возможностей для представления C.Оптимизация кода - количество комбинаций
Например:
вход:
C = 4
N = [1, 2]
выход:
3
Потому что:
4 = 1 + 1 + 1 + 1 = 1 + 1 + 2 = 2 + 2
Мой код работает очень хорошо для небольших чисел. Однако я понятия не имею, как я могу оптимизировать его, чтобы он работал и для больших целых чисел. Любая помощь будет оценена!
Существует мой код:
import numpy
import itertools
def amount(C):
N = numpy.array(input().strip().split(" "),int)
N = list(N)
N = sorted(N)
while C < max(N):
N.remove(max(N))
res = []
for i in range(1, C):
for j in list(itertools.combinations_with_replacement(N, i)):
res.append(sum(list(j)))
m = 0
for z in range (0, len(res)):
if res[z] == C:
m += 1
if N[0] == 1:
return m + 1
else:
return m
Здесь действительно нет необходимости в numpy. Во всяком случае, это замедлит вас. И вы все равно превращаете его в «список». Это бессмысленно. –
Вы, кажется, хотите считать разделы: см. Https://en.wikipedia.org/wiki/Partition_(number_theory). –
Вы можете сравнить свой код с npartitions в http://docs.sympy.org/dev/_modules/sympy/ntheory/partitions_.html. –