2-3-4 drevo

2-3-4 drevo

Avtor: Selak Irena

Nekaj o 2-3-4 drevesu

2-3-4 (imenujemo tudi 2-4) drevo, ki je iskalno drevo ni pa dvojiško. To jeB drevo reda 4. Drevo reda 4 pomeni, da se lahko v vozlišču nahajajo 1, 2 ali 3 podatki in slednja vozlišča imajo 2, 3 ali 4 sinove.

Primer

  • 1 element v vozlišču očeta ima dva sinova

    (primer1.png)
  • 2 elementa v vozlišču očeta imata tri sinove

    (primer2.png)
  • 3 elementi v vozlišču očeta imajo štiri sinove

    (primer3.png)

Definicija

B-drevo je posplošitev 2-3 drevesa. B-drevo reda m je m-smerno iskalno drevo, ki je ali prazno ali višine vsaj 2. Vsako notranje vozlišče reda m ima lahko od m/2 do m sinov ter en ključ (element) manj kot ima sinov. Torej ima vsako vozlišče vsaj m/2-1 in največ m-1 elementov. Tako ima vsak ključ levo in desno poddrevo, kjer je desno poddrevo i-tega ključa enako levemu poddrevesu i+1-vega ključa. Izjema je koren drevesa. Če je koren notranje vozlišče, ima lahko med 2 in m sinov. Vsi listi so na istem nivoju. Zapri

Lastnosti

2-3-4 drevo je iskalno, ki je lahko prazno ali ne prazno

  • v vsako vozlišče lahko shranimo do tri vrednosti
  • vsako vozlišče ima lahko 2, 3 ali 4 sinove
  • vsa vozlišča (listi) 2-3-4 drevesa so na isti globini
  • pri 2-3-4 drevesu lahko elemente iščemo, vstavljamo ali brišemo

Iskanje

Elemente v 2-3-4 drevesu iščemo podobno kot v iskalnem dvojiškem drevesu. Iskanje se začne v korenu. Razlika je v tem da v iskalnem dvojiškem drevesu primerjamo samo z enim elementom v vozlišču, pri 2-3-4 drevesu primerjamo z vsemi elementi v danem vozlišču. V primeru da se iskani element ne nahaja v vozlišču, določimo pot po katerem sinu bomo iskanje nadaljevali. Če v 2-3-4 drevesu ni območja s sinom iskanega elementa, potem drevo ne vsebuje iskanega podatka.

Iskanje na primeru

  1. V 2-3-4 drevesu poišči element 15

    (iskanje.png)
    • Elenent 15 začnemo iskati v korenu. V korenu ga ni, pot nadaljujemo v levo poddrevo, ker je 15 manjše od 20. Preverimo naslednje vozlišče, 13 je manjše in 17 večje od 15, pot nadaljujeno v sredinsko vozlišče. Prišli smo do vozlišča z elementom 15, iskanje je zaključeno.
  2. V 2-3-4 drevesu poišči element 22

    (iskanje.png)
    • Element začnemo iskati v korenu. V korenu ga ni, pot nadaljujemo v desno poddrevo, kjer sta elementa 26 in 34 večja od 22. Pot nadaljujemo v levo vozlišče, kjer se nahaja element 23, ki je večje od 22. Tako bi pot nadaljevali v levem vozlišču, vendar je vozlišče prazno. V tem primeru danega elementa ni v 2-3-4 drevesu, iskanje je zaključeno.

Vstavljanje

Želen element vstavljamo pri korenu. Poiščemo sina, ki ustreza intervalu elementa, ki ga želimo vstaviti. Če je vozlišče prazno oziroma ima en ali dva elementa v vozlišču element vstavimo. V primeru da vozlišče vsebuje tri elemente velja slednje:

  • če je vozlišče KOREN drevesa, sredinski element postane nov koren ostala dva elementa pa razpadeta v dva vozlišča. Prvi postane levi sin drugi pa desni sin z ustreznimi poddrevesi. Višina drevesa se je povečala za ena.
  • če vozlišče NI KOREN drevesa, sredinski element vstavimo v očeta trenutnega vozlišča, ostala dva elementa razpadeta v dva vozlišča. V tem primeru se višina drevesa ne poveča.

Primer element vstavimo v list 2-3-4 drevesa, kjer se v vozlišču trenutno nahajajo trije elementi

  • Sredinski element prestavimo v vozlišče očeta ostala dva razpadeta v dva vozlišča, ki postaneta levi in desni sin. Element ki ga želimo vstaviti, preverimo na katerem intervalu je in ga vstavimo v dano vozlišče.
  1. V 2-3-4 drevo bomo vstavili element 20.

    • Začetno 2-3-4 drevo.

      (vstavi11.png)
    • Element 20 želimo vstaviti v vozlišče (17,23,34), ker pa vozlišče že vsebuje tri elemente moramo sredinski element (to je 23) prestaviti v vozlišče očeta.

      (vstavi22.png)
    • S tem ko smo element 23 prestavili v vozlišče očeta, drevo ni več iskalno. V vozlišču očeta sta trenutno dva elementa, kar pomeni da mora imeti oče tri sinove. Tako vozlišče (17,34) razpade na dva vozlišča(17),(34).

      (vstavi33.png)
    • Element 20 vstavimo v sredinsko vozlišče saj je 20 večje od elementa 15 in manjše od elementa 23.

      (vstavi44.png)

