遍历几乎完全无向加权图的最佳方法

时间:2014-04-22 22:24:15

标签: java algorithm graph graph-algorithm

需要针对以下问题http://acm.ro/prob/probleme/B.pdf的优化解决方案提供帮助。

根据成本,我只使用新边或仅使用来遍历图 旧的边缘,它们都有效,但我需要在有限的毫秒内通过测试, 并且旧边缘的算法正在拖累我。

我需要一种优化方法,欢迎任何建议

编辑:出于安全原因,我正在考虑算法,对不起,我是新人,所以我没有 知道我现在需要做什么才能删除帖子

2 个答案:

答案 0 :(得分:1)

我最初的算法建议依赖于对问题的错误解读。此外,在这个大小的图表上的教科书广度优先搜索或Dijkstra不可能在合理的时间内完成。对于大型案件,您可以采用提前终止的技巧; Niklas B.链接的线程暗示了几个(以及其他一些方法)。我无法找到可以证明有效的早期终止技巧。

然而,这些微优化说明仍然相关:

我建议使用Java的内置Queue容器(或任何其他内置Java容器,用于编程竞赛中的任何其他内容) )。它将您的4字节int转换为精美的Integer结构。这很可能是你爆发的地方。您可以使用500000长int[]来存储队列中的数据,而使用两个整数来代替队列的前端和后端。通常,您希望避免在Java竞赛编程中实例化Object,因为它们的开销很大。

同样,我建议将图表的边缘表示为单个大int[]或500000长int[][],以减少这一开销。

答案 1 :(得分:0)

我只在你的代码中看到一个队列。这意味着您只从一个方向搜索。

您可能需要查看

Bidirectional Search