B-puu andmestruktuuris: otsing, lisamine, kustutamine

โšก Nutikas kokkuvรตte

Andmestruktuuri B-puu on isetasakaalustuv puu, mis hoiab andmed sorteerituna kiireks otsingu-, lisamis- ja kustutamistoiminguteks kettal. See selgitab B-puu reegleid, selle ajalugu ning otsingu-, lisamis- ja kustutamisalgoritme nรคidete abil.

  • ๐ŸŒฒ Ise tasakaalustamine: B-puu hoiab kรตik lehed samal kรตrgusel ja pรผsib iga toimingu ajal tasakaalus.
  • ๐Ÿ”ข Jรคrjekord (m): Aste m mรครคrab sรตlme maksimaalse laste (m) ja vรตtmete (m โˆ’ 1) arvu.
  • ๐Ÿ” Otsing: Otsimine algab tรผvest ja liigub vasakule vรตi paremale, vรตrreldes helistikku.
  • โž• Lisa: Lisamine leiab รตige koha ja eraldab terve sรตlme selle keskmisest vรตtmest.
  • โž– Kustuta: Kustutamine kรคsitleb lehe-, sise- ja juurjuhte laenamise ja รผhendamise abil.

B PUUD andmestruktuuris: otsimine, lisamine, kustutamine Operanรคidis

Mis on B-puu?

B puu on isetasakaalustuv andmestruktuur, mis pรตhineb kindlal reeglite komplektil andmete kiiremaks ja mรคlusรครคstlikumaks otsimiseks, sisestamiseks ja kustutamiseks. Selle saavutamiseks jรคrgitakse B-puu loomiseks jรคrgmisi reegleid.

B-puu on andmestruktuuris spetsiaalne puutรผรผp. Selle meetodi tutvustasid esmakordselt McCreight ja Bayer 1972. aastal, nimetades selle kรตrguselt tasakaalustatud m-suunaliseks otsingupuuks. See aitab sรคilitada andmeid sorteeritult ja vรตimaldab lรผhema ajaga teha mitmesuguseid toiminguid, nagu sisestamine, otsimine ja kustutamine.

B-puu reeglid

B-puu loomise olulised reeglid on jรคrgmised:

  • Kรตik lehed luuakse samal tasemel.
  • B-puu mรครคratakse astmete arvu jรคrgi, mida nimetatakse ka "jรคrjekorraks" (mille mรครคrab vรคline tegija, nรคiteks programmeerija), millele viidatakse kui m edasi. Vรครคrtus m sรตltub ploki suurusest kettal, millel andmed peamiselt asuvad.
  • Sรตlme vasakpoolsel alampuul on vรคiksemad vรครคrtused kui alampuu paremal poolel. See tรคhendab, et sรตlmed sorteeritakse ka kasvavas jรคrjekorras vasakult paremale.
  • Juursรตlme ja selle tรผtarsรตlmede maksimaalne vรตtmete arv arvutatakse jรคrgmise valemi abil: m โˆ’ 1. Nรคiteks:
    m = 4
    max keys: 4 โˆ’ 1 = 3

B-puu reeglid

  • Iga sรตlm, vรคlja arvatud juur, peab sisaldama minimaalset arvu vรตtmeid [m/2] โˆ’ 1. Nรคiteks:
    m = 4
    min keys: 4/2 โˆ’ 1 = 1
  • Maksimaalne alamsรตlmede arv, mis sรตlmel vรตib olla, on vรตrdne selle astmega, mis on m.
  • Minimaalsed lapsed, mis sรตlmel vรตivad olla, on pool jรคrjekorrast, mis on m/2 (vรตetakse รผlemmรครคra).
  • Kรตik sรตlme vรตtmed sorteeritakse kasvavas jรคrjekorras.

Miks kasutada B-puud

B-puu kasutamise pรตhjused on jรคrgmised:

  • Vรคhendab kettale tehtud lugemiste arvu.
  • B-puid saab hรตlpsalt optimeerida, et kohandada nende suurust (st lapsesรตlmede arvu) vastavalt ketta suurusele.
  • See on spetsiaalselt loodud tehnika suure andmehulga kรคsitlemiseks.
  • See on andmebaaside ja failisรผsteemide jaoks kasulik algoritm.
  • Hea valik suurte andmeplokkide lugemiseks ja kirjutamiseks.

