Этот вопрос является продолжением Способы ускорения продукта itertools.product в python, где лучшим ответом было использование алгоритма Звезд и баров. Я использовал реализацию Марка Дикинсона, { ссылка }. Тем не менее, это работает только с неотрицательными числами, как следует из теоремы 2 Звезд и баров.
Есть ли быстрая реализация Звезд и баров python, которая работает с отрицательными числами? В настоящее время я могу переписать его только с использованием 'product' и 'sum'
def partitions(n, k):
for c in it.product(n, repeat=k):
if sum(c) == k: yield c;
#where
#n = range of negative and positive integers, for example -4 to 8 step 1
#k = number of bins, as well as the sum of each row of 'c'