赤黒の木を想像してください。それを作成する挿入と削除のシーケンスは常にありますか?


41

次の赤黒ツリーの定義を想定してみましょう。

  1. これは二分探索木です。
  2. 各ノードは赤または黒の色で表示されます。ルートは黒です。
  3. エッジで接続された2つのノードを同時に赤にすることはできません。
  4. wikiのように、NILリーフの適切な定義が必要です。NILの葉は黒く着色されています。
  5. ルートから任意のNILリーフへのパスには、同じ数の黒いノードが含まれます。


質問

赤黒ツリーのinsertand delete操作を実装したとします。さて、あなたが有効な赤黒木を与えられたら、それを構築する一連の操作insertdelete操作が常にありますか?


動機

この質問は、この質問この質問からの議論によって動機付けられています。ます。

個人的には、黒のノードだけで構成される有効な赤黒木を想像すると(完全にバランスの取れた木を想像していることを意味します)、それを構築するシーケンスinsertdelete操作があると思います。しかしながら、

  1. 私はそれを正確に証明する方法がわかりません
  2. より一般的なケースにも興味があります

あなたの質問は少し循環的です...挿入と削除の操作のセットは赤黒のツリーを構築します...赤黒は定義にすぎないため、文字通り何でもです。あなたの質問は純粋に黒い木に限定されていますか?
JOX

2
いいえ、あなたは誤解していると思います。もちろん、挿入と削除のセットは赤黒木を構成します。問題はこれです:定義に適合するツリーは、挿入と削除のシーケンスによって構築可能ですか?何らかのツリーが与えられた場合、挿入と削除のシーケンスを再作成できますか?
アリシアーノ

2
@ all3foxはい、あなたは正しいです。操作を使用するアルゴリズムがあるinsertdelete構築するためにのみ黒のノードからなる有効な赤黒木は。これは、使用の高さのツリーを作成するために挿入/欠失時間。最初に、2 h + 11の挿入を使用して幅優先の方法で完全にバランスの取れた赤黒ツリーを作成し、次にh 2 h 1を使用します。h+22h1h2h+11h2h1挿入と同量の削除により、完全に黒いツリーに再描画されます。ここでのコツは、ルートに到達するまでツリーの最上部の赤い層を回上に移動することです。h
アントントルノフ

1
@AntonTrunovありがとう、私はそれを理解しています。一般的な赤黒木の場合はどうですか?あなたはどう思いますか、insertそして特定のRed-Black Treeをdelete操作で構築することは可能ですか?
アリシアーノ

2
a)答えはinsertandの正確な実装に依存しdeleteます。これらの操作を行う方法はいくつかあります。b)RBツリーは基本的に4次のBツリーであるため、そこからインスピレーションを探すことができます。RBからB(および/または逆方向)へのマッピングは一意ではないため、詳細は扱いにくいことがあります。
ラファエル

回答:


2

赤黒ツリーの挿入および削除操作には、次のものが含まれます。赤黒のプロパティを維持するために必要なバランスがます。

(左または右)傾かない赤黒の木の問題は、基本的な削除または挿入後に赤黒を復元する方法が複数あることです。
ツリーを変換するのは挿入または削除ではなく、ツリーの赤い黒さを保存/復元するために後で行われるリバランスと回転です。

赤黒ツリーの基本的な説明では、どのルートを選択するかは規定されていません。リバランスは決定論的である必要がないため、特定の赤黒木
正確に再構築する方法を理解することは不可能かもしれません。

これは、左に傾いた赤黒の木で「解決」されました。
バランスを取る方法は1つしかありません。したがって、特定の決定論的な方法でリバランス/回転が行われるため、特定の傾いた赤黒ツリーは挿入と削除を使用して再構築できます。

これは、左寄りのRBツリーがより良いまたはより効率的であることを意味するものではありません。一方で、決定論的なバランスルールを使用することで得られるもの、より複雑なバランスコードで失うものです。


h+22h1h2h+11h2h1h ルートに到達するまでツリーの上の最下層の赤い層を回します。

ただし、Day-Stout-Warrenのような完全なバランシングアルゴリズムの方が効率的だと思います。


1
操作insertを使用deleteし、CLRSブックから、黒いノードのみで構成される有効なRBツリーを構築できます。トリックは、必要以上のノードを挿入しから、余分なノードを削除することです。アルゴリズム赤いノード削除します。
アントントルノフ16年

@AntonTrunov、そのアルゴリズムへのリンクはありますか、答えに含めるといいでしょう。google-fuを使用して見つけることができません。
ヨハン

1
残念ながら、リンクはありません。当時の質問に答えようとして、すべての黒いRBツリーの特殊なケースのためのアルゴリズムを思いつきました。私はそのコメントでそれを説明しましたが、証拠を提供しませんでした。
アントントルノフ16年

「これは左に傾いた赤黒の木で「解決された」」とはどういう意味ですか。左寄りの赤黒の木でさえ、同じアイテムを保存する複数の方法があります。
user239558
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.