動的ツリーは、ネットワークフロー、動的グラフ、組み合わせの問題(TarjanおよびWerneckによる「Dynamic Trees in Practice」)や最近の辞書のマージ(Adam Karczmarzによる「A Simple Mergeable Dictionary」)などの問題の解決に重要な役割を果たします。
動的ツリーについては、1983年のSleator&Tarjanの論文「動的ツリーのデータ構造」に記載されている定義を参照します。
- Edward Kmettは、主にC ++の対応物の翻訳として、STツリーのバージョンを実装しました。リンクカットツリーを参照してください。
- クリス・オカサキは、著名な著書「純粋に機能的なデータ構造」に、スプレイツリーの限定的な実装を書いています。
- Ralf HinzeとRoss Patersonは、2〜3本のフィンガーツリーと呼ばれる機能的なデータ構造を導入しましたが、動的ツリーの元の定義とは多少異なる目的があります。
動的ツリーの実装(およびパフォーマンス)は、次の3つのアプローチに従って分割されます。
- ETツリー(オイラーツアー)が重要な役割を果たす線形化。純粋に機能的な研究は見つかりませんでした。
- STツリーが主力であるパス分解では、Kmettのバージョンが見つかりました。
- ツリーの収縮。トップツリー、トポロジツリー、およびRCツリーがプレーヤーです。純粋に機能的な研究は見つかりませんでした。
純粋に機能的な分析と実装は、Splay、AVL、赤黒木で見つけることができますが、それらは動的な木ではありません。前者は後者のシャドウ(仮想または補助とも呼ばれる)データ構造と見なされます。
だから、私の質問は:
関数型プログラミング研究コミュニティが動的ツリーデータ構造に参加しない理由(欠点、弱点)は何ですか?
14
公式意見を形成するための権威ある関数型プログラミングコミュニティ委員会を結成せずにこれにどのように答えることができるかはわかりません。ここで答えられるものがあるように、質問を再定式化することはできませんか?私の知る限り、OPはHaskellなどで動的なツリーを実装し、ここに戻ってやったことを報告する必要があります。
—
アンドレイバウアー
@AndrejBauerの更新:OPは消えて、Haskellで動的ツリーを実装しました:arxiv.org/abs/1908.11105
—
jbapple