ShaneSaunders Dijkstra アルゴリズムにおける HeapDescの重要性と、ここでの使用方法を誰かが説明できますか? 一般的に、ダイクストラアルゴリズムがどのように機能するかを知っています。しかし、私は実装でヒープ部分を取得しません。
その大きなコード。したがって、見たい場合はリンクを投稿しています。
ここに行くhttp://www.cosc.canterbury.ac.nz/research/RG/alg/dijkstra.cpp
ShaneSaunders Dijkstra アルゴリズムにおける HeapDescの重要性と、ここでの使用方法を誰かが説明できますか? 一般的に、ダイクストラアルゴリズムがどのように機能するかを知っています。しかし、私は実装でヒープ部分を取得しません。
その大きなコード。したがって、見たい場合はリンクを投稿しています。
ここに行くhttp://www.cosc.canterbury.ac.nz/research/RG/alg/dijkstra.cpp
ダイクストラでは、別の頂点に到達できる最小コストのエッジを提供する効率的なデータ構造が必要です。
ヒープはまさに、一連のエッジを格納し、最小限のコストで効率的にエッジを取得できるデータ構造です。
HeapDesc はおそらくファクトリ デザイン パターンを実装して、さまざまな種類のヒープを作成します。ファイルhttp://www.cosc.canterbury.ac.nz/research/RG/alg/dijkstra.hを確認すると、コンストラクターのヒープ変数がヒープ型のオブジェクトであることがわかります。
工場の設計パターンについては、この記事をご覧ください。 http://en.wikipedia.org/wiki/Factory_method_pattern
ダイクストラのアルゴリズムには、多くの「コストが最も低いパス」ルックアップが含まれます。
最小または最大ルックアップは、ヒープが最適化されているもの ( O(1) ) であり、これが使用される理由です。
それ自体は、ヒープ オブジェクトを割り当てるために使用されるファクトリ メソッドのHeapDesc
ように見えます。
Heap *newInstance(int n) const { return new T(n); }; // from heap.h