在itertools.permutation中防止内存错误

时间:2011-06-28 08:01:55

标签: python itertools

首先,我想提一下,我有一个3 GB的ram。

我正在开发一种在节点上呈指数级的算法,所以我在代码中有这个

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

生成列表中顶点的所有组合,然后我可以处理其中一个排列。

但是,当我运行40个顶点的程序时,它会产生内存错误。

在实现中是否有任何更简单的方法,通过它我可以生成顶点的所有组合而不会出现此错误。

2 个答案:

答案 0 :(得分:18)

尝试使用由排列生成的迭代器,而不是使用它重新创建列表:

perm_iterator = itertools.permutations(list(graph.Nodes))

for item in perm_iterator:
   do_the_stuff(item)
通过这样做,python将仅在内存中保留当前使用的排列,而不是所有排列(在内存使用方面,它确实更好;)

另一方面,一旦内存问题得到解决,处理所有排列的时间将随着顶点的数量呈指数增长....

答案 1 :(得分:4)

它无效。循环遍历迭代器也不起作用。你看,如果for循环中的代码运行需要1微秒,那么完全运行需要2.587×10 ^ 34年。 (见http://www.wolframalpha.com/input/?i=40%21+microseconds+in+years