B STABLO u strukturi podataka: pretraživanje, umetanje, brisanje Operacija Primjer

Što je B stablo?

B Drvo je struktura podataka koja se sama uravnotežuje temeljena na specifičnom skupu pravila za pretraživanje, umetanje i brisanje podataka na brži i memorijski učinkovit način. Kako bi se to postiglo, slijede se sljedeća pravila za stvaranje B stabla.

B-stablo je posebna vrsta stabla u strukturi podataka. Godine 1972. ovu metodu prvi je predstavio McCreight, a Bayer ju je nazvao Height Balanced m-way Search Tree. Pomaže vam da sačuvate podatke sortirane i dopuštene razne operacije poput umetanja, pretraživanja i brisanja u kraćem vremenu.

Pravila za B-Tree

Ovdje su važna pravila za stvaranje B_Tree

  • Svi listovi će biti stvoreni na istoj razini.
  • B-stablo je određeno brojem stupnjeva, koji se također naziva "poredak" (određen od strane vanjskog aktera, poput programera), koji se naziva
    m

    pa nadalje. Vrijednost

    m

    ovisi o veličini bloka na disku na kojem se primarno nalaze podaci.

  • Lijevo podstablo čvora imat će manje vrijednosti od desne strane podstabla. To znači da su čvorovi također poredani uzlaznim redoslijedom s lijeva na desno.
  • Maksimalni broj podređenih čvorova, korijenski čvor kao i njegovi podređeni čvorovi mogu sadržavati izračunava se prema ovoj formuli:
    m – 1

    Na primjer:

    m = 4
    max keys: 4 – 1 = 3
    

Pravila za B-Tree

  • Svaki čvor, osim korijena, mora sadržavati minimalne ključeve od
    [m/2]-1

    Na primjer:

    m = 4
    min keys: 4/2-1 = 1
    
  • Maksimalni broj podređenih čvorova koji čvor može imati jednak je njegovom stupnju, što je
    m
  • Najmanji broj djece koju čvor može imati je polovica reda, što je m/2 (uzima se gornja vrijednost).
  • Svi ključevi u čvoru poredani su rastućim redoslijedom.

Zašto koristiti B-Tree

Ovdje su razlozi korištenja B-Tree

  • Smanjuje broj čitanja napravljenih na disku
  • B Stabla se mogu lako optimizirati za prilagodbu veličine (to je broj čvorova djece) prema veličini diska
  • To je posebno dizajnirana tehnika za rukovanje velikom količinom podataka.
  • To je koristan algoritam za baze podataka i datotečne sustave.
  • Dobar izbor kada se radi o čitanju i pisanju velikih blokova podataka

Povijest B stabla

  • Podaci se pohranjuju na disku u blokovima, ti podaci, kada se unesu u glavnu memoriju (ili RAM) nazivaju se strukturom podataka.
  • U slučaju velikih podataka, pretraživanje jednog zapisa na disku zahtijeva čitanje cijelog diska; to povećava potrošnju vremena i glavne memorije zbog visoke učestalosti pristupa disku i veličine podataka.
  • Kako bi se to prevladalo, kreiraju se indeksne tablice koje spremaju referencu zapisa zapisa na temelju blokova u kojima se nalaze. To drastično smanjuje potrošnju vremena i memorije.
  • Budući da imamo ogromne podatke, možemo izraditi indeksne tablice na više razina.
  • Indeks na više razina može se dizajnirati korištenjem B stabla za održavanje sortiranih podataka na samouravnotežujući način.

Traži OperaANJE

Operacija pretraživanja je najjednostavnija operacija na B stablu.

Primjenjuje se sljedeći algoritam:

  • Neka ključ (vrijednost) koju treba pretraživati ​​pomoću “k”.
  • Započnite pretraživanje od korijena i rekurzivno idite prema dolje.
  • Ako je k manji od korijenske vrijednosti, pretraži lijevo podstablo, ako je k veće od korijenske vrijednosti, pretraži desno podstablo.
  • Ako čvor ima pronađeno k, jednostavno vratite čvor.
  • Ako k nije pronađen u čvoru, idite dolje do djeteta s većim ključem.
  • Ako k nije pronađen u stablu, vraćamo NULL.

umetak OperaANJE

Budući da je B stablo stablo koje se samo balansira, ne možete prisilno umetnuti ključ u bilo koji čvor.

