知っておくべき重要な関数型辞書のデータ構造は何ですか?
高さバランスのとれた二分木とその試行は、あらゆる点で優れた妥協策です。また:
これらのアプローチの長所と短所は何ですか?
高さバランスのとれた二分木とそれらの試行は、アトミックキーの優れた妥協策です。文字列キーなど、シーケンスであるキーの場合も同じです。
パトリシアツリーは数倍速くなりますが、整数キーしか使用できません。
ハッシュの試行は、特に比較よりもハッシュが安く、ポリモーフィズムにオーバーヘッド(例:.NETの文字列)があり、ヒープへのポインターの書き込みが高速(例:JVMやCLRなどのVM)関数型言語ではなく命令型言語用に最適化されています)。ハッシュは、最適化としてミューテーションの内部使用も許可します。
赤黒木は、高さのバランスがとれた木に比べて大きなメリットはありませんが、効率的な結合、交差、差異ができないという大きな欠点があるため、それほど重要ではありません。
同様に、フィンガーツリーは実際にはあまり良くありません。
より命令的なデータ構造を使用するのはいつ意味がありますか?
ディクショナリが1度入力された後、ルックアップのみに使用されたとき、つまり凍結されたとき。
パフォーマンスが必要な場合(.NETのようなまともなハッシュテーブル Dictionary
は、一般的な純粋な関数型辞書よりも通常10〜40倍高速です)。
純粋に機能する弱い辞書が知られていないため、弱い辞書が必要な場合。