有一个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)。 –
您可以在http://docs.sympy.org/dev/_modules/sympy/ntheory/partitions_.html中将您的代码与npartitions进行基准测试。 –