python - 防止 itertools.permutation 中的内存错误

标签 python python-itertools

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

我正在研究一种算法,该算法在节点上的时间呈指数级,因此我在代码中有它

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

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

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

有没有更简单的实现方式,通过它我可以生成顶点的所有组合并且没有这个错误。

最佳答案

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

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

for item in perm_iterator:
   do_the_stuff(item)

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

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

关于python - 防止 itertools.permutation 中的内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503388/

相关文章:

python - 如何使用生成器中的值填充 2D Python numpy 数组?

python - 在 Python 中按元素总和对组合进行排序

python - 同时从列表中获取两个元素

python - 数据帧 : each column in different plot in subplot

python - buildbot 使用什么算法将构建器分配给奴隶?

python - 将数据从 jquery success 填充到模态时出现问题

python - 如何在 Python 中检查对象具有的方法?

python - 我如何 "multi-process"itertools 产品模块?

python - 使用多处理的并行计算 combination_with_replacement

php - 将 PHP 应用程序重写为 Python 是一个富有成效的步骤吗?