B-træ (udtales på russisk som B-træ ) er en datastruktur , et søgetræ. Fra den ydre logiske repræsentations synspunkt - et afbalanceret , stærkt forgrenet træ . Bruges ofte til at gemme data i ekstern hukommelse.
Brugen af B-træer blev først foreslået af R. Bayer og E. McCreight i 1970 .
Balanceret betyder, at længden af to vilkårlige stier fra roden til bladene ikke afviger mere end én.
Forgrening af et træ er egenskaben for hver træknude til at referere til et stort antal efterkommerknuder.
Fra et fysisk organiseringssynspunkt er B-træet repræsenteret som en multilistestruktur af hukommelsessider, det vil sige, at hver knude i træet svarer til en hukommelsesblok (side). Inder- og bladsider har normalt en anden struktur.
B-træstrukturen bruges til at organisere indekser i mange moderne DBMS'er .
Et B-træ kan bruges til at strukturere (indeksere) information på en harddisk (normalt metadata). Adgangstiden til en vilkårlig blok på en harddisk er meget lang (i størrelsesordenen millisekunder), da den bestemmes af diskens rotationshastighed og hovedbevægelsen. Derfor er det vigtigt at reducere antallet af noder, der scannes ved hver operation. Brug af en listesøgning hver gang for at finde en tilfældig blok kunne føre til et for stort antal diskadgange på grund af behovet for sekventielt at passere gennem alle dens elementer forud for den givne blok, mens søgningen i B-træet på grund af egenskaberne ved balance og høj forgrening, kan reducere antallet af sådanne operationer betydeligt.
Den relativt enkle implementering af algoritmer og eksistensen af færdige biblioteker (inklusive dem til C ) til at arbejde med B-træstrukturen gør en sådan hukommelsesorganisation populær i en lang række programmer, der arbejder med store mængder data.
Et B-træ er et træ, der opfylder følgende egenskaber:
Egenskab 2 kan angives forskelligt: Hver knude på B-træet, bortset fra blade, kan betragtes som en ordnet liste, hvor nøgler og pejlemærker til børn veksler.
Hvis nøglen er indeholdt i roden, findes den. Ellers bestemmer vi intervallet og går til den tilsvarende efterkommer. Vi gentager.
Vi vil kalde træet af efterkommere af en bestemt node for et undertræ, der består af denne node og dens efterkommere.
Lad os først definere en funktion, der tilføjer nøglen K til det underordnede træ for node x. Efter udførelse af funktionen vil der i alle beståede noder, undtagen måske selve noden x, være færre end , men ikke mindre end , nøgler.
Lad os nu definere tilføjelse af nøglen K til hele træet. Bogstavet R står for rodnoden.
Hvis roden også er et blad, det vil sige, at der kun er en knude i træet, fjerner vi simpelthen nøglen fra denne knude. Ellers finder vi først noden, der indeholder nøglen, og husker stien til den. Lad denne node være .
Hvis - blad, slet nøglen derfra. Hvis der i det mindste er nøgler tilbage i noden , stopper vi der. Ellers ser vi på antallet af nøgler i to nabosøskendenoder. Hvis der er en tilstødende højre node, og den har mindst nøgler, tilføjer vi til separatornøglen mellem den og den tilstødende højre node, og i stedet for denne nøgle sætter vi den første nøgle af den tilstødende højre node, hvorefter vi stopper . Hvis dette ikke er tilfældet, men der er en tilstødende venstre node, og den har mindst nøgler, tilføjer vi separatornøglen mellem den og den tilstødende venstre node, og i stedet for denne nøgle sætter vi den sidste nøgle af naboen venstre knude, hvorefter vi stopper. Til sidst, hvis den venstre tast fejler, slår vi knudepunktet sammen med den tilstødende venstre eller højre knude, og flytter den nøgle, der tidligere adskilte disse to knudepunkter, ind i den fusionerede knude. I dette tilfælde kan kun nøgler forblive i den overordnede node . Så, hvis det ikke er en rod, udfører vi en lignende procedure med den. Hvis vi som følge heraf har nået roden, og der er fra 1 til nøgler tilbage i den, skal der ikke gøres noget, for roden kan have færre nøgler. Hvis der ikke er en eneste nøgle tilbage i roden, udelukker vi rodnoden og gør dens eneste underordnede til træets nye rod.
Hvis ikke er et blad, og K er dets -te nøgle, skal du slette nøglen længst til højre fra efterkommerundertræet i -te efterkommer eller omvendt nøglen længst til venstre fra efterkommerundertræet i -te efterkommer . Derefter erstatter vi nøglen K med fjernbetjeningen. Sletningen af nøglen sker som beskrevet i det foregående afsnit.
Den største ulempe ved B-træer er, at de ikke har et effektivt middel til at hente data (det vil sige en trægennemløbsmetode) bestilt af en anden egenskab end den valgte nøgle.
Træ (datastruktur) | |
---|---|
Binære træer | |
Selvbalancerende binære træer |
|
B-træer | |
præfiks træer |
|
Binær opdeling af rummet | |
Ikke-binære træer |
|
At bryde rummet op |
|
Andre træer |
|
Algoritmer |
|