B-puu ajalugu

  • Andmed salvestatakse kettale plokkidena. Kui need andmed tuuakse pรตhimรคllu (vรตi muutmรคllu), nimetatakse neid andmestruktuuriks.
  • Suurte andmemahtude korral nรตuab รผhe kirje otsimine kettalt kogu ketta lugemist; see suurendab aega ja pรตhimรคlu tarbimist kettale juurdepรครคsu suure sageduse ja andmete suuruse tรตttu.
  • Selle probleemi lahendamiseks luuakse indekstabelid, mis salvestavad kirjete viited vastavalt plokkidele, milles need asuvad. See vรคhendab drastiliselt aja- ja mรคlutarbimist.
  • Kuna meil on tohutult andmeid, saame luua mitmetasandilisi indeksitabeleid.
  • Mitmetasandilise indeksi saab kujundada B-puu abil kee jaoksping andmed on sorteeritud isetasakaalustuval viisil.

Otsing Operamine

Otsinguoperatsioon on B-puu lihtsaim operatsioon. Rakendatakse jรคrgmist algoritmi:

  • Olgu otsitav vรตti (vรครคrtus) โ€žkโ€œ.
  • Alustage otsimist juurest ja liikuge rekursiivselt alla.
  • Kui k on vรคiksem kui juurvรครคrtus, otsitakse vasakpoolsest alampuust; kui k on suurem kui juurvรครคrtus, otsitakse paremast alampuust.
  • Kui sรตlmel on leitud k, tagastage sรตlm lihtsalt.
  • Kui k-d sรตlmes ei leidu, liikuge suurema vรตtmega alla lapse juurde.
  • Kui puust k ei leia, tagastame NULL.

Sisesta Operamine

Kuna B-puu on isetasakaalustuv puu, ei saa vรตtit suvalisse sรตlme sundida sisestama. Kehtib jรคrgmine algoritm:

  • Kรคivitage otsinguoperatsioon ja leidke sobiv sisestuskoht.
  • Sisestage uus vรตti รตigesse kohta, kuid kui sรตlmel on juba maksimaalne arv vรตtmeid:
  • Sรตlm koos รคsja sisestatud vรตtmega eraldatakse keskmisest elemendist.
  • Keskmisest elemendist saab รผlejรครคnud kahe alamsรตlme vanem.
  • Sรตlmed peavad vรตtmed รผmber paigutama kasvavas jรคrjekorras.

๐Ÿ’ก NIPP: Jรคrgnev on mitte Lisamisalgoritmi kohta kehtib vรคide: โ€žKuna sรตlm on tรคis, siis see jaguneb ja seejรคrel sisestatakse uus vรครคrtus.โ€œ Esmalt sisestatakse vรตti ja alles seejรคrel jaguneb sรตlm, kui see รผletab maksimaalse vรตtmete arvu.

Sisesta Operamine

รœlaltoodud nรคites:

  • Otsi vรตtme jaoks sobivat positsiooni sรตlmes.
  • Sisesta vรตti sihtsรตlme ja kontrolli reegleid.
  • Kas pรคrast sisestamist on sรตlmel rohkem vรตi vรตrdne minimaalse vรตtmete arvuga, mis on 1? Sel juhul jah, on. Kontrollige jรคrgmist reeglit.
  • Kas sรตlmel on pรคrast sisestamist rohkem vรตtmeid kui maksimaalne lubatud arv, mis on 3? Antud juhul ei, sel juhul ei ole. See tรคhendab, et B-puu ei riku รผhtegi reeglit ja sisestamine on lรตppenud.

Sisesta Operamine

รœlaltoodud nรคites:

  • Sรตlm on saavutanud maksimaalse vรตtmete arvu.
  • Sรตlm jaguneb ja keskmisest vรตtmest saab kahe รผlejรครคnud sรตlme juursรตlm.
  • Paarisarvu klahvide korral valitakse keskmine sรตlm vasakpoolse vรตi parempoolse nihke abil.

Sisesta Operamine

รœlaltoodud nรคites:

  • Sรตlmel on vรคhem kui maksimaalne arv vรตtmeid.
  • Number 1 lisatakse arvu 3 kรตrvale, aga kasvava jรคrjekorra reegel on rikutud.
  • Selle parandamiseks sorteeritakse vรตtmed.

