2017-10-02 3 views
0

私は自分の鍵となると思う一意のIDを持つ各文字列を10k文字列のデータベースに格納するためのB-Treeを研究しています。しかし、私が見たすべての実装は、値ではなくBツリーのキーだけを表示します。私はB-Treeがマップとして機能するときに値をキーにリンクしなければならないと確信していますが、ツリーのノード内にキーとともに格納されているかどうかはわかりません。例えば。Bツリーキーの値はどこに保存されていますか?

 ||key3| |key6|| 
    /  |   \ 
    / ||key4| |key5|| \ 
/      \ 
||key1| |key2||   ||key7| |key8|| 

 ||k3,v3| |k6,v6|| 
    /  |   \ 
    / ||k4,v4||k5,v5|| \ 
/      \ 
||k1,v1| |k2,v2||   ||k7,v7| |k8,v8|| 

私がどこでどのように値が格納されていることを確認していません。

答えて

0

すべての単一ノードでは、内部およびリーフの両方にキーがあります。

B +ツリーでは、すべてのキーがリーフノードで使用できます。だから、葉ノードを分割する場合は、親にキーを押してもらうだけで、自分の値を保持することができます。しかし、Bツリーではキーが繰り返されないので、内部ノードに値を持たなければなりません。

キー値マップを使用して、ツリー固有の機能のキーを反復することができます。キーを並べ替える必要があるので、JavaのTreeMapやC++の単純なstd :: mapなどのソートされたマップを使用する必要があります。 (Pythonには標準ライブラリのようなものはありません)。ノードを簡単に分割し、新しいノードに物事をプッシュするのにも役立ちます。

+0

だから、もし10Kの文字列を保存したいのであれば、各セットはおよそ10の単語を持ち、単語の1つは一意のIDです、2番目の表現はB-Treeを構築するのに正しいですか?はいソートされた実装を楽しみにしています。ノード内でSortedHashMapを使用してキーを格納することはできますか?メインメモリではなく、ファイルのような外部メモリに格納された情報のためにB-Treeを構築することを理解するための視覚化を指摘できますか? – djay

+0

IMO、2番目の表現は正しいです。SortedHashMapについて聞いたことがありません、どの言語について話していますか?私が知る限り、ハッシュマップをソートすることは不可能です。視覚化のため、https://www.cs.usfca.edu/~galles/visualization/BTree.html。私たちはそれを使って教えられました。 –

+0

by SortedHashMap、私は疑問を指摘しています。私はBツリーノードをソートされた順序で格納することはできますか?昇順であるが、キーは、長さが20以上の長い整数であるため、ハッシングを行う必要があります。もう一つはTreeMapを見ていました。私はハッシュを除いて前に言った。 – djay

関連する問題