私は、要素の順序付きリストを格納するHaskellデータ構造を探しています。これは、リスト内の任意の場所にある要素のペアをスワップする際に時間効率が良いことです。明らかに、[a]
ではありません。スワップは新しいベクトルを作成するので、Vector
ではありません。どのデータ構造が効率的ですか?要素を交換するのに有効なHaskellのデータ構造ですか?
答えて
ハスケルは(ほとんど)純粋な関数型言語なので、更新するデータ構造は構造体の新しいコピーを作る必要があり、データ要素を再利用することはできる限り最善の方法です。また、新しいリストは遅れて評価され、データが必要になるまで通常は背骨だけを作成する必要があります。要素数に比べて更新回数が少ない場合は、最初に疎な一連の更新を確認し、元のベクトルのみを調べる差分リストを作成することができます。
Data.Sequence
containers
パッケージは、このユースケースではじまる恐ろしいデータ構造ではないでしょう。
O(1)アップデート(追加、プリペア、カウント、スライシング)を示す永続データ構造の最も効率的な実装は、Array Mapped Trieアルゴリズムに基づいています。 ClojureとScalaのVectorデータ構造は、例えばそれに基づいています。私が知っているそのデータ構造の唯一のHaskellの実装は、the "persistent-vector" packageです。
このアルゴリズムは非常に若く、2000年に初めて発表されたばかりであり、多くの人がそれを聞いたことがない理由です。しかし、このことはまもなくハッシュテーブルに適応された普遍的な解決策であることが判明しました。このアルゴリズムの適合バージョンは、ハッシュ・アレイ・マッピング・トライと呼ばれる。これは、ClojureとScalaでSetとMapのデータ構造を実装するためにも使用されています。また、Haskellでは、"unordered-containers"と"stm-containers"のようなパッケージを使って、より遍在しています。
私は、以下のリンクをお勧めアルゴリズムについて詳しく知ることができます。
- 1. Haskell:メモリブロックを効率的にモデル化する純粋なデータ構造ですか?
- 2. Haskellの厳密なデータ構造のライブラリ
- 3. Perl:複雑なデータ構造の要素を計算する
- 4. Haskell - 2つのリストから要素を交互に返す
- 5. 交換可能な文字列を保持するためのデータ構造
- 6. 回線交換のためのデータ構造?
- 7. 最も頻繁な要素をキャッシュするデータ構造
- 8. XMLをHTMLに変換する、同じ要素値の複数の構造から要素をフィルタリングする
- 9. JACOBライブラリの有効なCOM構造体とは何ですか?
- 10. マップ要素を交換する方法
- 11. デルファイデザインのアイデア - 必要なデータ構造データ
- 12. ランダム要素を選択するためのデータ構造ですか?
- 13. セレン:私は、次のHTML構造を有する間接的な兄弟要素
- 14. "オブジェクトの有効期限"を持つオブジェクトキャッシュのデータ構造
- 15. リーダーボードの効率的なデータ構造
- 16. Zobristキーの効率的なデータ構造
- 17. セットから最も近い要素を効率的に検索するためのデータ構造
- 18. JS/jQueryでDOM要素のイベントを有効/無効にする
- 19. Scalaの「構造型メンバーメソッドのリフレクションアクセスを有効にする...」とは何ですか?
- 20. ソフトウェアトークンはマルチファクタセキュリティの第2の有効な要素ですか?
- 21. 動的要素リストのフォーム要素を有効にします
- 22. 同じアドレスのC構造割当は有効ですか?
- 23. 構造体への参照のプロパティ構文を有効にしますか?
- 24. Haskellプログラムの基本構造
- 25. 構造化Haskell(gtk2hs)GUIの
- 26. nodeIndexはIEの有効なDOM要素プロパティですか?
- 27. 有効なHTMLとTD要素の数
- 28. C:構造体内の構造体要素へのポインタ
- 29. Pythonのデータ交換ですか?
- 30. Safariでカスタムフォーム要素のタブナビゲーションを有効にするには
を[A]要素操作で非常に効率的であるリンクリストです。問題が効率的なインデックス作成である場合、ソリューションは実際のユースケースに依存します。おそらく[ジッパー](https://wiki.haskell.org/Zipper)が役立ちますか? –
['Data.Vector.Mutable'](https://hackage.haskell.org/package/vector-0.11.0.0/docs/Data-Vector-Mutable.html)について質問していますか? – Bakuriu
また、[Ropes](https://en.wikipedia.org/wiki/Rope_%28data_structure%29) –