我正在实现快速行进算法,这是某种连续的 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_;
花费“那么多”时间是否正常,或者我可以做些什么来提高性能?
抱歉,如果没有提供足够的信息。我尽量简短。如果需要,我会添加更多信息。
谢谢!