Predstavitev vstavljanja

Primer element vstavimo v 2-3-4 drevo, ko se v vozlišču korena nahajajo trije elementi

  • V danem primeru sredinski element postane nov koren drevesa. Višina drevesa se poveča za ena. Ostala dva elementa pa razpadeta v dva nova vozlišča in sicer v levo in desno poddrevo. Za element ki ga želimo vstaviti preverimo na katerem intervalu se nahaja in ga tja tudi vstavimo.

Brisanje

Brisanje v 2-3-4 drevesu je najbolj zahteven postopek. Najprej je potrebno poiskati vozlišče z elementom, ki ga želimo izbrisati.

  1. Če se element nahaja v listu drevesa in se v vozlišču nahajata dva ali trije elementi slednjega enostavno izbrišemo. V primeru da je element sam v vozlišču:

    • Preverimo ali ima vsaj en izmed bratov, vsaj dva elementa v vozlišču. V tem primeru željen element izbrišemo, ostane prazno vozlišče. V prazno vozlišče vstavimo element, ki se trenutno nahaja v vozlišču očeta, na očetovo mesto pride element iz vozlišča enega izmed bratov (v katerem sta bila vsaj dva elementa).
    • Noben izmed bratov nima vsaj dveh elementov v vozlišču. V tem primeru željen element izbrišemo, ostane prazno vozlišče. V prazno vozlišče vstavimo element, ki se je trenutno nahajal v vozlišču očeta. Nato pa dano vozlišče združimo z ustreznim bratom.
  2. Element se ne nahaja v listu drevesa. V tem primeru ga nadomestimo z maksimalnim elementom levega poddrevesa.

Primer brisanja, ko se element nahaja v listu drevesa.

  • Na 2-3-4 drevesu ni večjih sprememb. Izbrišemo element 10.
(brisi1.png)
  • 2-3-4 drevo brez elementa 10

    (brisi2.png)

Primer brisanja, ko se element nahaja v listu drevesa

Primer brisanja, ko ima vsaj en od bratov dva ali tri elemente v vozlišču

  • Iz vozlišča drevesa izbrišem element 17, ki se nahaja v desnem listu.

    (brisi11.png)
  • Izbrisali smo element 17, zato desni sin predstavlja prazno vozlišče.

    (brisi22.png)
  • V prazno vozlišče vstavimo element, ki je predstavljal dosedanjega očeta. Na mesto dosedanjega očeta pa vstavimo največji element iz vozlišča levega sina in to je element 13.

    (brisi33.png)

Primer brisanja, ko se element nahaja v listu drevesa

Primer brisanja, ko noben od bratov nima vsaj dveh elementov v vozlišču

  • Iz 2-3-4 drevesa bomo izbrisali element 7.

    (brisi_en_sin_1.png)
  • Izbrisali smo element 7, vozlišče je trenutno prazno.

    (brisi_en_sin_2.png)
  • V prazno vozlišče vstavimo element, ki se nahaja v vozlišču očeta. Sedaj ima vozlišče očeta samo en element, kar pomeni da ima 2-3-4 drevo lahko le dva sinova.

    (brisi_en_sin_3.png)
  • Združili smo vozlišče (14) in vozlišče (15) v eno vozlišče (14,15). Po združitvi vozlišč je 2-3-4 drevo iskalno.

    (brisi_en_sin_4.png)

Brisanje elementa, ki se nahaja v očetu

Primer brisanja, ko se element nahaja v vozlišču očeta

  • Iz 2-3-4 drevesa bomo izbrisali element 20.

    (brisi_1.png)
  • Levi sin od elementa 20 je vozlišče (8,14), desni sin pa predstavlja vozlišče (28,37). Element 20 odstranimo iz vozlišča očeta, ki ga bomo nadomestili z maksimalnim elementom levega sina (in to je 14).

    (brisi_2.png)
  • Na prazno mesto v vozlišču očeta vstavimo (maksimalen element levega sina od elementa 20) element 14.

    (brisi_3.png)

Pimer brisanja ko se element ne nahaja v listu

Primer brisanja, pri čemur se združita brata v listih drevesa

  • Iz 2-3-4 drevesa izbrisemo element 17

    (brisi_ne_list.png)
  • V vozlišču kjer se nahaja element 17 je še en element, kar pomeni, če odstranimo 17 ima slednje vozlišče lahko le dva sinova. Preverimo vozlišča sinov in jih združimo, glede na pravilni interval.

    (brisi_ne_list1.png)
  • 2-3-4 drevo z izbrisanim elementom 17.

    (brisi_ne_list2.png)

Pimer brisanja ko se element ne nahaja v listu

Primer brisanja, ko maksimalen element levega poddrevesa prestavimo na mesto izbrisanega elementa

  • Iz 2-3-4 drevesa bomo izbrisali element 17.

    (brisi_ne_list00.png)
  • Vozlišče iz katerega smo izbrisali element 17, je trenutno prazno. Zato pogledamo elemente v levem simu in največji element prestavimo v prazno vozlišče.

    (brisi_ne_list11.png)
  • 2-3-4 drevo z izbrisanim elementom 17.

    (brisi_ne_list22.png)

Literatura

0%
0%