definice ( tree) autoři: Rudolf Bayer, Ed McCreight vyvážený strom řádu m ( ) každý uzel nejméně a nejvýše m potomků s výjimkou kořene každý vnitřní uzel obsahuje o méně klíčů než je počet potomků (ukazatelů) od ( ) do ( ) všechny vnější uzly (listy) mají stejnou hloubku datová realizace ADS (abstraktní datové struktury) Datová struktura není vhodná pro malý počet záznamů!
použití: celá nebo část struktury stromu je uložena v nějaké externí (vnější) sekundární paměti např. pevný disk, magnetický disk (databáze) velmi časté pro tento případ je struktura optimalizována přístup do externí paměti je časově náročný minimalizace počtu přístupů do této paměti uzel = stránka o m záznamech viz: B tree animation příklad: vyvážený B strom řádu každý uzel má nejméně a nejvýše potomky (ukazatele) každý vnitřní uzel obsahuje nejméně a nejvýše 3 záznamy 9 7 6 7 9
vkládání: nový klíč se vždy vkládá do listové stránky ve stránce se klíče řadí podle velikosti přeplnění listové stránky stránka se rozdělí na dvě nové stránky prostřední klíč se přesune do rodičovské stránky pokud rodičovská stránka neexistuje, tak se vytvoří přeplnění rodičovské stránky opakujeme předchozí postup dokud nedojde k zařazení nebo k vytvoření nového kořene Pole klíčů:,,,,, 7,,, 3 strom řádu 3 každý uzel bude mít 3 potomky (podstromy) s výjimkou kořene každý vnitřní uzel bude mít nejméně a nejvýše záznamy k k 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3 6
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3 7
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3 9
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3 7 7
Pole klíčů:,,,,, 7,,, 3 7 7 Pole klíčů:,,,,, 7,,, 3 7
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3 6
Pole klíčů:,,,,, 7,,, 3 Pole klíčů:,,,,, 7,,, 3 7
Pole klíčů:,,,,, 7,,, 3 3 3 Pole klíčů:,,,,, 7,,, 3 3 3
Pole klíčů:,,,,, 7,,, 3 3 3 Pole klíčů:,,,,, 7,,, 3 3 3 9
Pole klíčů:,,,,, 7,,, 3 3 rušení v listové stránce: máme více jak záznamů zrušíme záznam pouze v této listové stránce + posun máme právě záznamů v sousední listové stránce je dostatek klíčů (více jak ) přesuneme záznam z rodičovské stránky do listové přesuneme záznam ze sousední stránky do rodičovské v žádné sousední stránce není dostatek klíčů spojíme dohromady záznamy v obou sousedních stránkách spolu s příslušným záznamem v rodičovské stránce
rušení v rodičovské stránce: máme více jak záznamů ve stránce potomka je dostatek klíčů (více jak ) přesuneme záznam ze stránky potomka do rodičovské stránky ve stránce potomka není dostatek klíčů přesuneme záznamy ze stránky potomka do sousední stránky potomka máme pouze záznamů ve stránce potomka je dostatek klíčů (více jak ) přesuneme záznam ze stránky potomka do rodičovské stránky ve stránce potomka není dostatek klíčů přesuneme záznamy ze stránky potomka do sousední stránky potomka a řešíme problém o hladinu výše Pole klíčů:,,,,, 7,,, 3 najdeme 3 v listové stránce je více jak záznamů
Pole klíčů:,,,,, 7,,, 3 odstraníme 3 zrušíme záznam pouze v listové stránce Pole klíčů:,,,,, 7,,, 3 odstraníme 3 posuneme ostatní záznamy v listové stránce
Pole klíčů:,,,,, 7,,, 3 najdeme 3 rušíme záznam v rodičovské stránce Pole klíčů:,,,,, 7,,, 3 odstraníme 3 ve stránce potomka je dostatek klíčů (více jak ) 3
Pole klíčů:,,,,, 7,,, 3 odstraníme 7 3 přesuneme záznam ze stránky potomka do rodičovské stránky Pole klíčů:,,,,, 7,,, 3 najdeme 7 3 rušíme záznam v rodičovské stránce
Pole klíčů:,,,,, 7,,, 3 odstraníme 7 3 přesuneme záznamy ze stránky potomka do sousední stránky potomka řešíme problém o hladinu výše Pole klíčů:,,,,, 7,,, 3 odstraníme 7 3 přesuneme záznamy ze stránky potomka do sousední stránky potomka řešíme problém o hladinu výše
Pole klíčů:,,,,, 7,,, 3 odstraníme 7 3 přesuneme záznamy ze stránky potomka do sousední stránky potomka řešíme problém o hladinu výše Pole klíčů:,,,,, 7,,, 3 odstraníme 7 3 přesuneme záznamy ze stránky potomka do sousední stránky potomka řešíme problém o hladinu výše 6
Pole klíčů:,,,,, 7,,, 3 odstraníme 7 3 B( ) (m) strom řádu m: log log počet uzlů hloubka počet záznamů m m m.(m ) m m.(m ) : : : m h h m h.(m ) 7