我们正在开展一个小型学校项目,用Floyd-Warshall在java中实现算法(我们不能再使用另一个)。
该算法运行良好,我们使用cost数组作为Floyd-Warshall算法的输入。
老师有5个要检查的文件,我们传递了4个但是第5个是一个15000个顶点的数组,这意味着15000 * 15000个整数的数组。
Java因内存而拒绝使用它。你知道如何通过这个吗?
Thx
答案 0 :(得分:3)
嗯,在最坏的情况下,算法的空间复杂度是Θ(n^2)
,在最坏的情况下你没有太多可以做的。
但是,通过使用sparse matrix实现而不是2-d数组,您可以针对某些特定情况对其进行优化,其中图形非常稀疏,并且有很多对(v1,v2)从v1
到v2
没有路径(没有路径!不仅是边缘)。
除此之外,你基本上只能increase the jvm's heap memory。
答案 1 :(得分:1)
检查您的阵列是否使用足够大的最小数据类型来保存最大路径长度。
同时检查您是否正在使用未装箱的原语(即使用int而不是java.lang.Integer),因为这可能(可能)更快并且使用更少的内存。