【发布时间】:2014-03-14 22:33:36
【问题描述】:
我正在实现快速行进算法,这是某种连续的 Dijkstra。正如我在许多论文中所读到的,斐波那契堆是最适合此目的的堆。
但是,当使用 callgrind 分析我的代码时,我发现以下函数占用了 58% 的执行时间:
int popMinIdx () {
const int idx = heap_.top()->getIndex();
heap_.pop();
return idx;
}
具体来说,pop() 占用了整个执行时间的 57.67%。
heap_定义如下:
boost::heap::fibonacci_heap<const FMCell *, boost::heap::compare<compare_cells>> heap_;
花费“那么多”时间是否正常,或者我可以做些什么来提高性能?
抱歉,如果没有提供足够的信息。我尽量简短。如果需要,我会添加更多信息。
谢谢!
【问题讨论】:
-
感谢您的评论。我已经看到那个帖子了,我并没有从中得到太多的清楚。我已经用自我实现的堆测试了我的代码,它甚至更慢。目前的表现还不错,就是担心做错什么。
标签: c++ boost fibonacci-heap