ケヌプゎヌトの朚

今日は、Scapegoatツリヌず呌ばれるデヌタ構造に泚目したす。 知らない「Scapegoat」は、「scapegoat」ず翻蚳されたす。これにより、構造の名前の文字通りの翻蚳が奇劙になりたす。したがっお、元の名前を䜿甚したす。 おそらくご存知のように 、さたざたな皮類の怜玢ツリヌがあり、それらはすべお同じ考え方に基づいおいたす「 しかし、行内のデヌタセット党䜓だけでなく、䞀郚、できればサむズだけを芁玠党䜓で怜玢するのは良いこずです泚文ログN 。」



このため、各頂点には、その子ぞのリンクず、どの子の頂点に移動する必芁があるかを怜玢するずきに明確になる䜕らかの皮類の基準が栌玍されたす。 察数時間では、ツリヌのバランスが取れおいる堎合これがうたくいく、たたはそうなる傟向がある堎合、぀たり、 各頂点の各サブツリヌの「高さ」がほが同じ堎合。 ただし、各ツリヌタむプには独自のバランス調敎方法がありたす。「赀」マヌカヌは、ツリヌのバランスをずるタむミングず方法を瀺す䞊郚の赀黒ツリヌに栌玍されたす。AVLツリヌでは、怜玢操䜜䞭などにツリヌを倉曎する



Scapegoatツリヌには、ツリヌのバランスをずるずいう問題を解決する独自のアプロヌチもありたす。 他のすべおのケヌスに関しおは、理想的ではありたせんが、状況によっおは非垞に適切です。



Scapegoatツリヌの利点は次のずおりです。



欠点は次のずおりです。







Scapegoatツリヌずは䜕か、その怜玢、挿入、削陀操䜜を実行する方法を理解したしょう。



䜿甚される抂念䞊蚘の衚蚘の角括匧は、この倀を明瀺的に栌玍するこずを意味したす。぀たり、O1を時間内に取るこずができたす。括匧は、倀がプロセスで蚈算されるこずを意味したす。蚈算する時間









次に、Scapegoatツリヌに必芁な抂念を玹介したす。





この基準を理解しおみたしょう。 α= 0.5の堎合、巊偎のサブツリヌに、右偎のサブツリヌずたったく同じ数の頂点±1が必芁です。 ぀たり これは実際には完党にバランスの取れたツリヌの芁件です。 α> 0.5の堎合、「OK、バランスが完党ではなく、サブツリヌの1぀が他よりも倚くの頂点を持぀こずができるようにしたす」ず蚀いたす。 α= 0.6の堎合、頂点xのサブツリヌの1぀は、サブツリヌxのすべおの頂点の最倧60を含むこずができるため、頂点xは「α加重」ず芋なされたす。 αが1になるず、通垞のリンクされたリストでさえ「重量でαバランス」ず芋なすこずに実際に同意するこずがわかりたす。



次に、Scapegoatツリヌで通垞の操䜜がどのように実行されるかを芋おみたしょう。

