11

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

我正在研究一种在节点上呈指数增长的算法,因此我在代码中有

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

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

但是,当我为 40 个顶点运行程序时,它会出现内存错误。

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

4

2 回答 2

29

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

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

for item in perm_iterator:
   do_the_stuff(item)

通过这样做,python 将仅在内存中保留当前使用的排列,而不是所有排列(就内存使用而言,它确实更好;))

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

于 2011-06-28T08:06:35.447 回答
4

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

于 2011-06-28T08:16:31.217 回答