私はある種の連続的なダイクストラである Fast Marching アルゴリズムを実装しています。多くの論文で読んだように、フィボナッチ ヒープはこの目的に最も適したヒープです。
ただし、私のコードを 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_;
「そんなに」時間がかかるのは普通ですか、それともパフォーマンスを改善するためにできることはありますか?
十分な情報が提供されていない場合は申し訳ありません。できるだけ簡潔にしようとしました。必要に応じてさらに情報を追加します。
ありがとうございました!