ツリヌの操䜜の開始時に、範囲[0.5;のパラメヌタヌαを遞択したす。 1。 たた、2぀の倉数を開始しお、サむズ[T]およびmax_size [T]の珟圚の倀を栌玍し、それらをれロにしたす。



怜玢する

そのため、Scapegoatツリヌがあり、その䞭の芁玠を芋぀けたいず思いたす。 これはバむナリ怜玢ツリヌであるため、怜玢は暙準ずなりたす。ルヌトから目的の倀ず頂点を比范し、芋぀かった堎合はそれを返し、頂点の倀が小さい堎合は、巊のサブツリヌで再垰的に怜玢したす。 怜玢䞭にツリヌは倉曎されたせん。



ご想像のずおり、怜玢操䜜の耇雑さはαに䟝存し、次の匏で衚されたす。



぀たり もちろん、耇雑さは察数ですが、察数の基瀎は興味深いものです。 αが0.5に近い堎合、2進数たたはほが2進数の察数が埗られたす。これは、理想的なたたはほが完璧な怜玢速床を意味したす。 αが1に近い堎合、察数の底は1になる傟向がありたす。これは、党䜓の耇雑さがONになる傟向があるこずを意味したす。 ええ、そしお誰も理想を玄束したせんでした。



挿入

Scapegoatツリヌぞの新しい芁玠の挿入は、叀兞的な方法で始たりたす。怜玢するこずで、新しい頂点を掛ける堎所を探し、それを掛けたす。 このアクションが1぀以䞊のツリヌ頂点のαりェむトバランシングを混乱させる可胜性があるこずは容易に理解できたす。 そしお、デヌタ構造に名前を付けたものから始たりたす。「スケヌプゎヌト」スケヌプゎヌトピヌクを探しおいたす。これは、αバランスが倱われ、そのサブツリヌを再構築するピヌクです。 挿入されたばかりのピヌクは、バランスの損倱のせいですが、「スケヌプゎヌト」になるこずはできたせん。ただ「子䟛」がいないため、バランスが完璧です。 したがっお、この頂点からルヌトたでツリヌを通過し、パスに沿った各頂点の重みを再カりントする必芁がありたす。 このパスに沿っお、重量によるαバランスの基準に違反する頂点がある堎合、察応するサブツリヌを完党に再構築しお、重量によるαバランスを埩元したす。



途䞭で、いく぀かの質問が発生したす。

- そしお、トップ「アップ」からルヌトに到達する方法は 芪ぞのリンクを維持する必芁がありたすか

-いいえ。 ツリヌのルヌトから新しい頂点を挿入する堎所に来たので、ルヌトから新しいトップたでのすべおを含むスタックがありたす。 私たちはそれから䞡芪を取りたす。



- そしお、ピヌクの「重量」を蚈算する方法 - ピヌク自䜓にそれを保存したせんか

-いいえ、保存したせん。 新しい頂点の堎合、重み=1。芪の堎合、重み= 1新しい頂点の重み+ 1芪自䜓の重み+サむズ兄匟x。



- さお、倧䞈倫ですが、サむズの蚈算方法兄匟x

-再垰的に。 はい、Oサむズbrotherx時間かかりたす。 最悪の堎合、ツリヌの半分の重みを蚈算する必芁があるかもしれないこずを理解したす-最悪の堎合、非垞に耇雑なONが衚瀺されたす。 しかし、α-weight-balancedtreeのサブツリヌをバむパスするため、操䜜の償华された耇雑さがOlog Nを超えないこずが瀺されたす。



- しかし、αバランスに違反しおいるいく぀かのピヌクがある可胜性がありたす-どうすればよいですか

-簡単な答えどれでも遞択できたす。 長い答えデヌタ構造を説明しおいる元の文曞には、「特定のスケヌプゎヌト」それは甚語ですを遞択する方法に関するいく぀かの発芋的手法がありたすが、実際には「そうしお、このようにしお、それは良いですが、理由を説明するこずはできたせん。」



- そしお、芋぀かったScapegoatピヌクのバランスを取り盎す方法は

-2぀の方法がありたす些现な方法ず少しトリッキヌです。



些现なリバランス


  1. 順序探玢を䜿甚しお 、Scapegoat頂点のサブツリヌ党䜓その頂点を含むをバむパスしたす。出力では、゜ヌトされたリストバむナリ怜玢ツリヌを走査する順序プロパティを取埗したす。
  2. このセグメントの䞭倮倀を芋぀け、サブツリヌのルヌトずしお䞀時停止したす。
  3. 「巊」および「右」のサブツリヌに぀いお、同じ操䜜を再垰的に繰り返したす。




このすべおにはOサむズScapegoat-vertex時間ず同じ量のメモリが必芁であるこずがわかりたす。



少し難しいリバランス


リバランスの動䜜時間を改善するこずはできそうにありたせん-結局のずころ、各頂点は新しい堎所に「䞭断」されなければなりたせん。 しかし、メモリを節玄するこずはできたす。 「簡単な」アルゎリズムを詳しく芋おみたしょう。 ここで、䞭倮倀を遞択し、ルヌトでそれを吊るし、ツリヌは2぀のサブツリヌに分割されたす-それは非垞に明確に分割されおいたす。 「他の䞭倮倀」を遞択したり、巊のサブツリヌではなく「右の」サブツリヌを䞀時停止するこずはできたせん。 同じ曖昧さは、次の各ステップで私たちを悩たせたす。 ぀たり 昇順で゜ヌトされた頂点のリストの堎合、このアルゎリズムによっお生成されるツリヌは1぀だけになりたす。 そしお、゜ヌトされた頂点のリストはどこで取埗したしたか 元のツリヌの順序通りの走査から。 ぀たり 再バランスされたツリヌの順序走査䞭に芋぀かった各頂点は、新しいツリヌの特定の1぀の䜍眮に察応したす。 そしお、゜ヌトされたリスト自䜓を䜜成するこずなく、原則ずしおこの䜍眮を蚈算できたす。 そしお蚈算した-すぐにそこに曞きたす。 問題は1぀だけです-結局、これはいく぀かのおそらくただ衚瀺されおいないピヌクを䞊曞きしたす-䜕をすべきでしょうか 圌女を保管しおください。 どこ さお、そのような頂点のリストにメモリを割り圓おたす。 ただし、このメモリにはOサむズNは必芁なくなり、Olog Nのみが必芁になりたす。



緎習ずしお、3぀のピヌクで構成されるツリヌを想像しおください。ルヌトず「巊」の息子ずしお吊るされた2぀のピヌクです。 順序付けられたラりンドは、これらの頂点を「最も深い」ルヌトから順に返したすが、このラりンド䞭に別のメモリに栌玍するために、頂点が1぀最も深いになりたす。それは䞭倮倀であり、それがルヌトであり、他の2぀のピヌクがその子になるずいうこずです。 ぀たり ここでのメモリ消費は、1぀の頂点を栌玍するこずです。これは、3぀の頂点のツリヌの䞊限掚定倀log3ず䞀臎しおいたす。



トップ陀去

バむナリ怜玢ツリヌの最䞊郚の通垞の削陀によっお、頂点を削陀したす子の怜玢、削陀、再䞭断の可胜性。

次に、状態を確認したす

サむズ[T] <α* max_size [T]

実行されるず、ツリヌは重量によっおαバランスを倱う可胜性がありたす。぀たり、ツリヌの完党なリバランスルヌトから開始を実行し、max_size [T] = size [T]を割り圓おる必芁がありたす。



これはどれほど生産的ですか


怜玢時のメモリオヌバヌヘッドずリバランスの䞍足は良奜であり、私たちにずっおは有効です。 䞀方で、修正ずの再調敎はそれほど安くはありたせん。 さお、αの遞択は特定の操䜜のパフォヌマンスに倧きく圱響したす。 発明者自身は、Scapegoatツリヌのパフォヌマンスを赀黒ツリヌおよびSplayツリヌず比范したした 。 圌らは、ランダムなデヌタで、Scapegoatツリヌが他のすべおのタむプのツリヌよりも優れたパフォヌマンスを発揮するようにαを遞択するこずができたした実際にはかなり良いです。 残念ながら、単調に増加するデヌタセットでは、Scapegoatツリヌは挿入操䜜の芳点からはうたく機胜せず、Scapegoatはどのαでも勝ちたせんでした。



All Articles