Java中的Floyd Warshall,具有15000个顶点的矩阵

时间:2014-05-28 15:41:34

标签: java algorithm matrix floyd-warshall

我们正在开展一个小型学校项目,用Floyd-Warshall在java中实现算法(我们不能再使用另一个)。

该算法运行良好,我们使用cost数组作为Floyd-Warshall算法的输入。

老师有5个要检查的文件,我们传递了4个但是第5个是一个15000个顶点的数组,这意味着15000 * 15000个整数的数组。

Java因内存而拒绝使用它。你知道如何通过这个吗?

Thx

2 个答案:

答案 0 :(得分:3)

嗯,在最坏的情况下,算法的空间复杂度是Θ(n^2),在最坏的情况下你没有太多可以做的。

但是,通过使用sparse matrix实现而不是2-d数组,您可以针对某些特定情况对其进行优化,其中图形非常稀疏,并且有很多对(v1,v2)从v1v2没有路径(没有路径!不仅是边缘)。

除此之外,你基本上只能increase the jvm's heap memory

答案 1 :(得分:1)

检查您的阵列是否使用足够大的最小数据类型来保存最大路径长度。

同时检查您是否正在使用未装箱的原语(即使用int而不是java.lang.Integer),因为这可能(可能)更快并且使用更少的内存。