Звезды и бары с отрицательными и положительными числами - PullRequest
0 голосов
/ 05 апреля 2020

Этот вопрос является продолжением Способы ускорения продукта 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'
...