Haskellで既製のキュー実装がいくつか用意されているようです。たとえば、あります:純粋なプライオリティキューデータのように見えるどちらも Haskellでの優先度キュー実装の比較
(hackage上pure-priority-queue-0.14中)
- Data.PriorityQueue.FingerTree構造。前者は私が慣れていないデータ構造である指の木に基づいています。後者はData.Mapのラッパーです。 1は自明のプライオリティキューを作ることができ、そこから純粋に機能的なヒープデータ構造を定義します(hackage上heap-1.0.0中)
- Data.Heap
もあります。 。 (hackageにmeldable-heap-2.0.3に)も
- Data.MeldableHeap(hackage上heaps-0.2中)
- Data.Heapあります両方Brodal/Okasakiデータを使用して純粋に機能meldableヒープを実装
私は、非純粋な機能土地の二項ヒープデータ構造に類似していると信じています。
(ああ、と
はData.PriorityQueue(hackage上のプライオリティキュー-0.2.2で)その機能は私には不明である
が、関連しているように見えるが
- もありますモナドに付いているプライオリティキューを構築し、Data.Mapの上に構築されているようだ。この質問では、純粋に機能的なプライオリティキューが関係しているので、priority-queue-0.2.2パッケージは無関係だと思うしかし、私が間違っている場合は私を修正してください!)
私が構築しているプロジェクトのための純粋な機能の優先順位キューのデータ構造が必要です。 hackageによって提供されるembarrassment of richesの間で誰かが知恵の言葉を提供できるかどうか疑問に思っていました。具体的には:
- 従来の優先度の高いキューインサート操作と抽出操作を、機能的にも変更不可能なプレゼンテーションでもしたいとします。上記のパッケージの長所と短所は何ですか?誰もが "怒りの中で彼らのいずれかを使用して経験を持っていますか?パフォーマンスのトレードオフは何ですか?信頼性?どちらが他人によって広く使われていますか? (それらを使用すると、他の人が読むのが楽になるかもしれません。ライブラリに慣れ親しむ可能性が高いからです。)それらの間で決定する前に知っておくべきことは他にありますか?
- また、優先キューの効率的なマージが必要な場合はどうしますか? (私はこのプロジェクトではありませんが、これを追加すると思っていましたが、将来の読者にはSOの質問をより有用にするでしょう)
- 私が逃した他の優先キューパッケージはありますか?
"指の木、私が慣れていないデータ構造"私は非常に紙http://www.soi.city.ac.uk/~ross/papers/FingerTree.htmlを読むことをお勧めします:それは非常にです明確に書かれており、データ構造は広く有用である。優先キューは、特に、他のアプリケーションの中で論じられている。 –
私は 'priority-queue-0.2.2'の著者です。これはハスケルの私の非常に初期の努力の1つであり、実際に見つかったことはありませんし、そのバージョンの問題については通知されていませんが、他の人たちと同様に考え抜かれています。その目的は実際にIORef、STRef、et al。 State/StateTで "純粋な"インターフェースを使用することができますが、そこに他にもたくさんのオプションがある場合(本当に "MinView"と "maxView"を持つ単純な "Map" ' 機能)。 – mokus