B-Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Podobné dokumenty
Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)

Základní datové struktury III: Stromy, haldy

Stromy, haldy, prioritní fronty

AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující

Binární vyhledávací stromy pokročilé partie

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Algoritmy výpočetní geometrie

Radek Mařík

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

ADT STROM Lukáš Foldýna

Dynamické datové struktury III.

Rekurentní rovnice, strukturální indukce

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Binární vyhledávací stromy

TGH07 - Chytré stromové datové struktury

TGH07 - Chytré stromové datové struktury

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

k-dimenzionálním prostoru. problém: Zkonstruovat strom, který rozděluje prostor polorovinami

BINARY SEARCH TREE

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom

Algoritmy a datové struktury

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Stromy. Jan Hnilica Počítačové modelování 14

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Rekurentní rovnice, strukturální indukce

Dynamické programování. Optimální binární vyhledávací strom

Základy algoritmizace c2007 Michal Krátký, Jiří Dvorský 1/57

Dynamické datové struktury IV.

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

BINARY SEARCH TREE

Kapitola 11: Indexování a hešování. Základní představa

Složitosti základních operací B + stromu

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

vyhledávací stromové struktury

Stromy. Jan Kybic.

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Datové struktury Úvod

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

Základy řazení. Karel Richta a kol.

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

5 Rekurze a zásobník. Rekurzivní volání metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

TÉMATICKÝ OKRUH TZD, DIS a TIS

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

Jarníkův algoritmus. Obsah. Popis

Časová a prostorová složitost algoritmů

SQL tříhodnotová logika

3 Algoritmy řazení. prvku a 1 je rovněž seřazená.

Prioritní fronta, halda

5. Vyhledávání a řazení 1

IB111 Úvod do programování skrze Python

Algoritmy na ohodnoceném grafu

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Datové struktury 2: Rozptylovací tabulky

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

TGH05 - Problém za milion dolarů.

Rekurzivní algoritmy

UNIVERZITA PARDUBICE DIPLOMOVÁ PRÁCE

Výroková a predikátová logika - IV

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Návrh Designu: Radek Mařík

Programování v C++ 1, 16. cvičení

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

R zné algoritmy mají r znou složitost

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Základy algoritmizace a programování

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Stromové struktury v relační databázi

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Algoritmy I, složitost

Výroková a predikátová logika - II

Algoritmizace prostorových úloh

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1

PŘEDNÁŠKA 2 POSLOUPNOSTI

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

Základní datové struktury

Stromové struktury v relační databázi

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

6. Fyzická (interní) úroveň databázového systému

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

TÉMATICKÝ OKRUH Počítače, sítě a operační systémy

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

Použití dalších heuristik

Transkript:

B-Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018 Datové struktury a algoritmy, B6B36DSA 01/2018, Lekce 11 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start B6B36DSA, 2018, Lekce 11, 1/70

Opakování: skončili jsme AVL stromy B6B36DSA, 2018, Lekce 11, 2/70

Obsah Červeno-černé stromy (Red-Black trees RB) Insert Delete B-stromy (B-Trees) Motivace Search Insert Delete Založeno na: [Cormen, Leiserson, Rivest: Introduction to Algorithms, Chapter 14 and 19, McGraw Hill, 1990] [Whitney: CS660 Combinatorial Algorithms, San Diego State University, 1996] [Frederic Maire: An Introduction to Btrees, Queensland University of Technology,1998] http://artax.karlin.mff.cuni.cz/~martin/ds/main.pdf B6B36DSA, 2018, Lekce 11, 3/70

B6B36DSA, 2018, Lekce 11, 4/70

B6B36DSA, 2018, Lekce 11, 5/70

Vlastnosti červeno-černých stromů Jedná se o přibližně vyvážené BVS platí: h RB 2x h BVS (výška 2x výška perfektně vyváženého stromu) Každý uzel obsahuje navíc bit pro barvu {red black} Listy jsou doplněny odkazem na (neexistující potomek) = ukazatelem na - listy se stanou vnitřními uzly. 1 1 leaf inner node B6B36DSA, 2018, Lekce 11, 6/70

