【发布时间】:2013-12-03 16:43:39
【问题描述】:
我需要解决一个Dynamic Programming 问题,为此我需要在内存中创建一个N*N 大小矩阵。如果我确实创建了一个byte[][] 的矩阵,大小为N = 100000;,那么它会抛出java.lang.OutOfMemoryError: Java heap space 错误。
在这个矩阵中,我将在特定的 ith 和 jth 索引处存储 0 或 1。所以我的使用仅限于一点,我需要一种方法,以便我可以只使用每个矩阵单元的 1 位大小,而不是过度淹没内存,将 8 位保留在一个只需要 1 位的单元中。
我怎样才能做到这一点?
请注意,我关心的不是增加 JVM 堆,我只是在寻找一种方法来优化解决动态问题。
【问题讨论】:
-
说明问题本身。
-
对于大多数 DP 算法,您不需要存储整个网格,只需存储最后一行左右即可。
-
只是最后一行?但是如果您需要返回查看以前的结果怎么办?
-
对于某些问题,这样做肯定是不可能的,如果你想要实际的解决方案而不是数值,你可能需要整个网格。这只是要记住的事情。 (由于您没有具体说明实际问题,我们无法告诉您是否可能)。
标签: java algorithm memory matrix dynamic-programming