【发布时间】:2011-06-28 08:01:55
【问题描述】:
首先我想提一下我有一个 3 GB 的内存。
我正在研究一种算法,它在节点上的时间是指数的,所以我在代码中拥有它
perm = list( itertools.permutations(list(graph.Nodes))) # graph.Nodes is a tuple of 1 , 2 , ... n integers
它生成列表中所有顶点的组合,然后我可以处理其中一个排列。
但是,当我为 40 个顶点运行程序时,它会出现内存错误。
在实现中有没有更简单的方法可以生成顶点的所有组合并且不会出现此错误。
【问题讨论】:
-
作为侧边栏,内存错误的原因是这样的:wolframalpha.com/input/?i=40%21+bytes+in+gigabyte
-
perm将包含 815915283247897734345611269596115894272000000000 (40!) 40 个项目的列表。 -
你知道有多少顶点组合吗?你打算如何处理所有的组合?您可以避免一次全部存储它们,但如果您真的需要考虑每种组合,则无法保证在您完成时宇宙存在......切换到 C 也无济于事。
-
真正的算法是什么——你想做什么? “指数”时间通常表示 O(2^N);在这里,我们有 O(N!),这要糟糕得多。
-
是的,所以我正在处理一些订购问题,到目前为止还没有其他解决方案:) ...无论如何,非常感谢