2-3-4 drevo (predstavitev)

2-3-4 drevo (predstavitev)

Avtor: Monika Rebernišek

Kaj je 2-3-4 drevo?

2-3-4 (ali 2-4) drevo je primer iskalnega drevesa (ne dvojiškega):


(prva.png)

Kaj je 2-3-4 drevo?

2-3-4 drevo je B - drevo, reda 4. Kar pomeni, da ima vsako vozlišče lahko 2, 3 ali 4 sinove in en element manj kot ima sinov. Torej je v vsakem vozlišču lahko:

  • 1 element (vozlišče ima 2 sinova)
  • 2 elementa (vozlišče ima 3 sinove)
  • 3 elementi (vozlišče ima 4 sinove)


Podobno kot pri B – drevesu, tudi pri 2-3-4 lahko elemente iščemo, vstavimo ali brišemo.

Operacija iskanje

Iskanje elementa v 2-3-4 drevesu je zelo podobno iskanju elementa v dvojiškem iskalnem drevesu. Z iskanjem začnemo v korenu drevesa. Razlika je samo v tem, da pri dvojiškem drevesu primerjamo samo z enim elementom, pri 2-3-4 drevesu pa zaporedoma primerjamo z elementi, ki so v danem vozlišču. Če iskalni element ni v trenutnem vozlišču, določimo pot (po katerem sinu) po kateri nadaljujemo z iskanjem. Če v drevesu ni sina z območjem, to drevo ne vsebuje iskalnega elementa.


Primer:
V danem 2-3-4 drevesu poišči elementa 57 in 75.


(iskanje1.png)


  • Z iskanjem elementa 57 začnemu v korenu danega drevesa. Pogledamo element. Ker je ta večji kot 26, z iskanjem nadaljujemo v desnem poddrevesu, kjer so vsi elementi večji od 26. Pogledamo elemente v naslednjem vozlišču. Ker se iskalni element nahaja med 33 in 67 nadaljujemo z iskanjem v sredinskem vozlišču. Pogledamo element v tem vozlišče in ker je ta enak iskalnemu elementu je postopek končan .
  • Podobno začnemo z iskanjem elementa 75. Ko pridemo do vozlišča z elementoma 70 in 90, bi nadaljevali z iskanjem v sredinskem vozlišču. Vendar je to vozlišče prazno, zato se iskalni element ne nahaja v danem drevesu.

Operacija vstavljanje

Podobno kot pri operaciji iskanje, začnemo v korenu drevesa.


1. Če trenutno vozlišče vsebuje tri elemente:

  • sredinski element vstavimo v očeta, ostala dva elementa pa razpadeta v dve vozlišči. Prvi element postane levi sin, drugi element pa desni z ustreznima poddrevesoma,
  • če je trenutno vozlišče koren drevesa, sredinski element postane nov koren drevesa. S tem višina drevesa naraste za ena. Sicer (če trenutno vozlišče ni koren) pa sredinski element vstavimo v očeta trenutnega vozlišča.

2. Poiščemo sina, kateri ustreza intervalu števila, ki ga želimo vstaviti.

3. Če je sin vozlišča iz 2. točke prazno vozlišče, vstavimo element v trenutno vozlišče. Sicer pa nadaljujemo na naslednjem ustreznem sinu in ponovimo vse od 1. točke.

Primer vstavljanja

(vstavljanje2.png)

Nadaljevanje...

(vstavljanje3.png)

Operacija brisanje

Operacija brisanje je težja kot operaciji iskanje in vstavljanje.

Najprej element, ki ga želimo zbrisati, poiščemo. Potem pa ločimo dva primera, glede na to kje se element, ki ga želimo izbrisati, nahaja:

a) Element, ki ga želimo izbrisati se nahaja v listu drevesa. Potem nastopi eden od naslednjih dveh primerov:

  • če se element, ki ga želimo izbrisati, nahaja v vozlišču z dvema ali tremi elementi, ga preprosto zbrišemo in postopek je končan,
  • če pa je element, ki ga želimo izbrisati, edini v vozlišču, pa nastopi ena izmed naslednjih dveh možnosti:

1. Vsaj eden izmed bratov vsebuje najmanj 2 elementa. Najprej element, ki ga želimo zbrisati, zbrišemo in tako dobimo prazno vozlišče. Potem vzamemo ustrezen element iz očeta tega vozlišča in ga vstavimo v prazno vozlišče. Nato pa iz sosednjega brata vzamemo ustrezen element in ga vstavimo v očeta.

2. Noben od bratov nima vsaj dveh elementov. Potem ustrezen element odstranimo. Tako dobimo prazno vozlišče, v katerega pa shranimo utrezni element iz očeta. Potem pa to vozlišče združimo z ustreznim bratom.


b) Element, ki ga želimo izbrisati se ne nahaja v listu drevesa. V tem primeru ga nadomestimo z maksimalnim elementom ustreznega levega poddrevesa.


Po vseh teh zamenjavah elementov in združevanju vozlišč, drevo še vedno ostane iskalno.

1. primer brisanja

(brisanje1.png)

2. primer brisanja

(brisanje2.png)

3. primer brisanja

(brisanjeNZ1.png)

Nadaljevanje...

(brisanjeNZ2.png)

Nadaljevanje

(brisanjeNZ3.png)

Nadaljevanje

(brisanjeNZ4.png)

Preslikava med 2-3-4 in rdeče-črnim drevesom

Če imamo dano 2-3-4 drevo in bi rajši delali z rdeče - črnimi drevesi, lahko naredimo naslednjo preslikavo:

  1. vozlišče s tremi elementi preslikamo v tri vozlišča. Črno (ki kot podatek vsebuje srednji element) je oče rdečima sinovoma. Ta imata za poddrevesi vsak po dve prvotni poddrevesi.

    (preslikava3P.png)
  2. vozlišče z dvema elementoma preslikamo v dve vozlišči. Črno, v katerega damo en element iz prvotnega vozlišča. Ta je oče rdečemu sinu, v katerega damo preostali element iz prvotnega vozlišča, in enemu prvotnemu poddrevesu. Rdeči sin ima za poddrevesi ustrezni prvotni poddrevesi.

    (preslikava2.png)
  3. vozlišče z enim elementom (ki je lahko samo koren), preslikamo v črno vozlišče s prvotnima poddrevesoma


S tem postopkom dobimo vsaj eno rdeče - črno drevo. Obratno pa preslikava ni enolična.


Pogoj rdeče – črnih dreves:

  • koren drevesa je črno vozlišče,
  • rdeče vozlišče ima lahko samo črna sinova,
  • za vsak list mora veljati, da pot od tega vozlišča do korena vsebuje enako število črnih vozlišč.
0%
0%