ノードの分析を削除HashMap1.8

クリエイティブコモンズライセンス 著作権:帰属、紙ベースを作成するために他人を許可し、(同じライセンスで元のライセンス契約に基づいて用紙配布する必要がありますクリエイティブコモンズ

HashMapのは、ノードを削除します

  私は上のそれ以外のリンクリストを使用し、赤黒木に8よりもノード数が大きいノードHashMapを、追加、および方法であるが、我々はそれを削除したノードの処理ロジックを見ているかどうかを心配していますか?今日、私たちはパン内のノードのフラッシュを削除HashMapのを見てみましょう

 

問題の原因

  HashMapのソースを表示すると、次のフィールドがあり、削除されたとき、6未満の時まで、それは(リンクリストにツリーを)untreeifyingなり、ノードの数を決定し、方法)のみ分割(、あなたはこのフィールドをクリックするとことがわかりました削除されたノードに関係なく、サイズ変更()メソッドを使用して使用されるが、スプリット()メソッドは、その後、削除ノード・コード・ロジックを介して見えます

 

  

ノードを削除します。

  removeメソッドにより、すべての方法では、ノードを削除する場所を見つけます。図は次のとおりです。

   

私たちは、removeTreeNode方法を入力して次のように、コードは次のとおりです。

  

 

導入されたコメントの方法を、見る:ノードが小さすぎる場合、現在のビンは、通常のビンに変換されます。ノートには、私たちは、この方法のみ変換で場所を入力し、それは問題ではありません理解していません。次を表示するuntreeify()メソッドを入力します。コードは以下の通りであります:

  

他には、ああ、これは返します(これらのメソッドはので、これは動作するように、現在のTreeNodeノードで、注意を払ってください、メソッド内のTreeNodeクラスです)のリストを取得することで、見て、あればああ、最初の行を見てください。このことを理解し、この方法は、赤黒木のリストに変換する、そして私は、分析を行う方法を分析する必要がありますが、定義されたグローバル変数を使用していません。

 

判決の論理的分析を削除します。

  

  のは、このuntreeify()の要件に、このロジックを上記の分析を分析してみましょうで、根== nullで、root.right == nullで、root.left == NULL、NULL ==はroot.left.left 4例を、我々赤黒木は7つのノードを分析するために、Aはルートノードです。

 

  

  したがって、このメソッドに次のような場合、私たちノードの要件を満たすようにする際、分析する1の数があります。(ここではデフォルトでは、彼らは5赤黒木の特性、主に黒のバランスを知っていると思います)

 

  これらの4つの条件が満たされた場合には上図のように、我々はそれが7であってもよく、最大ノード数を確認することができます。(以上8赤黒木になりますので、より大きい8は、考慮されていません)。

    1.状況ノードまで:我々は、ノードDを削除すると、のみroot.left.leftを満たすため== nullこの条件を、ツリーは依然としてノード6の最大数次いで、赤黒木の特性を維持することができます。

    2.最小のノードの場合:EFGは、任意のノードを削除し、存在しない、のルールA、B、C、Dの上記4種類のいずれかを満たすことになります。ノードの最小がある場合、3つのノードがあります。

  すべての上記のリストは、ノードが3 <=ノードであるツリーに変換する<= 6、リンクされたリストに変換することができる、ノードの数が6未満である場合に、見ることができるではなく、絶対に、そう使用定義された変数(固定数6)が正しくありません。ノードの動的な数は裁判官に介して取得しなければなりませんでした。

理由節点解析の数  

  なぜそれが6未満の時にリストに変換することができる、以上8は赤黒木に変換したとき?

    主にクエリノードの分析時間を通じて、クエリログ(N)、およびリストのための赤黒木までの平均時間は、O(N)であり、平均はO(N)/ 2です。

    ノードの数が8である場合、赤黒木クエリ時間2、時間クエリのリストである:4クエリ効率が赤黒木リストよりも大きい場合に、見ることができます。(二つの関数曲線の問題、ノードが複数ある場合には、赤黒木に必要な時間以上)

    ノード数が6である場合には、リンクされたリストに変換され、なぜ、私が主に考えているため、ノード数際少なすぎる、まだ赤黒木で、赤黒木の特性を維持するために、あなたは、などL、Dを、反転する必要がある場合は、より多くの消費パフォーマンス。 

  なぜ7は変換されませんか?

    主に頻繁な変換を防ぐために、移行を得ました。また上記、ノード7は、ちょうど完全二分木であってもよいです。

おすすめ

転載: blog.csdn.net/shiyan719902675/article/details/92432373