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.
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
medasi. Vรครคrtusmsรต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
- 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.
ร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.
ร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.
ร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โ.
ร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.
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.
ร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.
ร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.
ร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:
- 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.
- 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:
- ร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.













