Java 无界背包算法的内存优化
在使用动态规划()的经典无界背包算法解中,我们分配一个背包大小的整数数组来存储最大值Java 无界背包算法的内存优化,java,dynamic-programming,knapsack-problem,Java,Dynamic Programming,Knapsack Problem,在使用动态规划()的经典无界背包算法解中,我们分配一个背包大小的整数数组来存储最大值 如果我有一个10亿大小的背包,如何优化DP解决方案以确保我可以容纳int[]背包阵列?因为Java为1B大小的背包占用的内存=10^9*4Bytes=3.7GB。而不是试图用内存中的所有数据解决这个问题,您必须制定一个使用辅助内存的解决方案,例如访问文件或可能设置数据库。相关:这不是优化DP解决方案的问题,而是找到一个完全不同的解决方案的问题。在Java堆中分配GB内存并非不可能。这里的问题是,Java中最大的
如果我有一个10亿大小的背包,如何优化DP解决方案以确保我可以容纳
int[]背包
阵列?因为Java为1B大小的背包占用的内存=10^9*4Bytes=3.7GB
。而不是试图用内存中的所有数据解决这个问题,您必须制定一个使用辅助内存的解决方案,例如访问文件或可能设置数据库。相关:这不是优化DP解决方案的问题,而是找到一个完全不同的解决方案的问题。在Java堆中分配GB内存并非不可能。这里的问题是,Java中最大的单个阵列限制为2GB。因此,请在web上使用各种BigArray帮助程序类,或者使用数组数组或其他集合类。@JochenBedersdorfer您确定2GB的限制吗?因为我做了新的int[1000000000],这对我来说适用于8g堆。1000000000甚至不是1GB:)限制在Java语言规范中,第10.4章:“数组必须由int值索引”;抱歉,糟糕的英语:索引由MAX_整数(减去一些数字)限制