当前位置: 首页 > 面试题库 >

防止itertools.permutation中的内存错误

邓德惠
2023-03-14
问题内容

首先,我想提一下,我有一个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将仅将当前使用的排列保留在内存中,而不是所有排列(就内存使用而言,这确实更好;))

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



 类似资料:
  • 问题内容: 我正在设计一个Web应用程序,该应用程序旨在显示一堆使用AJAX定期更新的数据。一般的使用场景是用户将整天保持打开状态,然后不时浏览一下。 我遇到的问题是浏览器的内存占用量随时间缓慢增长。Firefox和IE 7(尽管不是Chrome)都在发生这种情况。几个小时后,它可能导致IE7占用约200MB的内存,而FF3导致占用约400MB的内存。 经过大量测试,我发现只有在响应AJAX调用时

  • 问题内容: 我们知道node.js为我们提供了强大的功能,但强大的功能带来了巨大的责任。 据我所知,V8引擎不进行任何垃圾收集。因此,我们应该避免什么最常见的错误,以确保没有内存从节点服务器泄漏。 编辑: 对不起,V8确实具有强大的垃圾收集器。 问题答案: 据我所知,V8引擎不进行任何垃圾收集。 V8内置了强大而智能的垃圾收集器。 您的主要问题是不了解闭包如何维护对外部函数的范围和上下文的引用。这

  • 问题内容: 在我的应用中,我经常调用一个返回json字符串的外部api。 但是在某些情况下 PHP致命错误:内存中已耗尽xxx字节(尝试分配32字节)的内存大小… 我无法控制外部API,当然可以增加php的内存,但这有一些缺点。 1-无论我设置的大小,仍然可能太小。2-如果将内存大小设置为“ infinite”(无限),则可能会导致服务器被杀。 理想情况下,我想在调用json_decode(…)之

  • 我正在使用org.AsynchTtpClient发布异步请求。 在关闭tomcat时,我得到了以下日志: 严重:web应用程序[/test]似乎启动了一个名为[pool-1-thread-1]的线程,但未能停止它。这很有可能造成内存泄漏。 2017年7月4日10:53:00 AM org.apache.catalina.loader.webappclassloaderbase clearRefer

  • 问题内容: 我在Java中的总的初学者和已经创建了一个简单的Java的Android片断其中一个Runnable 1,5秒钟后,我改变从到。它工作正常,基本上应该防止这种内存泄漏发生吗?我怀疑在发生设备定向时是否绝对没有内存泄漏。我很乐意对此进行检查,但无法在模拟的Android中更改方向。 这是代码: 编辑 它可以防止内存泄漏,但也有一些答案与UI线程阻塞有关。实际上,此代码在主(UI)线程中运

  • 我刚刚意识到,当只有一个消费群体存在时,XACK不会自动删除消息。 我以为当所有的消费者组都收到相同的消息时,消息会被Redis-server删除,但似乎不是这样。 因此,Redis流内存无限增加,因为没有消息会被删除。 也许防止这种情况的唯一方法是手动发送XDEL消息?但我怎么知道所有的消费者群体都接受了这个信息呢? 需要一些帮助,谢谢!