python: gerando partições inteiras

Eu preciso gerar todo opartições de um dado inteiro.
Eu encontrei este algoritmo de Jerome Kelleher para o qual se afirma ser o mais eficiente:

<code>def accelAsc(n):
    a = [0 for i in range(n + 1)]
    k = 1
    a[0] = 0
    y = n - 1
    while k != 0:
        x = a[k - 1] + 1
        k -= 1
        while 2*x <= y:
            a[k] = x
            y -= x
            k += 1
        l = k + 1
        while x <= y:
            a[k] = x
            a[l] = y
            yield a[:k + 2]
            x += 1
            y -= 1
        a[k] = x + y
        y = x + y - 1
        yield a[:k + 1]
</code>

referência:http://homepages.ed.ac.uk/jkellehe/partitions.php

By the way, não é muito eficiente. Para uma entrada como40 Congela quase todo o meu sistema por alguns segundos antes de dar sua saída.

Se fosse um algoritmo recursivo eu tentaria decorá-lo com uma função de cache ou algo para melhorar sua eficiência, mas sendo assim eu não consigo descobrir o que fazer.

Você tem algumas sugestões sobre como acelerar esse algoritmo? Ou você pode me sugerir outra, ou uma abordagem diferente para fazer outra do zero?

questionAnswers(4)

yourAnswerToTheQuestion