Černá výška v červeno-černých stromech Kořen RB-stromu je černý. Každá větev je zakončena (černým) uzlem. Černá výška uzlu x (black-height) se značí bh(x) a je definována jako počet černých uzlů na libovolné cestě z x do listu (x se nepočítá). Pozn.: Všechny cesty jsou stejně dlouhé. Totéž platí pro kořen. Černá výška má rozsah od h/2 (kde h je výška stromu), jestliže polovina uzlů je červených do h, pokud jsou všechny uzly černé. Výška h(x) stromu s kořenem v x je maximálně dvakrát větší, než výška optimálně vyváženého stromu. h 2lg(n+1). h (lg(n)) bh(x)je v rozsahu od lg(n+1) do 2lg(n+1) B6B36DSA, 2018, Lekce 11, 7/70

Příklad černé výšky 2 4 1 2 2 7 0 1 6 1 9 černá výška black height bh(x) 1 5 B6B36DSA, 2018, Lekce 11, 8/70

Transformace BVS na RB-strom 4 8 black height bh(t) = 4 3 4 12 2 2 6 10 14 1 1 3 5 7 9 11 13 15 B6B36DSA, 2018, Lekce 11, 9/70

Transformace BVS na RB-strom 3 8 black height bh(t) = 3 2 4 12 2 2 6 10 14 1 1 3 5 7 9 11 13 15 B6B36DSA, 2018, Lekce 11, 10/70

Transformace BVS na RB-strom 3 8 black height bh(t) = 3 3 4 12 2 2 6 10 14 1 1 3 5 7 9 11 13 15 B6B36DSA, 2018, Lekce 11, 11/70

Transformace BVS na RB-strom 2 8 black height bh(t) = 2 2 4 12 1 2 6 10 14 1 1 3 5 7 9 11 13 15 B6B36DSA, 2018, Lekce 11, 12/70

B6B36DSA, 2018, Lekce 11, 13/70

B6B36DSA, 2018, Lekce 11, 14/70

Operace INSERT pro RB-stromy 1) Nový uzel bude červený. 2) Vložíme uzel do stromu jako do standardního BVS. 3) Jestliže je předek černý, jsme hotovi strom je Červeno- Černý. x x x 4) Jestliže nikoliv, mohou nastat 3 následující případy. B6B36DSA, 2018, Lekce 11, 15/70

Poruchy při vkládání Pokud je vrchol t červený a jeho otec je také červený, pak řekneme, že vložením t nastala porucha. Pokud nastala porucha, pak ji musíme nějak opravit. Situace je na obrázku - nejprve záleží na tom, jakou barvu má s, strýc t: d! o s t B6B36DSA, 2018, Lekce 11, 16/70

Poruchy při vkládání (2) 1. s je červený. Pak pouze přebarvíme o, d a s podle obrázku. Nyní d může být porucha, ovšem posunutá o 2 hladiny výše. d d! o s o s t t Pro splnění poslední podmínky je ještě nutné přebarvit kořen (d) na černo. B6B36DSA, 2018, Lekce 11, 17/70

Poruchy při vkládání (3) 2. s je černý. Pak záleží na tom, zda hodnota t leží mezi hodnotami o a d nebo ne. Jinými slovy, zda cesta t-o-d obsahuje zatáčku. (a) Bez zatáčky: Provedeme rotaci a přebarvíme podle obrázku. Splněny budou podmínky 1, 2 i 3, tedy máme červeno-černý strom: d o! o s C t A d t s A B B C B6B36DSA, 2018, Lekce 11, 18/70

Poruchy při vkládání (4) (b) Se zatáčkou. Provedeme dvojitou (LR) rotaci a přebarvíme podle obrázku. Splněny budou podmínky 1, 2 i 3, opět máme rovnou červeno-černý strom. d t A 1 o! t 2 s D o d s A B C D B C B6B36DSA, 2018, Lekce 11, 19/70

B6B36DSA, 2018, Lekce 11, 20/70

B6B36DSA, 2018, Lekce 11, 21/70

B6B36DSA, 2018, Lekce 11, 22/70

B6B36DSA, 2018, Lekce 11, 23/70

B6B36DSA, 2018, Lekce 11, 24/70

B6B36DSA, 2018, Lekce 11, 25/70

B6B36DSA, 2018, Lekce 11, 26/70

