VYHLEDÁVACÍ STROMY AVL strom Operace Find, Insert, Delete

Slides:



Advertisements
Podobné prezentace
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Nalezení nejkratší vzdálenosti mezi uzly dopravní sítě Předmět: Teorie dopravy - cvičení.
Advertisements

Analýza fungování institutu dohod o výkonu pěstounské péče v ČR SocioFactor s.r.o.
Téma: Využití Accessu pro tvorbu evidence našeho podnikání Vypracovala: Jana Wasserbauerová.
Programování 4. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
Kapitola 1: Popisná statistika jednoho souboru2  Matematická statistika je věda, která se zabývá studiem dat vykazujících náhodná kolísání.  Je možno.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Programové období 2014 – 2020 a proces SEA Mgr. Zuzana Plešková Ministerstvo životního prostředí 14. února 2014.
Využití v praxi Pythagorova věta Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Kamila Kočová. Dostupné z Metodického portálu
Praha, Ing. Petr Řádek Číslování vlaků - Rekapitulace Setkání dopravců a zástupců provozovatele dráhy.
Experimentální metody oboru – Pokročilá tenzometrie – Měření vnitřního pnutí Další využití tenzometrie Měření vnitřního pnutí © doc. Ing. Zdeněk Folta,
Tabulátory (20). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro tělesně postižené,
Plánovací část projektu Cíl projektu - vychází z řešení z prognostické části, - odpovídá na otázku, čeho má být dosaženo? - představuje slovní popis účelu.
Název kapitoly Název podkapitoly Text Schvalovací proces + hodnoticí kritéria Jakub Krátký Praha, 5. května 2016.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Principy Základních registrů Ing. Ondřej Felix, CSc.
Výukový materiál Zpracovaný v rámci projektu EU peníze školám
Schvalovací proces a hodnoticí kritéria
Propagace zemědělských produktů spolufinancovaná EU v novém režimu Mgr
Zajištění obsluhy všech úseku dopravní sítě Předmět: Teorie dopravy - cvičení Ing. František Lachnit, Ph.D.
STATISTIKA Starší bratr snědl svůj oběd i oběd mladšího bratra. Oba snědli v průměru jeden oběd.
Strečink Je možné provádět denně po tréninku, nejméně však 4x týdně nejlépe 2-3 hodiny po posledním tréninku dne (svaly již nejsou tak zakyselené a nejsou.
Název školy: Základní škola a mateřská škola Dolní Bojanovice, okres Hodonín příspěvková organizace Číslo projektu: CZ.1.07/1.4.00/ Označení materiálu:
Matematika 3 – Statistika Kapitola 4: Diskrétní náhodná veličina
Řešení nerovnic Lineární nerovnice
Lomené algebraické výrazy
Lineární rovnice a nerovnice I.
Číslo projektu CZ.1.07/1.5.00/ Číslo materiálu
IAS 36 Snížení hodnoty aktiv.
Rozklad mnohočlenu na součin
Jedno-indexový model a určení podílů cenných papírů v portfoliu
8.1.2 Podprostory.
Poměr Co je poměr. Změna v daném poměru..
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
Databáze MS ACCESS 2010.
Maďarská metoda Kirill Šustov Michal Bednář Stanislav Běloch
Zlomky Složené zlomky..
Běžné reprezentace grafu
Lom světla Název školy: ZŠ Štětí, Ostrovní 300 Autor: Francová Alena
Poměr v základním tvaru.
Základy statistické indukce
Schvalovací proces + hodnoticí kritéria
USMĚRŇOVAČE V NAPÁJECÍCH OBVODECH
Kvadratické nerovnice
Schvalovací proces + hodnoticí kritéria
Technické prostředky v požární ochraně
Katastr nemovitostí (KNEM)
Řešení nerovnic Lineární nerovnice
Název školy: Základní škola a mateřská škola Dolní Bojanovice, okres Hodonín příspěvková organizace Číslo projektu: CZ.1.07/1.4.00/ Označení materiálu:
Optimální pořadí násobení matic
Lomené algebraické výrazy
Provozováno Výzkumným ústavem pedagogickým v Praze.
Zlomky Sčítání zlomků..
Materiál byl vytvořen v rámci projektu
Konstrukce trojúhelníku
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
ALG 08 Merge sort -- řazení sléváním
Fronta (1) Dynamická datová struktura typu FIFO (First In First Out)
Poměr v základním tvaru.
Dynamické programování Úloha batohu neomezená
Provozováno Výzkumným ústavem pedagogickým v Praze.
Dynamické programování Optimální binární vyhledávací strom
AVL a B-stromy cvičení Radek Mařík.
Rovnice opakování Výukový materiál pro 9.ročník
Dělitelnost přirozených čísel
Průměr
Seminář o stavebním spoření
Hromadné dokumenty opakující se pro kolekci osob
Dopravní úloha.
Konstrukce trojúhelníku
Transkript prezentace:

VYHLEDÁVACÍ STROMY AVL strom Operace Find, Insert, Delete A4B33ALG 2010/04 VYHLEDÁVACÍ STROMY AVL strom Operace Find, Insert, Delete Rotace L, R, LR, RL B-strom

AVL strom -- G.M. Adelson-Velskij & E.M. Landis, 1962 A4B33ALG 2011 / 06 AVL strom -- G.M. Adelson-Velskij & E.M. Landis, 1962 AVL strom je BVS s přidanými vlastnostmi, které jej udržují (téměř) vyvážený. AVL má také operace Find, Insert, Delete. 51 2 1 34 76 1 1 13 40 68 92 -1 -1 -1 -1 -1 8 22 45 -1 -1 -1 -1 -1 -1 Každý uzel registruje hloubku svého levého a pravého podstromu, hloubka prázdného stromu je -1. V každém uzlu je rozdíl výšek obou podstromů roven -1, 0, 1. V tomto případě: Výška stromu = hloubka stromu 1

Vložení uzlu může způsobit rozvážení AVL stromu. A4B33ALG 2011 / 06 Vložení uzlu může způsobit rozvážení AVL stromu. V každém uzlu má být rozdíl výšek obou podstromů roven -1, 0, 1 !! Insert 30 51 3 1 34 76 2 1 13 40 68 92 1 -1 -1 -1 -1 -1 8 22 45 -1 -1 -1 -1 -1 30 -1 -1 Levý podstrom uzlu 51 je příliš hluboký, strom přestal být AVL. Změněné hloubky 2

Náprava rozvážení pomocí rotace A4B33ALG 2011 / 06 Náprava rozvážení pomocí rotace 51 3 1 34 76 Insert 30 2 1 13 40 68 92 1 -1 -1 -1 -1 -1 8 22 45 -1 -1 -1 -1 -1 30 -1 -1 34 Vyvážený strom po pravé jednoduché rotaci, tzv. R rotaci 2 2 13 51 1 1 1 8 22 40 76 -1 -1 -1 -1 45 68 92 30 -1 -1 -1 -1 -1 -1 -1 -1 3

Náprava rozvážení pomocí rotace A4B33ALG 2011 / 06 Náprava rozvážení pomocí rotace 51 3 1 34 76 Insert 30 2 1 13 40 68 92 1 -1 -1 -1 -1 -1 8 22 45 -1 -1 -1 -1 -1 Směr rotace 30 -1 -1 34 2 2 R rotace v uzlu 51 13 51 1 1 1 8 22 40 Podstromy beze změn 76 -1 -1 -1 -1 45 68 92 30 -1 -1 -1 -1 -1 -1 -1 -1 4

Rotace R obecně Před Po A x+2 x B C x+1 x D E Z -1 -1 B x+1 x+1 A D x A4B33ALG 2011 / 06 Rotace R obecně A x+2 x B C Před x+1 x D E Z -1 -1 B x+1 x+1 A Po D x x C E Z -1 -1 5

Rotace L je symetrickým obrazem rotace R, jinak se od ní neliší. A4B33ALG 2011 / 06 Rotace L obecně A x x+2 C B Před x x+1 D E Rotace L je symetrickým obrazem rotace R, jinak se od ní neliší. Z -1 -1 B x+1 x+1 Po A D x x C E Z -1 -1 6

Strom pro demonstraci LR rotace A4B33ALG 2011 / 06 AVL strom 51 2 1 34 76 1 1 13 40 68 92 -1 -1 -1 -1 -1 8 36 45 -1 -1 -1 -1 -1 -1 Strom pro demonstraci LR rotace 7

Vložení uzlu může způsobit rozvážení stromu. A4B33ALG 2011 / 06 Vložení uzlu může způsobit rozvážení stromu. V každém uzlu má být rozdíl výšek obou podstromů roven -1, 0, 1 !! Insert 38 51 3 1 34 76 1 2 13 40 68 92 -1 1 -1 -1 -1 -1 8 36 45 -1 -1 -1 -1 -1 -1 Změněné hloubky 38 -1 -1 Levý podstrom uzlu 51 je příliš hluboký, strom přestal být AVL. Použití rotace R by nepomohlo, příliš hlubokým by se stal původní pravý podstrom uzlu 34 díky tomu, že by se jeho hloubka vůbec nezměnila a hloubka levého podstromu 51 by klesla. 8

Náprava rozvážení pomocí LRrotace A4B33ALG 2011 / 06 Náprava rozvážení pomocí LRrotace 51 3 1 Insert 38 34 76 1 2 13 40 68 92 -1 1 -1 -1 -1 -1 8 36 45 -1 -1 -1 -1 -1 -1 38 -1 -1 40 Vyvážený strom po dvojité LR rotaci 2 2 34 51 1 1 1 13 36 45 76 -1 -1 -1 -1 -1 8 38 68 92 -1 -1 -1 -1 -1 -1 -1 -1 9

Náprava rozvážení rotací A4B33ALG 2011 / 06 Náprava rozvážení rotací 51 3 1 Insert 38 34 76 R 1 2 L 13 40 68 92 -1 1 -1 -1 -1 -1 8 36 45 -1 -1 -1 -1 -1 -1 Směry rotace 38 Podstromy beze změn -1 -1 40 2 2 LR rotace v uzlu 34 a 51 34 51 1 1 1 13 36 45 76 -1 -1 -1 -1 -1 8 38 68 92 -1 -1 -1 -1 -1 -1 -1 -1 10

Rotace LR obecně Před Po A X+2 x B C x x+1 D E x F G Z -1 -1 E x+1 x+1 A4B33ALG 2011 / 06 Rotace LR obecně A X+2 x B C x x+1 D E x Před F G Z -1 -1 E x+1 x+1 B A x x x x Po F G C D Z -1 -1 11

Rotace RL je symetrickým obrazem rotace LR, jinak se od ní neliší. A4B33ALG 2011 / 06 Rotace RL obecně A x X+2 C B x+1 x E D x Před G F Rotace RL je symetrickým obrazem rotace LR, jinak se od ní neliší. Z -1 -1 E x+1 x+1 A B x x x x Po C G F D Z -1 -1 12

Pravidla pro aplikaci L, R, LR nebo RL rotací A4B33ALG 2011 / 06 Pravidla pro aplikaci L, R, LR nebo RL rotací Od přidaného uzlu postupujeme směrem ke kořeni a aktualizujeme hloubky podstromů v každém navštíveném uzlu. Když narazíme na rozvážený uzel, do kterého jsme bezprostředně došli * dvěma hranami doprava nahoru provedeme v tomto uzlu R rotaci. * dvěma hranami doleva nahoru, provedeme v tomto uzlu L rotaci. * hranami doleva a pak doprava nahoru, provedeme v tomto uzlu LR rotaci. * hranami doprava a pak doleva nahoru, provedeme v tomto uzlu RL rotaci. Po provedení jedné rotace po operaci Insert je AVL strom opět vyvážen. Po provedení jedné rotace po operaci Delete (viz dále) strom vyvážen být nemusí, je nutno kontrolovat a případně aktualizovat vyvážení až ke kořeni včetně. 13

Strom pro demonstraci rotace po smazání uzlu A4B33ALG 2011 / 06 Delete v AVL stromu Strom pro demonstraci rotace po smazání uzlu 51 1 2 16 84 -1 1 Delete 16 28 70 93 -1 -1 -1 -1 -1 55 -1 -1 Delete proběhne standardně jako v obyčejném BVS. Poté postupujeme od místa smazání nahoru ke kořeni a aktualizujeme výšky podstromů v každém uzlu. Při rozvážení aplikujeme rotaci podobně jako při vkládání. 14

Delete v AVL stromu Delete 16 Změněné hloubky 51 1 2 16 84 -1 1 28 70 A4B33ALG 2011 / 06 Delete v AVL stromu 51 1 2 16 84 -1 1 Delete 16 28 70 93 -1 -1 -1 -1 -1 55 -1 -1 51 2 28 84 -1 -1 1 70 93 -1 -1 -1 Změněné hloubky 55 -1 -1 15

Z rozváženého uzlu 51 prozkoumáme kořen sousedního podstromu, A4B33ALG 2011 / 06 Delete v AVL stromu 51 L 2 28 84 -1 -1 1 R 70 93 -1 -1 -1 Změněné hloubky 55 -1 -1 Z rozváženého uzlu 51 prozkoumáme kořen sousedního podstromu, než ze kterého jsme přišli, v tomto případě uzel 84. Má-li tento oba své podstromy stejně hluboké použijeme jednoduchou L nebo R rotaci. Má-li je různě hluboké (nejvýše se liší o 1), rozhodneme, zda použijeme L, R, LR, RL rotaci, jako kdyby rozvážení (uzel 51) vzniklo naopak přidáním uzlu do tohoto sousedního podstromu (s kořenem 84). V tomto případě použijeme RL. 16

Delete v AVL stromu L Delete 16 R Změněné hloubky Po rotaci RL A4B33ALG 2011 / 06 Delete v AVL stromu 51 L 2 28 84 -1 -1 1 Delete 16 R 70 93 -1 -1 -1 Změněné hloubky 55 -1 -1 70 Po rotaci RL v uzlu 84 a 51 51 84 -1 28 55 93 -1 -1 -1 -1 -1 -1 17

Nutnost vícenásobných rotací po operaci Delete. A4B33ALG 2011 / 06 Nutnost vícenásobných rotací po operaci Delete. Příklad. Před operací Delete je AVL strom vyvážený. 1 2 4 3 Vyváženo. 18

Find (log(n)) (n) Insert (log(n)) Delete A4B33ALG 2011 / 06 Implementace operací v AVL stromu ... // homework... Asymptotické složitosti operací Find, Insert, Delete v BVS a AVL BVS s n uzly AVL strom s n uzly Operace Vyvážený Možná nevyvážený Find (log(n)) (n) Insert (log(n)) Delete 19

B-strom -- Rudolf Bayer, Edward M. McCreight, 1972 A4B33ALG 2011 / 06 B-strom -- Rudolf Bayer, Edward M. McCreight, 1972 Všechny cesty z kořene do listu jsou stejně dlouhé tj. B-strom je ideálně vyvážený. Klíče jsou v uzlu seřazené. Fixní k > 1 pro celý strom určuje velikost všech uzlů. Každý uzel kromě kořene má nejméně k a nejvýše 2k klíčů, každý vnitřní uzel tedy má nejméně k+1 a nejvýše 2k+1 potomků. Kořen může mít libovolný počet klíčů. Není-li zároveň listem, má alespoň 2 potomky. X Y klíče < X X < klíče < Y Y < klíče 20

B-strom -- alternativní specifikace A4B33ALG 2011 / 06 B-strom -- alternativní specifikace Cormen et al. 1990: Stupeň B-stromu: Horní a dolní hranice počtu klíčů v uzlu je dána parametrem t  2: a. Každý uzel různý od kořene obsahuje alespoň t1 klíčů. Tudíž každý vnitřní uzel různý od kořene má alespoň t potomků. b. Každý uzel obsahuje nejvýše 2t1 klíčů. Tudíž každý vnitřní uzel má nejvýše 2t potomků. t = 2 t = 5 x x x x x ... x x x x x x x x x x x x x x x x x x x x x x x x x x x x min klíčů = 4 min klíčů = 1 min potomků = 5 min potomků = 2 max klíčů = 9 max klíčů = 3 max potomků = 10 max potomků = 4 21

A4B33ALG 2011 / 06 B-strom -- Find Najdi 17 18 8 14 26 41 1 2 4 5 10 12 15 16 17 19 20 22 25 27 36 42 45 60 V uzlu se vyhledává sekvenčně (lze také využít půlení intervalu apod). Pokud uzel není listem a klíč v něm není, hledání pokračuje v odpovídajícím potomku. Pokud uzel je listem a klíč v něm není, nenalezeno. 22

B-strom -- aktualizační strategie A4B33ALG 2011 / 06 B-strom -- aktualizační strategie Vícefázová a jednofázová strategie 1. Vícefázová strategie: “Řeš problém, až když vznikne”. Nejprve vlož nebo smaž aktuální klíč a teprve potom, pokud je to nutné, uprav strukturu stromu. Může se stát, že pak bude nutno během úprav procházet strom zpět až ke koření. 2. Jednofázová strategie: “Předcházej budoucím problémům”. Postupuj od kořene na místo, kde má být klíč/uzel vložen/smazán a během postupu upravuj strukturu stromu tak, aby po vložení/smazání nebylo nutno vracet se směrem ke kořeni. 23

B-strom -- Insert Vícefázová strategie B-strom 8 17 26 2 4 10 12 14 16 A4B33ALG 2011 / 06 B-strom -- Insert Vícefázová strategie B-strom 8 17 26 2 4 10 12 14 16 19 22 25 36 41 42 45 Vlož 5 8 17 26 41 2 4 5 10 12 14 16 19 22 25 36 41 42 45 Vlož 20 8 17 26 2 4 5 10 12 14 16 19 20 22 25 36 41 42 45 24

B-strom -- Insert Vícefázová strategie Vlož 27 8 17 26 2 4 5 10 12 14 A4B33ALG 2011 / 06 B-strom -- Insert Vícefázová strategie Vlož 27 8 17 26 2 4 5 10 12 14 16 19 20 22 25 36 41 42 45 27 Seřaď mimo strom. 27 36 41 42 45 Vyber medián, vyvoř nový uzel, přesuň do něj hodnoty větší než medián. 41 27 36 42 45 8 17 26 41 27 Medián zkus vložit do rodiče. 19 20 22 25 27 36 42 45 Zdařilo se. 25

B-strom -- Insert ? Vícefázová strategie Vlož 15 8 17 26 41 2 4 5 10 A4B33ALG 2011 / 06 B-strom -- Insert Vícefázová strategie Vlož 15 8 17 26 41 2 4 5 10 12 14 16 19 20 22 25 27 36 42 45 15 Seřaď mimo strom. 10 12 14 15 16 Vyber medián, vyvoř nový uzel, přesuň do něj hodnoty větší než medián. 14 10 12 15 16 ? Medián zkus vložit do rodiče. 14 8 17 26 41 26

Rodič je zaplněn – Analogický další postup směrem ke kořeni. A4B33ALG 2011 / 06 B-strom -- Insert Vícefázová strategie Bylo vloženo 15 do listu... ... nutno vložit 14 do rodiče. 8 17 26 41 14 2 4 5 10 12 15 16 19 20 22 25 27 36 42 45 Rodič je zaplněn – Analogický další postup směrem ke kořeni. Seřaď mimo strom. 8 14 17 26 41 Vyber medián, vyvoř nový uzel, přesuň do něj hodnoty větší než medián. 17 8 14 26 41 17 Medián nelze vložit do rodiče, žádný rodič není, tedy se zřídí nový kořen. 8 14 26 41 27

B-strom -- Insert Vícefázová strategie Rekapitulace - vlož 15 8 17 26 A4B33ALG 2011 / 06 B-strom -- Insert Vícefázová strategie Rekapitulace - vlož 15 8 17 26 41 2 4 5 10 12 14 16 19 20 22 25 27 36 42 45 Vlož 15 17 Uzly beze změny 8 14 26 41 2 4 5 10 12 15 16 19 20 22 25 27 36 42 45 V každém patře přibyl jeden uzel, kromě toho přibyl nový kořen, strom ale roste směrem "vzhůru", zůstává ideálně vyvážený. 28

B-strom -- Delete Vícefázová strategie Mazání v dostatčně plném listu. A4B33ALG 2011 / 06 B-strom -- Delete Vícefázová strategie Mazání v dostatčně plném listu. 17 Smaž 4 8 14 26 41 2 4 5 10 12 15 16 19 20 22 25 27 36 42 45 60 17 8 14 26 41 2 5 10 12 15 16 19 20 22 25 27 36 42 45 60 29

B-strom -- Delete Vícefázová strategie Mazání ve vnitřním uzlu A4B33ALG 2011 / 06 B-strom -- Delete Vícefázová strategie Mazání ve vnitřním uzlu Smazaný klíč se nahradí nejbližším větším (menším) klíčem, podobně jako v BVS. 17 Smaž 17 8 14 26 41 19 2 5 10 12 15 16 20 22 25 27 36 42 45 60 Nejbližší větší (menší) klíč je vždy v B-stromu v listu, má-li tento list dostatečný počet klíčů, jsme hotovi. 19 8 14 26 41 2 5 10 12 15 16 20 22 25 27 36 42 45 60 30

B-strom -- Delete Vícefázová strategie Mazání v nedostatčně A4B33ALG 2011 / 06 B-strom -- Delete Vícefázová strategie Mazání v nedostatčně plném listu. Ale sousední list je dostatečně plný. 19 8 14 26 41 Smaž 27 2 5 10 12 15 16 20 22 25 27 36 42 45 60 Sjednoť klíče s klíči v sousedním listu a s dělícím klíčem v rodiči a seřaď. 26 41 36 42 45 60 36 41 42 45 60 Medián sjednocení vlož na místo původně dělícího klíče, menší a větší klíče než medián rozděl do levého a pravého listu. 26 42 36 41 45 60 31

B-strom -- Delete Vícefázová strategie Rekapitulace - smaž 27 19 8 14 A4B33ALG 2011 / 06 B-strom -- Delete Vícefázová strategie Rekapitulace - smaž 27 19 8 14 26 41 2 5 10 12 15 16 20 22 25 27 36 42 45 60 27 korektně smazáno Uzly beze změny 19 8 14 26 26 42 41 2 5 10 12 15 16 20 22 25 36 27 41 36 42 45 60 45 60 32

B-strom -- Delete Vícefázová strategie Mazání v nedostatčně A4B33ALG 2011 / 06 B-strom -- Delete Vícefázová strategie Mazání v nedostatčně plném listu. Ani sousední list není dostatečně plný. 19 Smaž 12 8 14 26 26 42 41 2 5 10 12 15 16 20 22 25 27 36 41 36 45 42 45 60 60 8 14 Sjednoť klíče s klíči v sousedním listu a s dělícím klíčem v rodiči a seřaď. Vše vlož do původního listu, sousední list smaž, dělící klíč v rodiči také smaž. 10 12 15 16 8 14 10 14 15 16 33

B-strom -- Delete Vícefázová strategie 19 Rodič nesplňuje A4B33ALG 2011 / 06 B-strom -- Delete Vícefázová strategie 19 Rodič nesplňuje podmínku B-stromu Smazáno 12 8 26 26 41 42 2 5 10 14 15 16 20 22 25 36 27 41 36 45 42 45 60 60 Rodič, který poskytl klíč potomku, není dostatečně plný. Aplikujeme na něj (a případně iterativně na jeho rodiče) tentýž postup spojení klíčů a sousedních uzlů a přesun dělícího prvku z rodiče. 19 8 26 41 19 26 42 8 26 26 41 42 8 19 26 42 26 41 34

B-strom -- Delete Vícefázová strategie Rekapitulace - smaž 12 19 8 14 A4B33ALG 2011 / 06 B-strom -- Delete Vícefázová strategie Rekapitulace - smaž 12 19 8 14 26 26 42 41 2 5 10 12 15 16 20 22 25 36 27 41 36 42 45 45 60 60 Smazáno 12 a strom byl adekvátně restrukturován. Uzly beze změny 26 8 41 19 26 42 2 5 10 14 15 16 20 22 25 36 27 41 36 45 42 60 45 60 35

B-strom -- Insert Jednofázová strategie A4B33ALG 2011 / 06 B-strom -- Insert Jednofázová strategie Single phase strategy Příklad: Cormen et al. 1990: t = 3, min stupeň 3, max stupeň = 6, min klíčů v uzlu (kromě kořene) = 2, max klíčů v uzlu = 5. G M P X A C D E J K N O R S T U V Y Z Insert B G M P X A B C D E J K N O R S T U V Y Z Neovlivněné uzly Insert Q G M P T X A B C D E J K N O Q R S U V Y Z 36

B-strom -- Insert Jednofázová strategie G M P T X A B C D E J K N O Q A4B33ALG 2011 / 06 B-strom -- Insert Jednofázová strategie Single phase strategy G M P T X A B C D E J K N O Q R S U V Y Z Rozděl kořen, protože je plný, a pokračuj směrem k listu vložit L. Insert L P G M T X A B C D E J K L N O Q R S U V Y Z Neovlivněné uzly Insert F P C G M T X A B D E F J K L N O Q R S U V Y Z 37

B-strom -- Delete Jednofázová strategie P Delete F C G M T X A B D E F A4B33ALG 2011 / 06 B-strom -- Delete Jednofázová strategie P Delete F C G M T X A B D E F J K L N O Q R S U V Y Z 1. Když je klíč k v listu X, smaž k v X. P Neovlivněné uzly C G M T X A B D E J K L N O Q R S U V Y Z Další případy 2. a 3. zaručují, že smazání vždy proběhne v uzlu s alespoň t klíči, takže po smazání klíče k nebude nutno nutno list spojovat se sousedy a opravovat strom ve vnitřních uzlech směrem zpět ke kořeni. 38

B-strom -- Delete Jednofázová strategie P Delete M C G M T X A B D E J A4B33ALG 2011 / 06 B-strom -- Delete Jednofázová strategie P Delete M C G M T X A B D E J K L N O Q R S U V Y Z 2. Když je klíč k ve vnitřním uzlu X, udělej: 2a. Když má potomek Y vlevo od klíče k v uzlu X alespoň t klíčů, najdi maximální klíč kp v podstromu s kořenem Y. Nahraď v X klíč k klíčem kp and rekurzivně pokračuj mazat kp v podstromu s kořenem Y. (b. Pokud má Y méně než t klíčů, pak zkoumej potomka Z vpravo od klíče k v X a pokud Z má alespoň t klíčů, postupuj analogicky (s hledáním minima) jako ve 2a. P C G L T X A B D E J K N O Q R S U V Y Z 39

B-strom -- Delete Jednofázová strategie Delete G P C G L T X A B D E J A4B33ALG 2011 / 06 B-strom -- Delete Jednofázová strategie Delete G P C G L T X A B D E J K N O Q R S U V Y Z 2c. Jinak, t.j. když Y a Z mají jen t1 klíčů, přesuň k a klíče uzlu Z do uzlu Y. Tím v X ubyde klíč k a ukazatel na Z. Uzel Y nově obsahuje 2t1 klíčů. Fyzicky smaž Z and pokračuj rekurzivně smazáním k v Y. P C L T X A B D E J K N O Q R S U V Y Z 40

B-strom -- Delete Jednofázová strategie A4B33ALG 2011 / 06 B-strom -- Delete Jednofázová strategie 3. Když vnitřní uzel X neobsahuje klíč k, urči toho potomka X.c uzlu X, který je kořenem podstromu, v němž leží k, pokud se k ve stromu vůbec vyskytuje. Pokud má X.c pouze t1 klíčů, proveď podle okolností krok 3a nebo 3b, aby bylo zaručeno, že z uzlu X bude operace mazání pokračovat v takovém jeho potomku, který má alespoň t klíčů. Poté se přesuň do tohoto potomku a pokračuj rekurzivně. Delete D P C L T X A B D E J K N O Q R S U V Y Z 41

B-strom -- Delete Jednofázová strategie P Delete D Merge C L T X A B D A4B33ALG 2011 / 06 B-strom -- Delete Jednofázová strategie P Delete D Merge C L T X A B D E J K N O Q R S U V Y Z 3a. Pokud uzel X.c a oba jeho sousední sourozenci (pokud existují) obsahují t1 klíčů, přesuň klíče z jednoho sourozence do X.c, smaž tohoto sourozence a navíc do X.c přesuň z X klíč, který bude nyní mediánem v X.c. Merged C L P T X A B D E J K N O Q R S U V Y Z C L P T X A B E J K N O Q R S U V Y Z 42

B-strom -- Delete Jednofázová strategie Delete B C L P T X A B E J K N A4B33ALG 2011 / 06 B-strom -- Delete Jednofázová strategie Delete B C L P T X A B E J K N O Q R S U V Y Z 3b. Pokud uzel X.c obsahuje t1 klíčů a jeho sousední sourozenec Y obsahuje alespoň t klíčů, přesuň z X do X.c. klíč m rozdělující X.c. a Y. Na bývalé místo m v X přesuň patřičný krajní (největší nebo nejmenší) klíč z Y. Příslušný krajní odkaz v Y na jeho potomka přesuň do X.c ke klíči m. E L P T X A C J K N O Q R S U V Y Z 43

B-strom -- asymptotické složitosti operací A4B33ALG 2011 / 06 B-strom -- asymptotické složitosti operací Find O(b ∙ logb n) Insert (b ∙ logb n) Delete (b ∙ logb n) n je počet klíčů ve stromu, b je větvící faktor, tj. řád stromu tj. maximální počet potomků uzlu. Poznámka: Někteří autoři (např. CLRS) definují řád (order) B-stromu jako [b/2], tj. minimální počet potomků vnitřního uzlu různého od kořene. Terminologie není ustálená, je třeba vždy vztahy interpretovat v patřičných souvislostech. 44