B-strom (vyslovováno v ruštině jako B-strom ) je datová struktura , vyhledávací strom. Z hlediska vnější logické reprezentace - vyvážený , vysoce rozvětvený strom . Často se používá k ukládání dat do externí paměti.
Použití B-stromů bylo poprvé navrženo R. Bayerem a E. McCreightem v roce 1970 .
Vyvážený znamená, že délky libovolných dvou cest od kořene k listům se neliší o více než jednu.
Větvení stromu je vlastnost každého uzlu stromu odkazovat na velký počet následných uzlů.
Z hlediska fyzické organizace je B-strom reprezentován jako multilistová struktura paměťových stránek, to znamená, že každý uzel stromu odpovídá paměťovému bloku (stránce). Vnitřní a listové stránky mají obvykle jinou strukturu.
Struktura B-stromu se používá k uspořádání indexů v mnoha moderních DBMS .
B-strom lze použít ke strukturování (indexování) informací na pevném disku (obvykle metadata). Doba přístupu k libovolnému bloku na pevném disku je velmi dlouhá (řádově milisekundy), protože je určena rychlostí rotace disku a pohybu hlavy. Proto je důležité snížit počet uzlů skenovaných při každé operaci. Použití vyhledávání v seznamu pokaždé k nalezení náhodného bloku by mohlo vést k nadměrnému počtu přístupů na disk kvůli nutnosti postupně procházet všemi jeho prvky předcházejícími danému, zatímco hledání v B-stromu kvůli vlastnostem rovnováhu a vysoké větvení, může výrazně snížit počet takových operací.
Relativně jednoduchá implementace algoritmů a existence hotových knihoven (včetně těch pro C ) pro práci se strukturou B-stromu činí takovou organizaci paměti oblíbenou v široké škále programů, které pracují s velkým množstvím dat.
B-strom je strom, který splňuje následující vlastnosti:
Vlastnost 2 lze uvést různě: každý uzel B-stromu, kromě listů, lze považovat za uspořádaný seznam, ve kterém se střídají klíče a ukazatele na potomky.
Pokud je klíč obsažen v kořenovém adresáři, je nalezen. V opačném případě určíme interval a přejdeme k odpovídajícímu potomkovi. opakujeme.
Strom potomků určitého uzlu budeme nazývat podstrom skládající se z tohoto uzlu a jeho potomků.
Nejprve definujme funkci, která přidá klíč K do potomka stromu uzlu x. Po provedení funkce bude ve všech předávaných uzlech, snad kromě samotného uzlu x, méně než , ale ne méně než , klíčů.
Nyní definujeme přidání klíče K do celého stromu. Písmeno R znamená kořenový uzel.
Pokud je kořen také list, to znamená, že ve stromu je pouze jeden uzel, jednoduše odstraníme klíč z tohoto uzlu. Jinak nejprve najdeme uzel obsahující klíč a pamatujeme si cestu k němu. Nechte tento uzel být .
Pokud - list, odstraňte klíč odtud. Pokud v uzlu zbývá alespoň klíčů , zastavíme se. Jinak se podíváme na počet klíčů ve dvou sousedních sourozeneckých uzlech. Pokud existuje sousední pravý uzel a má alespoň klíčů, přidáme k oddělovacímu klíči mezi ním a sousedním pravým uzlem a místo tohoto klíče vložíme první klíč sousedního pravého uzlu, načež zastavíme . Pokud tomu tak není, ale existuje sousední levý uzel a má alespoň klíčů, přidáme k oddělovacímu klíči mezi ním a sousedním levým uzlem a místo tohoto klíče vložíme poslední klíč sousedního levý uzel, po kterém se zastavíme. Nakonec, pokud levý klíč selže, sloučíme uzel se sousedním levým nebo pravým uzlem a přesuneme klíč, který předtím odděloval tyto dva uzly, do sloučeného uzlu. V tomto případě mohou v nadřazeném uzlu zůstat pouze klíče . Pak, pokud se nejedná o kořen, provedeme s ním podobný postup. Pokud jsme v důsledku toho dosáhli kořene a zbývají v něm klíče od 1 do, není třeba nic dělat, protože kořen může mít méně klíčů. Pokud v kořenu nezůstal jediný klíč, vyloučíme kořenový uzel a jeho jediného potomka uděláme novým kořenem stromu.
Pokud není list a K je jeho -tý klíč, odstraňte klíč zcela vpravo z podstromu potomků -tého potomka nebo naopak klíč zcela vlevo z podstromu potomků -tého potomka . Poté nahradíme klíč K dálkovým klíčem. K odstranění klíče dojde tak, jak je popsáno v předchozím odstavci.
Hlavní nevýhodou B-stromů je, že nemají efektivní prostředky pro získávání dat (tj. metodu procházení stromem) uspořádaných jinou vlastností, než je zvolený klíč.
Strom (datová struktura) | |
---|---|
Binární stromy | |
Samovyrovnávací binární stromy |
|
B-stromy |
|
předponové stromy |
|
Binární dělení prostoru | |
Nebinární stromy |
|
Rozbití prostoru |
|
Jiné stromy |
|
Algoritmy |
|