Vkládání (Insert) v RB-stromech Časová složitost je O(log(n)). Vyžaduje maximálně dvě rotace. DEMO: https://www.cs.usfca.edu/~galles/visualization/redblack.html (Intuitivní, dobré pro porozumění) http://www.youtube.com/watch?v=vdhff4wjwyu B6B36DSA, 2018, Lekce 11, 27/70

Operace DELETE pro RB-stromy Zatímco INSERT se příliš nelišil od své obdoby u AVL stromů, operace DELETE u červeno-černých stromů je oproti AVL stromům složitější mentálně, ovšem jednodušší časově. Situace: odstraňujeme vrchol t a jeho syna, který je list. Druhého syna t, u, dáme na místo smazaného t a začerníme ho. Tím máme splněny podmínky 1 a 2. Pokud byl ale t černý, chybí nám na cestách procházejících nyní u jeden černý vrchol. B6B36DSA, 2018, Lekce 11, 28/70

Poruchy při mazání Situace: máme červeno-černý strom, u je porucha s otcem o, bratrem b a synovci s1, s2, viz obrázek. o u b s1 s2 Oprava záleží na barvě bratra (b): B6B36DSA, 2018, Lekce 11, 29/70

Poruchy při mazání (2) 1. Bratr je černý. Rozlišujeme dále 4 případy, z nichž jeden způsobí poruchu o hladinu výše a ostatní skončí s červenočerným stromem. (a) Otec i synovci jsou černí. Přebarvíme b na červeno, viz obrázek, a tady porucha je o hladinu výše provedli jsme tedy jakousi částečnou opravu. o o u b u b s1 s2 s1 s2 B6B36DSA, 2018, Lekce 11, 30/70

Poruchy při mazání (3) (b) Otec je červený, synovci černí. Přebarvíme otce a bratra podle obrázku a dostáváme červeno-černý strom. o o u b u b s1 s2 s1 s2 B6B36DSA, 2018, Lekce 11, 31/70

Poruchy při mazání (4) (c) Synovec s1, jehož hodnota leží mezi hodnotami otce a bratra, je černý, druhý synovec je červený. Přebarvíme a rotujeme podle obrázku, barva otce se nemění (tj., vrchol b bude mít barvu, kterou původně měl vrchol o). Dostáváme červenočerný strom. o b u A s1 b s2 u o s1 s2 C B C A B B6B36DSA, 2018, Lekce 11, 32/70

Poruchy při mazání (5) (d) Synovec s1, jehož hodnota leží mezi hodnotami otce a bratra, je červený, druhý synovec má libovolnou barvu. Přebarvíme a RL rotací upravíme podle obrázku (tj. vrchol s1 bude mít barvu, kterou měl původně vrchol o a barva vrcholu s2 se nezmění). Dostáváme červeno-černý strom. o u 2 b s1 A o b s1 1 s2 D u s2 B C A B C D B6B36DSA, 2018, Lekce 11, 33/70

Poruchy při mazání (6) 2. Bratr je červený. Přebarvíme a rotujeme podle obrázku. Dostáváme červeno-černý strom s poruchou, přičemž porucha je o hladinu níže. I když to tak na první pohled nevypadá, máme vyhráno, protože bratr poruchy je černý a otec červený, tedy příští oprava bude případ 1b, 1c, nebo 1d a skončíme s červeno-černým stromem. o b u A s1 b s2 u o s1 s2 C B C A B B6B36DSA, 2018, Lekce 11, 34/70

Mazání v RB-stromě Časová složitost je O(log(n)). Jsou zapotřebí maximálně tři rotace. B6B36DSA, 2018, Lekce 11, 35/70

Důkaz výšky RB-stromu Věta: RB-strom s n interními uzly má výšku h nejvýše 2lg(n+1). Důkaz: Ukažme, že podstrom s kořenem v x obsahuje nejméně 2 bh(x) -1 interních uzlů. Indukcí dle výšky podstromu s kořenem v x: Pokud je x list, pak bh(x) = 0, 2 bh(x) -1 = 0 interních uzlů (uzel ). Předpokládejme, že výška x je h, potomci x mají výšku h -1: černá výška potomků x je buď bh(x)-1 nebo bh(x) (podle barvy), indukční předpoklad je, že potomci x mají nejméně (2 bh(x) -1)-1 interních uzlů, pak podstrom s kořenem v x obsahuje nejméně: 2 bh(x)-1-1 + 2 bh(x)-1-1 + 1 = 2 bh(x) - 1 interních uzlů. Nechť h je výška stromu, který rotujeme v x: bh(x) h / 2 (max ½ je červených), pak n 2h/2-1 <=> n + 1 2h/2 <=> lg(n+1) h / 2 a h 2lg(n+1). B6B36DSA, 2018, Lekce 11, 36/70

