需要针对以下问题http://acm.ro/prob/probleme/B.pdf的优化解决方案提供帮助。
根据成本,我只使用新边或仅使用来遍历图 旧的边缘,它们都有效,但我需要在有限的毫秒内通过测试, 并且旧边缘的算法正在拖累我。
我需要一种优化方法,欢迎任何建议
编辑:出于安全原因,我正在考虑算法,对不起,我是新人,所以我没有 知道我现在需要做什么才能删除帖子答案 0 :(得分:1)
我最初的算法建议依赖于对问题的错误解读。此外,在这个大小的图表上的教科书广度优先搜索或Dijkstra不可能在合理的时间内完成。对于大型案件,您可以采用提前终止的技巧; Niklas B.链接的线程暗示了几个(以及其他一些方法)。我无法找到可以证明有效的早期终止技巧。
然而,这些微优化说明仍然相关:
我建议不使用Java的内置Queue
容器(或任何其他内置Java容器,用于编程竞赛中的任何其他内容) )。它将您的4字节int
转换为精美的Integer
结构。这很可能是你爆发的地方。您可以使用500000长int[]
来存储队列中的数据,而使用两个整数来代替队列的前端和后端。通常,您希望避免在Java竞赛编程中实例化Object
,因为它们的开销很大。
同样,我建议将图表的边缘表示为单个大int[]
或500000长int[][]
,以减少这一开销。
答案 1 :(得分:0)