私は最近Rich Hickey's interview on Software Engineering Radioに耳を傾けました。インタビュー中RichはClojureのコレクションがツリーとして実装されていると述べました。永続的なデータ構造を別の言語で実装したいと思っており、セットとClojureの他の永続的なデータ構造がどのように実装されているかを理解したいと思います。Clojureのセットの背後にあるデータ構造は何ですか?
次のシナリオでは、各ポイントでツリーはどのように見えますか?
セットを作成します
{1 2 3}
私はどのように理解したい
{1 2 3 4}
と{1}
の違いを作成{1 2 3}
と{4}
の和集合を作成します。 3つのセットが生成される({1 2 3}
,{1 2 3 4}
、および{2 3 4}
)は構造を共有し、どのように「削除」が処理されるかを示します。
また、ノードが持つ可能性のある分岐の最大数についても知りたいと思います。リッチはインタビューで木が浅いと言いました。おそらく分枝因子は2よりも大きいでしょう。
分岐因子は32です。 –
Pedantic note:Rich Hickey _Clojure Data Structures 2_をhttp://www.youtube.com/watch?v=sp2Zv7KFQQ0で聴いたところです。これがどこでいつ記録されたかはわかりません。コレクションにはさまざまなストレージ実装があります。 (デフォルト?)ベクトルは浅いツリーです。他のコレクションには他の実装があるかもしれません。 –
あります。具体的には、ハッシュセット、ハッシュマップ、およびベクトルにはノードあたり32の子があります。 sorted-setとsorted-mapは赤黒の木であり、ノードあたり2つの子があります。 – Chouser