Primjenjuje se sljedeći algoritam:

  • Pokrenite operaciju pretraživanja i pronađite odgovarajuće mjesto umetanja.
  • Umetnite novi ključ na odgovarajuće mjesto, ali ako čvor već ima maksimalan broj ključeva:
  • Čvor će se zajedno s novoumetnutim ključem odvojiti od srednjeg elementa.
  • Srednji element postat će roditelj za druga dva podređena čvora.
  • Čvorovi moraju preurediti ključeve uzlaznim redoslijedom.
SAVJET Sljedeće nije točno u vezi s algoritmom umetanja:

Budući da je čvor pun, stoga će se podijeliti, a zatim će se umetnuti nova vrijednost

umetak OperaANJE

U gornjem primjeru:

  • Potražite ključ na odgovarajućem mjestu u čvoru
  • Umetnite ključ u ciljni čvor i provjerite pravila
  • Nakon umetanja, ima li čvor više od minimalnog broja ključeva, koji je 1? U ovom slučaju, da, ima. Provjerite sljedeće pravilo.
  • Nakon umetanja, ima li čvor više od maksimalnog broja ključeva, koji je 3? U ovom slučaju, ne, nije. To znači da stablo B ne krši nikakva pravila i da je umetanje dovršeno.

umetak OperaANJE

U gornjem primjeru:

  • Čvor je dosegao najveći broj ključeva
  • Čvor će se podijeliti, a srednji ključ će postati korijenski čvor preostala dva čvora.
  • U slučaju parnog broja ključeva, srednji čvor će biti odabran lijevim ili desnim prednaprezanjem.

umetak OperaANJE

U gornjem primjeru:

  • Čvor ima manje od maksimalnog broja ključeva
  • 1 je umetnut pored 3, ali je prekršeno pravilo uzlaznog redoslijeda
  • Kako bi se to popravilo, ključevi su sortirani

Slično, 13 i 2 mogu se lako umetnuti u čvor budući da ispunjavaju pravilo manje od maksimalnog broja ključeva za čvorove.

umetak OperaANJE

U gornjem primjeru:

  • Čvor ima ključeve jednake max ključevima.
  • Ključ je umetnut u ciljni čvor, ali krši pravilo maksimalnog broja ključeva.
  • Ciljni čvor je podijeljen, a srednji ključ prema lijevoj pristranosti sada je roditelj novih podređenih čvorova.
  • Novi čvorovi raspoređeni su uzlaznim redoslijedom.

Slično, na temelju gornjih pravila i slučajeva, ostale vrijednosti mogu se jednostavno umetnuti u B stablo.

umetak OperaANJE

Izbrisati OperaANJE

Operacija brisanja ima više pravila od operacija umetanja i pretraživanja.

Primjenjuje se sljedeći algoritam:

  • Pokrenite operaciju pretraživanja i pronađite ciljni ključ u čvorovima
  • Tri su uvjeta primijenjena na temelju lokacije ciljnog ključa, kao što je objašnjeno u sljedećim odjeljcima

Ako je ciljni ključ u čvoru lista

  • Target je u čvoru lista, više od min ključeva.
  • Ovo brisanje neće narušiti svojstvo B stabla
  • Target je u lisnom čvoru, ima min ključnih čvorova
  • Brisanjem ovoga narušit ćete svojstvo B stabla
  • Target čvor može posuditi ključ od neposrednog lijevog čvora ili neposrednog desnog čvora (brat)
  • Brat će reći Da ako ima više od minimalnog broja ključeva
  • Ključ će se posuditi od nadređenog čvora, maksimalna vrijednost će se prenijeti roditelju, maksimalna vrijednost nadređenog čvora prenijet će se ciljnom čvoru i ukloniti ciljnu vrijednost
  • Target je u lisnom čvoru, ali nijedna braća i sestre nemaju više od minimalnog broja ključeva
  • Traži ključ
  • Spajanje s braćom i sestrama i minimalnim nadređenim čvorovima
  • Ukupni ključevi sada će biti veći od min
  • Ciljni ključ bit će zamijenjen minimumom nadređenog čvora

Ako je ciljni ključ u unutarnjem čvoru

  • Ili odaberite, prethodnik po redu ili nasljednik po redu
  • U slučaju prethodnika po redu, bit će odabran maksimalni ključ iz njegovog lijevog podstabla
  • U slučaju nasljednika po redu, bit će odabran minimalni ključ iz njegovog desnog podstabla
  • Ako redoslijed prethodnika ciljnog ključa ima više od min ključeva, samo tada može zamijeniti ciljni ključ maksimumom redoslijeda prethodnika
  • Ako redoslijed prethodnika ciljnog ključa nema više od min ključeva, potražite minimalni ključ redoslijeda nasljednika.
  • Ako redoslijed prethodnika i nasljednika ciljnog ključa imaju manje od min ključeva, tada spojite prethodnika i nasljednika.

