【发布时间】:2014-04-08 12:34:07
【问题描述】:
我现在这是一个被问过很多次的问题。但是,我找不到针对我的具体问题的解决方案。
我已经在 C++11 和两个不同的变体中实现了快速行进方法(非常类似于 Dijkstra):斐波那契堆和二进制堆。为此,我使用了 Boost 1.55 堆实现(Fibonacci 和 D_ary,D=2)。
预计二进制堆在小型网格中更快,而斐波那契在大型网格中更快。但是,二叉堆总是更快(并且存在“巨大”差异)。例如:
200x200 grid:
Binary: 16 ms
Fibonacci: 24 ms
300x300 grid:
Binary: 38 ms
Fibonacci: 50 ms
500x500 grid:
Binary: 113 ms
Fibonacci: 148 ms
1000x1000 grid:
Binary: 504 ms
Fibonacci: 642 ms
我在 G++ 4.8 中使用-Ofast -fno-finite-math-only 标志。
重点是我可以保证几周前完全相同的实现返回了预期的结果。
有人可以帮我解释一下吗?
谢谢!
【问题讨论】:
-
你想要任何特定的部分吗?代码有点长。
-
好吧,我只是不确定是否有人可以回答您的问题,没有代码,但声称“几周前完全相同的实现返回了预期的结果”。你希望我们做什么?
-
也许有人有类似的问题。也许 G++ 优化标志可以比斐波那契堆更优化 D_ary 堆......只是为了知道这样的事情。我知道这个问题有点奇怪,特别是你提到的说法。这就是我问的原因。
-
好吧,谢谢你的反对。实际上我找到了答案,并且问题中给出的信息足以解决它,因为它与计算问题有关,而不是与代码有关。
标签: performance c++11 boost binary-heap fibonacci-heap