Zhodnocení pro RB-stromy Pro binární vyhledávací červeno-černé stromy lze implementovat SEARCH, INSERT a DELETE tak, že vyžadují čas O(log n) a INSERT používá nejvýše jednu (dvojitou) rotaci a DELETE používá nejvýše dvě rotace nebo rotaci a dvojitou rotaci. RB-stromy jsou lepší než AVL stromy, které pro DELETE potřebují až log n rotací. Oproti váhově vyváženým stromům i proti AVL stromům jsou červeno-černé stromy sice jen konstantně lepší, ale i to je dobré. Při použití binárních vyhledávacích stromů ve výpočetní geometrii nese informaci i rozložení prvků ve stromě, a tato informace se musí po provedení rotace nebo dvojité rotace aktualizovat. To znamená prohledání celého stromu a tedy čas O(n) za každou rotaci a dvojitou rotaci navíc. Pro tyto problémy jsou červeno-černé stromy obzvláště vhodné, protože minimalizují počet použitých rotací a dvojitých rotací. B6B36DSA, 2018, Lekce 11, 37/70

B-stromy (B-trees) 1. Motivace 2. Více-cestné vyhledávací stromy (multiway search trees) 3. Definice B-stromu 4. Search 5. Insert 6. Delete B6B36DSA, 2018, Lekce 11, 38/70

Motivace pro B-stromy Velká data se nevejdou do operační paměti -> používáme disky (vnější paměti s přímým přístupem). Čas přístupu na disk je určen HW a OS. Přístup na disk je MNOHEM pomalejší, v porovnání s přístupem do operační paměti: 1 diskový přístup ~ 13 000 000 instrukcí!!!! Počet diskových operací dominuje v odhadu časové náročnosti. Přístup na disk = Disk-Read, Disk-Write DISK : 16 ms Seek 8ms + rotational delay 7200rpm 8ms Instruction: 800 MHz 1,25ns Disk je rozdělen do bloků (512, 2048, 4096, 8192 bytes), které se přenášejí jako celek. Proto se může hodit návrh více-cestných vyhledávacích stromů (multiway search trees), kde každý uzel stromu pasuje do jednoho bloku na disku. B6B36DSA, 2018, Lekce 11, 39/70

Více-cestné vyhledávací stromy Zobecnění binárních vyhledávacích stromů, kde počet následníků byl m=2. Každý uzel více-cestného stromu má nejvýše m potomků (m>2). Interní uzly obsahující n klíčů mají n+1 následníků, n < m (výjimkou může být kořen stromu). Listy nemají následníky. Strom je uspořádán. Klíče v uzlech vymezují intervaly v podstromech - viz obrázek: B6B36DSA, 2018, Lekce 11, 40/70

Listy více-cestného vyhledávacího stromu Listy více-cestného vyhledávacího stromu nemají žádné následníky a neobsahují žádné ukazatele na podstromy. Obvykle obsahují vlastní hodnoty. Platí: k 1 <k 2 < < k 5 Frederic Maire, QUT B6B36DSA, 2018, Lekce 11, 41/70

B-stromy (B-trees) B-strom je více-cestný vyhledávací strom stupně m, který splňuje další podmínky: Všechny listy mají stejnou výšku (B-strom je vyvážený - vybalancovaný). Pro všechny interní uzly platí: mají nejméně m/2 neprázdných potomků (precizně později) a mají nejvýše m neprázdných potomků. Kořen může mít 0 nebo 2 až m potomků: 0 m - list - tzv. plný uzel (full node) B6B36DSA, 2018, Lekce 11, 42/70

Příklad B-stromu 999 klíčů 1 uzel má 999 klíčů 1000 následníků 999 999 999 1000 uzlů má 999 000 klíčů 1000 následníků 999 999 999 1 000 000 uzlů má 999 000 000 klíčů B-strom stupně m=1000 výšky 2 obsahuje 1 001 001 uzlů (1+1000 + 1 000 000) 999 999 999 klíčů ~ 1 miliarda klíčů B6B36DSA, 2018, Lekce 11, 43/70

