9

Haskell で Dijkstra のアルゴリズムを実装しようとしています。ツリーを使用してバイナリ ヒープを既に実装しています。アルゴリズムでは、現在の頂点の隣接キーをヒープで更新する必要があります。Haskellのヒープ内の値へのポインタをエミュレートするにはどうすればよいですか? 各操作の後にヒープが変更されているときに、ヒープ内の要素にすばやくアクセスするにはどうすればよいですか?

4

3 に答える 3

12

変更可能な参照へのアクセスを提供するパッケージData.IORefおよびData.STRefを確認してください。IO も実行する必要がある場合は IORefs を使用し、そうでない場合は STRefs を使用します。

しかし、私の疑いは、おそらくあなたが間違ったことをしているということです。可変状態なしでダイクストラのアルゴリズムを実装することは完全に可能です (ただし、キャッシュできる関数評価を継続的に再計算している場合、漸近的な実行時間が簡単に爆発する可能性があるため、少し注意する必要があります)。

于 2012-06-27T09:33:03.427 に答える
0

おそらくvectorパッケージからData.Vector.Mutableを探しており、これをSTまたは IO モナドと組み合わせたいと思うかもしれません。

于 2012-07-05T17:01:57.070 に答える
0

調整操作をサポートするData.FingerTree.PSQueueを使用して、ヒープを更新できます。この場合、キーを介して値を更新するため、ヒープ内の値へのポインターは必要ありません。

于 2012-07-05T23:12:15.797 に答える