B-strom: Porovnání verzí
Smazaný obsah Přidaný obsah
mBez shrnutí editace značka: editace z Vizuálního editoru |
m robot: přidáno {{Autoritní data}}; kosmetické úpravy |
||
Řádek 22:
== Princip uložení dat ==
Data jsou ve stromu uložena jako setříděné hodnoty, které rozdělují strom na jednotlivé [[Strom (datová struktura)#Podstrom|podstromy]]. Například pokud nějaký uzel má tři potomky, musí být v tomto uzlu uloženy dva klíče ''k''<sub>1</sub> a ''k''<sub>2</sub>, které budou uzel rozdělovat. Všechny hodnoty které jsou menší než ''k''<sub>1</sub> musí být uloženy v levém podstromu, hodnoty které jsou větší než ''k''<sub>1</sub> a menší než ''k''<sub>2</sub> musí být uloženy v prostředním podstromu, a konečně všechny hodnoty větší než ''k''<sub>2</sub> musí být v pravém podstromu. Na tyto podstromy jsou samozřejmě v uzlu uloženy ukazatele.
Řádek 40 ⟶ 39:
== Operace se stromem ==
S B-stromem jsou definovány tak jako v každém jiném stromu základní operace pro vyhledávání, vkládání a mazání dat (klíčů) ze stromu. Mějme strom této struktury : [[Soubor:B-tree-definition.png|
=== Operace vyhledávání ===
Řádek 49 ⟶ 48:
## Pokud je hodnota tohoto klíče větší a '''aktuální uzel není listem''', zapamatujeme si ukazatel vlevo od tohoto klíče. Pokud je aktuální uzel zároveň listem, skočíme na krok číslo 5 (není již kde vyhledávat).
# V případě, že máme z minulého kroku ukazatel, následujeme ho a pokračujeme krokem jedna. V případě, že ukazatel není k dispozici, znamená to, že musíme následovat ukazatel, který je nejvíce vpravo (hledaná hodnota je větší než klíč s největší hodnotou v tomto uzlu).
# Nalezli jsme požadovanou hodnotu, končíme. [[Soubor:B-tree-search.png|
# Nenalezli jsme požadovanou hodnotu, končíme.
Řádek 64 ⟶ 63:
Samozřejmě, že pokud přidáváme klíč do rodiče, musíme zkontrolovat, jestli se do něj vejde a pokud ne, musíme ho rozdělit stejným způsobem. Pokud se takovýmto postupem dostaneme až do kořene, musíme vytvořit nový kořen s pouze jednou položkou, která nám původní kořen rozdělí na dvě části.
[[Soubor:B-tree-splitt.png|
Příklad: Máme B-strom stupně 5 tak, jako je na obrázku. Každý uzel může mít maximálně 4 klíče. Pokud do dítěte chceme uložit další hodnotu, nejde to a uzel se rozpadne. Vkládaný klíč (nemusí to být nutně klíč ''k''<sub>3</sub>, tento klíč je zeleně zvýrazněn protože je ''prostřední'') se virtuálně vloží a poté se vybere prostřední klíč (zeleně). Tento prostřední klíč se poté vloží do rodiče (označen jako ''k''<sub>3</sub>') a původní uzel se rozpadne na dva, tak jak bylo napsáno výše.
Řádek 83 ⟶ 82:
==== Operace spojení uzlů ====
[[Soubor:B-tree-join.png|
Pokud chceme spojit dva uzly, musíme v zásadě provést 2 kroky:
# Přesuneme všechny klíče z pravého sourozence do levého, tento pravý podstrom následně zrušíme.
Řádek 93 ⟶ 92:
==== Operace přesunutí klíče ====
[[Soubor:B-tree-move.png|
Přesunutí klíče z jednoho sourozence do druhého – uvažujme přesunutí klíče z pravého podstromu do levého, tak jak je to znázorněno na obrázku.
Řádek 120 ⟶ 119:
{{Stromy Inf}}
{{Autoritní data}}
[[Kategorie:Stromy (datové struktury)]]
|