Obsah uzlů B-stromu n počet klíčů k i uložených v uzlu. Uzel, kde n = m-1 se nazývá plný uzel (full-node). k i n klíčů, uložených v neklesajícím pořadí k 1 k 2 k n list booleovská hodnota, true pro list, false pro ostatní. c i n+1 ukazatelů na následníky (nedefinováno pro listy). Pro klíče k i v podstromech platí: keys 1 k 1 keys 2 k 2 k n keys n+1 B6B36DSA, 2018, Lekce 11, 44/70

B6B36DSA, 2018, Lekce 11, 45/70

B-strom Stupeň 5 (5-ární strom) Minimální stupeň t = 3 Based on [Cormen] and [Maire] B6B36DSA, 2018, Lekce 11, 46/70

B6B36DSA, 2018, Lekce 11, 47/70

B6B36DSA, 2018, Lekce 11, 48/70

Operace s B-stromy Search Insert Delete B6B36DSA, 2018, Lekce 11, 49/70

Obdobné hledání v BVS. Hledání v B-stromech V rámci uzlů se hledá sekvenčně, nebo binárně. Vstup: ukazatel na kořen stromu a klíč k Výstup: uspořádaná dvojice (y, i), kde y je uzel a i je index v rámci uzlu takový, že y.k[i] = k nebo hodnota NIL, pokud klíč k nebyl nalezen. B6B36DSA, 2018, Lekce 11, 50/70

Příklad hledání v B-stromu Hledej 17 17 Hledej 18 18 x 1 2 3 4 17 not found => return NIL 18 found => return (x, 3) B6B36DSA, 2018, Lekce 11, 51/70

B6B36DSA, 2018, Lekce 11, 52/70

Operační složitost hledání v B-stromu Počet čtení z disku: O(h) = O(log m n) kde h je výška stromu a m je stupeň stromu a n je počet uzlů stromu. Protože počet klíčů je x.n < m, celá smyčka má horní odhad O(m) a celková časová složitost je O(m log m n). B6B36DSA, 2018, Lekce 11, 53/70

B-stromy: insert - 1.vícefázová strategie Insert do uzlu, který není zcela naplněn (not full node) Insert 17 17 n=1, i=1,2 n=3, i=1,2,3 B6B36DSA, 2018, Lekce 11, 54/70

B-stromy: insert - 1.vícefázová strategie Insert do plného uzlu Insert 25 Dělení uzlu (node split) Propaguj medián nahoru 17 25 median 1.Vícefázová strategie: řeš problém, až když se vyskytne B6B36DSA, 2018, Lekce 11, 55/70

B-stromy: insert - 1.vícefázová strategie Insert (x, T) - pseudokód Najdi list pro x Fáze top-down Pokud uzel není plný, insert x a konec while (je aktuální uzel plný) (node overflow) najdi medián (z klíčů po vložení x) rozděl uzel (split node) do dvou uzlů propaguj medián směrem nahoru Fáze bottom-up aktuální uzel = rodič aktuálního uzlu B6B36DSA, 2018, Lekce 11, 56/70

B-stromy: insert - 2.jednofázová strategie Princip: ignoruj budoucí problémy Rozděl při vstupu naplněný uzel. Pouze fáze top-down Tím si vytvoříš prostor pro budoucí medián z potomků. Fáze bottom-up není zapotřebí. Rozdělení (splitting of): kořen => strom naroste o úroveň, vnitřní uzel nebo list => rodič obdrží klíč, který je medián B6B36DSA, 2018, Lekce 11, 57/70

B-stromy: insert - 2.jednofázová strategie Insert B Insert do nenaplněného uzlu (not full) G M P X A C D E J K N O R S T U V Y Z G M P X A B C D E J K N O R S T U V Y Z B6B36DSA, 2018, Lekce 11, 58/70

B-stromy: insert - 2.jednofázová strategie Přeskok Insert full Q node a vložení do not full G M P X A B C D E J K N O R S T U V Y Z Rozděl RSTUV G M P T X Insert Q do RS A B C D E J K N O R S U V Y Z G M P T X A B C D E J K N O Q R S U V Y Z B6B36DSA, 2018, Lekce 11, 59/70

