Rød-Svart Tre Rotasjoner og Farge Vipper

Thamindu Dilshan Jayawickrama
Thamindu Dilshan Jayawickrama

Følg

Jul 11, 2020 · 6 min lese

En typisk søk treet som Binary Search Tree (BST) kunne kjøre inn i en høyde av O(n) som kan resultere i verste fall tid kompleksitet O(n) for grunnleggende operasjoner, slik som søk, innsetting, sletting, etc. Dette avhenger helt av rekkefølgen på elementene som settes inn I BST. Men det er visse situasjoner der vi ikke har hele elementet satt når du begynner å konstruere treet. Det Er her De Balanserte søketrærne kommer inn i spill. I et balansert søketre er en høyde På O(log n) garantert ved implementering av et dynamisk sett med n elementer. Rød-svart trær, AVL trær, 2-3 trær, Og B-trær er noen av eksemplene for balansert søk tre implementeringer. Denne artikkelen handler om tre modifikasjon operasjoner involvert med rød-svart trær.Et Rødt-Svart Tre (RB-Tre) er Et Selvbalanserende Binært søketre hvor hver node følger et sett med regler. Hver node i ET Rb-Tre har et ekstra attributt; fargen, som enten kan være rød eller svart. I en typisk rb-tre-implementering vil det være et sett med sentinel-noder for å flagge at en bladnode er nådd. Disse nodene refereres Til Som NULLs (Eller NILs) og betraktes som bladnoder i denne artikkelen. Nedenfor er settet med regler eller egenskapene som hver node skal følge.

  1. hver node er enten rød eller svart.

2. Roten og bladene er svarte.

3. Hvis en node er rød, er dens forelder svart.

4. Alle enkle stier fra en node til en etterkommer blad har samme antall svarte noder (svart-høyde).

høyden på et rb-tre forblir ved o(log n) etter hver tremodifikasjonsoperasjon som resulterte i en garantert øvre grense av o(log n) for disse operasjonene. Operasjonene Sett inn og Slett forårsaker endringer I RB-Treet. Etter hver tremodifikasjonsoperasjon vil treet være selvbalansert gjennom fargeendringer og rotasjoner. Før vi går inn i disse operasjonene, bør vi være kjent med følgende notasjon.

en rotasjon er en spesiell operasjon designet for selvbalanserende binære søketrær som kan utføres i o(1) tid. En interessant egenskap på rotasjoner er at den bevarer inorder traversering av nøklene (bestilling av nøklene).

beslutningen om å utføre en rotasjon eller en fargeendring er basert på tanten til den vurderte noden (den nåværende noden). Hvis noden har En Svart Tante, gjør vi en rotasjon. Hvis noden har En Rød Tante, gjør vi en fargeflipp. Etter å ha utført en rotasjon, bør vi farge fikse treet. Etter å ha utført disse operasjonene, bør treet avsluttes som nedenfor.

hvis den nåværende noden er det venstre barnet til besteforeldrenes venstre barn, roterer vi besteforeldrene rett rundt foreldrene. Hvis den nåværende noden er det rette barnet til besteforeldrenes høyre barn, roterer vi besteforeldrene rundt foreldrene. Hvis den nåværende noden er det rette barnet til besteforeldrenes venstre barn, utfører vi en venstre-høyre rotasjon der vi roterer besteforeldre og barnet rundt foreldrene. Hvis den nåværende noden er det venstre barnet til besteforeldrenes høyre barn, utfører vi en høyre-venstre rotasjon der vi roterer besteforeldre og barnet rundt foreldrene. Alle rotasjoner kan oppsummeres med hensyn til diagrammet nedenfor.

et viktig faktum å huske er at etter å ha utført noen tremodifikasjonsoperasjon, bør du validere treet mot regelsettet for å finne ut om noen brudd er der. Hvis et brudd er der (ex: root er rødt) bør du rette det. La oss nå konstruere et enkelt RB-Tre ved å sette inn under sett med nøkler. Merk at for enkelhet ignoreres bladnoder (NULL) i under diagrammer.

5, 8, 1, 10, 9, 15, 20

vi bør sette inn hver nøkkel som en rød knute. Derfor setter vi inn 5 som en rød node og farger den umiddelbart tilbake til svart som det er rotnoden. Da setter vi inn 8 som node 5s rette barn. vi følger den grunnleggende bst-egenskapen når du setter inn nøkler. Innsetting av 1 er det samme som innsetting av 8.

deretter skal vi sette inn 10 som 8s høyre barn. Vi setter den inn som en rød knute og sjekker for brudd. Både 8 og 10 er røde noder, og det bryter med 3. eiendom. Vi bør se etter tanten, og den er rød. Så vi utfører en farge flip. Etter fargeflippen kan vi se at rotnoden er rød og den bryter med 2. eiendom. Så vi fikser det ved å endre fargen på rotnoden.

deretter skal vi sette inn nøkkelen 9. Etter innsetting kan vi se at både 9 og 10 noder er røde og det bryter med 2. eiendom. Vi sjekker for tanten og da DEN er svart (NULL er svart), utfører vi en høyre-venstre rotasjon (brudd er i høyre barns venstre undertre). Etter rotasjonen bør vi gjøre en fargefiks.

la oss nå sette inn nøkkelen 15. Etter innsettingen kan vi se at to påfølgende røde noder er der, og tanten til 15 er en rød knute. Så vi bør gjøre en farge flip. Etter det sjekker vi for eventuelle brudd og kan finne ut at ingen brudd er der.

la oss nå sette inn nøkkelen 20 til treet. Etter innsetting kan vi se at tanten er svart og derfor bør vi utføre en venstre rotasjon (brudd er i høyre barns høyre undertre). Etter rotasjonen bør vi gjøre en fargefiks.

i denne artikkelen så vi på et bestemt selvbalanserende binært søketre; rødt-svart tre. De er garantert Å ha en høyde På O (log n), derfor har en worst-case tid kompleksitet Av O (log n) for grunnleggende tre operasjoner. Rød-Svarte trær er spesielt nyttige i mange datavitenskapsprogrammer. C++ Standard Template Library (STL) har satt, multiset, kart og multimap basert PÅ RB-Trær. Også TreeMap I Java-språket er EN RB-Tre basert NavigableMap implementering.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.