Samamoodi saab sรตlme hรตlpsalt lisada numbreid 13 ja 2, kuna need vastavad sรตlmede reeglile โ€žvรตtmeid on vรคhem kui maksimaalne arvโ€œ.

Sisesta Operamine

รœlaltoodud nรคites:

  • Sรตlmel on vรตtmed, mis on vรตrdsed maksimaalsete vรตtmetega.
  • Vรตti sisestatakse sihtsรตlme, kuid see rikub maksimaalse vรตtmete arvu reeglit.
  • Sihtsรตlm on poolitatud ja vasakpoolse nihkega keskmine vรตti on nรผรผd uute alamsรตlmede vanem.
  • Uued sรตlmed on jรคrjestatud kasvavas jรคrjekorras.

Samamoodi saab รผlaltoodud reeglite ja juhtumite pรตhjal รผlejรครคnud vรครคrtused hรตlpsasti B-puusse sisestada.

Sisesta Operamine

kustutama Operamine

Kustutamistoimingul on rohkem reegleid kui lisamis- ja otsingutoimingul. Kehtib jรคrgmine algoritm:

  • Kรคivitage otsinguoperatsioon ja leidke sรตlmedest sihtvรตti.
  • Sihtvรตtme asukoha pรตhjal rakendatakse kolme tingimust, nagu on selgitatud jรคrgmistes osades.

Kui sihtvรตti on lehesรตlmes

  • Target on lehesรตlmes, rohkem kui min vรตtmeid. Selle kustutamine ei riku B-puu omadust.
  • Target asub lehesรตlmes ja sellel on min vรตtmesรตlmi. Selle kustutamine rikub B-puu omadust.
  • Sihtsรตlm saab laenata vรตtme vahetult vasakult vรตi vahetult paremalt sรตlmelt (รตde-vend).
  • ร•de-vend รผtleb jah kui sellel on rohkem kui minimaalne vรตtmete arv.
  • Vรตti laenatakse vanemsรตlmelt, maksimaalne vรครคrtus kantakse vanemsรตlmele, vanemsรตlme maksimaalne vรครคrtus kantakse sihtsรตlmele ja sihtvรครคrtus eemaldatakse.
  • Target on lehesรตlmes, kuid รผhelgi รตde-vennal pole rohkem vรตtmeid kui minimaalne arv: otsige vรตtit, รผhendage รตde-vendade ja minimaalse arvu vanemsรตlmedega, vรตtmete koguarv on nรผรผd suurem kui minimaalne arv ja sihtvรตti asendatakse vanemsรตlme minimaalse arvuga.

Kui sihtvรตti on sisemises sรตlmes

  • Valige kas jรคrjekorras eelkรคija vรตi jรคrjekorras jรคreltulija.
  • Jรคrjekorras eelkรคija puhul valitakse selle vasakpoolsest alampuust maksimaalne vรตti.
  • Jรคrjekorras oleva jรคrglase puhul valitakse selle parempoolsest alampuust minimaalne vรตti.
  • Ainult siis, kui sihtvรตtme jรคrjekorras oleval eelkรคijal on rohkem kui min-vรตtmeid, saab see sihtvรตtme jรคrjekorras oleva eelkรคija maksimaalse vรตtmega asendada.
  • Kui sihtvรตtme jรคrjekorras oleva eelkรคija vรตtmete arv ei ole suurem kui min, otsige jรคrjekorras oleva jรคreltulija minimaalset vรตtit.
  • Kui sihtvรตtme jรคrjekorras eelkรคijal ja jรคrglasel on mรตlemal vรคhem kui min vรตti, รผhendage eelkรคija ja jรคrglane.

Kui sihtvรตti on juursรตlmes

  • Asenda eelkรคija alampuu jรคrjekorras oleva maksimaalse elemendiga.
  • Kui pรคrast kustutamist on sihtmรคrgil vรคhem kui miinimumvรตtmeid, laenab sihtsรตlm oma รตelt-vennalt รตe-venna รผlemsรตlme kaudu maksimaalse vรครคrtuse.
  • Siht vรตtab vanema maksimaalse vรครคrtuse, kuid รตe-venna maksimaalse vรครคrtuse sรตlmedega.

Vaatame nรผรผd nรคite abil kustutamistoimingut.

kustutama Operamine