B-stromy: insert - 2.jednofázová strategie Ignorování full node a vložení do not full uzlu Insert L G M P T X rozděl GMPTX výška vzroste o 1 A B C D E J K N O Q R S U V Y Z P Insert L do JK G M T X A B C D E J K N O Q R S U V Y Z P G M T X A B C D E J K L N O Q R S U V Y Z B6B36DSA, 2018, Lekce 11, 60/70

B-stromy: insert - 2.jednofázová strategie Insert F P Rozděl ABCDE G M T X A B C D E J K L N O Q R S U V Y Z P Insert F do DE C G M T X A B D E J K L N O Q R S U V Y Z P C G M T X A B D E F J K L N O Q R S U V Y Z B6B36DSA, 2018, Lekce 11, 61/70

B-stromy: insert - 2.jednofázová strategie Insert (x, T) - pseudokód While hledej listy x Top down phase only if (je uzel plný) najdi medián (mezi klíči naplněného uzlu) rozděl (split) uzel na dva vlož (insert) medián do rodiče (parent). Insert x a zastav. B6B36DSA, 2018, Lekce 11, 62/70

B6B36DSA, 2018, Lekce 11, 63/70

B6B36DSA, 2018, Lekce 11, 64/70

Strategie pro úpravy B-stromu (update) Dvě principiální strategie 1. Více-fázová strategie: řeš problém, až když se vyskytne 2. Více-fázová strategie: [Cormen] neřeš budoucí problémy Akce: Rozděl plné uzly Sluč uzly, které mají minimální obsah (méně než minimum položek). B6B36DSA, 2018, Lekce 11, 65/70

Delete pro B-stromy Delete (x, btree) - principy Pouze více-fázová strategie Najdi (search) hodnotu, která se má zrušit. Pokud se jedná o jednoduchý uzel, pak jednoduše zruš uzel, jinak použij algoritmus zrušentry pro listy stromu a jednoduše uzel zruš (corrections of number of elements later). Pokud se jedná o vnitřní uzel, pak: Slouží jako separátor pro dva podstromy. Prohodí se buňky pomocí swap s predecessor(x) nebo successor(x) a Zruší se kořen (leaf). Pokud má list více než minimální počet položek: Jinak: Zruš x z listu a STOP. redistribuj hodnoty na správné místo (to může posunout problém do rodiče, zastaví se to v kořeni, protože nemá omezené minimum položek). B6B36DSA, 2018, Lekce 11, 66/70

Delete (x, btree) - pseudokód B-tree delete Pouze více-průchodů if(x to be removed is not in a leaf) swap it with successor(x) currentnode = leaf while(currentnode underflow) try to redistribute entries from an immediate sibling into currentnode via its parent if(impossible) then merge currentnode with a sibling and one entry from the parent currentnode = parrent of CurrentNode B6B36DSA, 2018, Lekce 11, 67/70

Maximální výška B-stromu h log ((N+1)/2) m / 2 Dává horní hranici přístupů na disk. Viz [Maire] nebo [Cormen] podropbnosti B6B36DSA, 2018, Lekce 11, 68/70

References [Cormen] Cormen, Leiserson, Rivest: Introduction to Algorithms, Chapter 14 and 19, McGraw Hill, 1990 [Whitney]: CS660 Combinatorial Algorithms, San Diego State University, 1996], RedBlack, B-trees http://www.eli.sdsu.edu/courses/fall96/cs660/notes/redblack/redblack.ht ml#rtftoc5 [Wiki] B-tree. (2006, November 24). In Wikipedia, The Free Encyclopedia. Retrieved 20:25, December 12, 2006, from http://en.wikipedia.org/w/index.php?title=b-tree&oldid=89805120 [Maire] Frederic Maire: An Introduction to Btrees, Queensland University of Technology,1998] http://sky.fit.qut.edu.au/~maire/baobab/lecture/ [RB tree] John Franco - java applet http://www.ececs.uc.edu/~franco/c321/html/redblack/redblack.html [Jones] Jeremy Jones: B-Tree animation - java applet https://www.cs.tcd.ie/jeremy.jones/vivio/trees/b-tree.htm B6B36DSA, 2018, Lekce 11, 69/70

The End B6B36DSA, 2018, Lekce 11, 70/70