Ako je ciljni ključ u korijenskom čvoru

  • Zamijenite maksimalnim elementom podstabla prethodnika prema redoslijedu
  • Ako, nakon brisanja, cilj ima manje od min ključeva, tada će ciljni čvor posuditi maksimalnu vrijednost od svog brata preko roditelja brata.
  • Maksimalnu vrijednost roditelja preuzet će cilj, ali s čvorovima maksimalne vrijednosti brata ili sestre.

Razmotrimo sada operaciju brisanja na primjeru.

Izbrisati OperaANJE

Gornji dijagram prikazuje različite slučajeve operacije brisanja u B-stablu. Ovo B-stablo je reda 5, što znači da je najmanji broj podređenih čvorova koje svaki čvor može imati 3, a maksimalan broj podređenih čvorova koji bilo koji čvor može imati je 5. Dok je minimalni i maksimalni broj ključeva bilo kojeg čvora mogu imati 2 odnosno 4.

Izbrisati OperaANJE

U gornjem primjeru:

  • Ciljni čvor ima ciljni ključ za brisanje
  • Ciljni čvor ima više ključeva od minimalnog broja ključeva
  • Jednostavno izbrišite ključ

Izbrisati OperaANJE

U gornjem primjeru:

  • Ciljni čvor ima ključeve jednake minimalnim ključevima, pa ga ne možete izravno izbrisati jer će prekršiti uvjete

Sada, sljedeći dijagram objašnjava kako izbrisati ovaj ključ:

Izbrisati OperaANJE

  • Ciljni čvor će posuditi ključ od neposrednog brata, u ovom slučaju, prethodnika po redu (lijevog brata) jer nema nasljednika po redu (desnog brata)
  • Maksimalna vrijednost redoslijeda prethodnika će se prenijeti na roditelja, a roditelj će prenijeti maksimalnu vrijednost na ciljni čvor (pogledajte dijagram u nastavku)

Sljedeći primjer ilustrira kako izbrisati ključ koji treba vrijednost od njegovog nasljednika po redu.

Izbrisati OperaANJE

  • Ciljni čvor će posuditi ključ od neposrednog brata, u ovom slučaju, nasljednika po redu (desni brat) jer njegov prethodnik po redu (lijevi brat) ima ključeve jednake minimalnim ključevima.
  • Minimalna vrijednost nasljednika po redu bit će prebačena na roditelja, a roditelj će prenijeti maksimalnu vrijednost na ciljni čvor.

U donjem primjeru, ciljni čvor nema nijednog brata koji može dati svoj ključ ciljnom čvoru. Stoga je potrebno spajanje.

Pogledajte postupak brisanja takvog ključa:

Izbrisati OperaANJE

  • Spojite ciljni čvor s bilo kojim od njegovih neposrednih srodnika zajedno s nadređenim ključem
  • Ključ nadređenog čvora odabire se kao braća i sestre između dva čvora koja se spajaju
  • Izbrišite ciljni ključ iz spojenog čvora

Izbrisati Operacijski pseudo kod

private int removeBiggestElement()
{
    if (root has no child)
        remove and return the last element
    else {
        answer = subset[childCount-1].removeBiggestElement()
        if (subset[childCount-1].dataCount < MINIMUM)
            fixShort (childCount-1)
        return answer
    }
}

Izlaz:

Najveći element se briše iz B-stabla.

rezime

  • B Tree je struktura podataka koja se sama uravnotežuje za bolje pretraživanje, umetanje i brisanje podataka s diska.
  • B Stablo je regulirano navedenim stupnjem
  • B Ključevi stabla i čvorovi raspoređeni su uzlaznim redoslijedom.
  • Operacija pretraživanja B stabla je najjednostavnija, koja uvijek počinje od korijena i počinje provjeravati je li ciljni ključ veći ili manji od vrijednosti čvora.
  • Operacija umetanja B stabla prilično je detaljna, koja prvo pronalazi odgovarajući položaj umetanja za ciljni ključ, umeće ga, procjenjuje valjanost B stabla u odnosu na različite slučajeve, a zatim restrukturira čvorove B stabla u skladu s tim.
  • Operacija brisanja B stabla prvo traži ciljni ključ koji treba izbrisati, briše ga, procjenjuje valjanost na temelju nekoliko slučajeva kao što su minimalni i maksimalni ključevi ciljnog čvora, braće i sestara i roditelja.