รœlaltoodud diagramm nรคitab B-puu kustutusoperatsiooni erinevaid juhtumeid. See B-puu on 5. jรคrku, mis tรคhendab, et sรตlme minimaalne tรผtarsรตlmede arv on 3 ja maksimaalne tรผtarsรตlmede arv on 5. Sรตlme minimaalne ja maksimaalne vรตtmete arv on vastavalt 2 ja 4.

kustutama Operamine

รœlaltoodud nรคites:

  • Sihtsรตlmel on kustutatav sihtvรตti.
  • Sihtsรตlmel on vรตtmeid rohkem kui minimaalne vรตtmete arv.
  • Kustuta vรตti lihtsalt รคra.

kustutama Operamine

รœlaltoodud nรคites:

  • Sihtsรตlmel on vรตtmed, mis on vรตrdsed minimaalsete vรตtmetega, seega ei saa me seda otse kustutada, kuna see rikub tingimusi.

Nรผรผd selgitab jรคrgmine diagramm, kuidas seda vรตtit kustutada:

kustutama Operamine

  • Sihtsรตlm laenab vรตtme vahetult oma รตelt-vennalt, antud juhul jรคrjekorras olevalt eelkรคijalt (vasakpoolne vend-vend), kuna sellel pole jรคrjekorras olevat jรคreltulijat (parempoolne vend-vend).
  • Jรคrjekorras eelkรคija maksimaalne vรครคrtus kantakse รผlemale ja vanem kannab maksimaalse vรครคrtuse sihtsรตlmele (vt allolevat diagrammi).

Jรคrgmine nรคide illustreerib, kuidas kustutada vรตtit, mis vajab vรครคrtust selle jรคrjestuse jรคrglasest.

kustutama Operamine

  • Sihtsรตlm laenab vรตtme vahetult temalt รตelt-vennalt, antud juhul jรคrjekorras olevalt jรคrglaselt (parempoolne jรคrglane), kuna selle jรคrjekorras oleva eelkรคija (vasakpoolne jรคrglane) vรตtmed on vรตrdsed minimaalsete vรตtmetega.
  • Jรคrjekorras jรคrglase minimaalne vรครคrtus kantakse รผle vanemale ja รผlem edastab maksimaalse vรครคrtuse sihtsรตlmele.

Allolevas nรคites pole sihtsรตlmel รผhtegi รตde-venda, kes saaks oma vรตtme sihtsรตlmele anda. Seetรตttu on vaja รผhendamist. Vaadake sellise vรตtme kustutamise protseduuri:

kustutama Operamine

  • รœhenda sihtsรตlm mis tahes selle vahetu รตe-vennaga koos vanemvรตtmega.
  • Valitakse kahe รผhineva sรตlme vahel asuv vanemsรตlme vรตti.
  • Kustuta รผhendatud sรตlmest sihtvรตti.

kustutama Operation Pseudo Code

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
    }
}

Vรคljund: Suurim element kustutatakse B-puust.

KKK

Jah. Tehisintellekti tรถรถriistad suudavad genereerida samm-sammult diagramme vรตi animatsioone antud jรคrjekorra lisamistest, jagamistest ja kustutamistest. See aitab รตppijatel nรคha, kuidas puu tasakaalustub, kuigi peaksite iga sammu B-puu reeglite suhtes kontrollima.

B-puud ja nende variandid indekseerivad suuri andmekogumeid ja vektorsalvestusi, millele tehisintellekti sรผsteemid toetuvad, seega otsingud treeningandmete vรตi manustuste kaudu pรผsivad kiired. Andmebaas, mitte mudel, kasutab B-puud ketta lugemiste vรคhendamiseks.

Binaarse otsingupuu sรตlmel on maksimaalselt kaks last ja รผks vรตti. B-puu sรตlm vรตib sisaldada palju vรตtmeid ja palju lapsi, s.t.ping puu lรผhike ja vรคhendab ketta lugemisi, mis teeb selle ideaalseks andmebaaside ja failisรผsteemide jaoks.

Otsi, lisa ja kustuta iga kรคivitus O(log n) ajaga, kus n on vรตtmete arv. Kuna igas sรตlmes on palju vรตtmeid, jรครคb puu madalaks, seega on kettale juurdepรครคsude arv vรคga vรคike.

Vรตta see postitus kokku jรคrgmiselt: