Prevenir error de memoria en itertools.permutation

En primer lugar me gustaría mencionar que tengo un ram de 3 gb.

Estoy trabajando en un algoritmo que es exponencial en el tiempo en los nodos, por lo que tengo en el código.

perm = list( itertools.permutations(list(graph.Nodes))) # graph.Nodes is a tuple of 1 , 2 , ... n integers 

que genera todas las combinaciones de vértices en una lista y luego puedo trabajar en una de las permutaciones.

Sin embargo, cuando ejecuto el progtwig para 40 vértices, da un error de memoria.

¿Existe alguna forma más sencilla de implementación a través de la cual yo pueda generar todas las combinaciones de los vértices y no tener este error?

Intente usar el iterador generado por las permutaciones en lugar de volver a crear una lista con él:

 perm_iterator = itertools.permutations(list(graph.Nodes)) for item in perm_iterator: do_the_stuff(item) 

Al hacer esto, Python mantendrá en la memoria solo la permutación utilizada actualmente, no todas las permutaciones (en términos de uso de memoria, es realmente mejor;))

Por otro lado, una vez resuelto el problema de la memoria, el tiempo para tratar todas las permutaciones crecerá exponencialmente con el número de vértices …

No funcionara Bucear sobre un iterador tampoco funcionará. Verás, si el código en el bucle for tarda 1 microsegundo en ejecutarse, tardará 2.587 × 10 ^ 34 años en ejecutarse por completo. (Consulte http://www.wolftwiglpha.com/input/?i=40%21+microseconds+in+years )