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

Podobné dokumenty
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í

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

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ákladní datové struktury III: Stromy, haldy

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

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

Definice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí:

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

B-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í strom pomocí směrníků Miroslav Hostaša L06620

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

Radek Mařík

Stromy, haldy, prioritní fronty

ADT STROM Lukáš Foldýna

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

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

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

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

Datové struktury Úvod

Algoritmy na ohodnoceném grafu

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

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

Binární vyhledávací stromy

Návrh Designu: Radek Mařík

Algoritmy a datové struktury

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

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

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

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

Dynamické datové struktury III.

TÉMATICKÝ OKRUH TZD, DIS a TIS

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

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

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

Prioritní fronta, halda

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

Prioritní fronta, halda (heap), řazení

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

Stromy. Jan Kybic.

Datové struktury 2: Rozptylovací tabulky

Binární vyhledávací stromy II

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

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

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

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

a) b) c) Radek Mařík

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

Datový typ. jak se budou data reprezentovat? jaké operace se budou nad daty provádět?

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.

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

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

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

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

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

ABSTRAKTNÍ DATOVÉ TYPY

NPRG030 Programování I, 2018/19 1 / :03:07

Algoritmizace prostorových úloh

Union-Find problém. Kapitola 1

Časová a prostorová složitost algoritmů

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Dynamické datové struktury IV.

TGH07 - Chytré stromové datové struktury

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

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

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

BINARY SEARCH TREE

TGH07 - Chytré stromové datové struktury

1. Binomiální haldy Zavedení binomiální haldy

Algoritmy II. Otázky k průběžnému testu znalostí

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

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

BINARY SEARCH TREE

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

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

Jazyk C++ II. STL knihovna kontejnery část 2

Přijímací zkouška - informatika

Použití dalších heuristik

Operace ALU. INP 2008 FIT VUT v Brně

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

TGH08 - Optimální kostry

Stromové struktury v relační databázi

TGH05 - aplikace DFS, průchod do šířky

TGH05 - Problém za milion dolarů.

Algoritmy výpočetní geometrie

Časová složitost / Time complexity

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Základy algoritmizace a programování

Porovnání výkonu různých variant splay stromů

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

SQL tříhodnotová logika

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

UNIVERZITA PARDUBICE DIPLOMOVÁ PRÁCE

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

Spojové struktury. Spojová struktura (linked structure):

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

Abstraktní datové typy FRONTA

Transkript:

Stromy Binární Vyhledávací Stromy, u kterých je č asová složitost operací v nejhorším případě rovná O(log n)

Vlastnosti Red-Black Stromů Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou nebo černou barvou. Kořen stromu je obarven černě. Listy (nil) jsou černé. Červený uzel má pouze černé syny. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů Černá výška (black-height bh(x) ) uzlu x je počet černých uzlů na cestě z uzlu x (ale bez uzlu x) k listu. Bh(T) stromu T je rovna bh(r), kde r je kořen stromu.

Výška Red-Black stromů s n uzly Lemma: Red-black strom T s bh(t)=h má minimálně 2h 1 uzlů. Lemma: Red-black strom T s bh(t)=h má maximálně 2h uzlú. Důsledek: Red-black strom s n uzly má výšku maximálně 2 log (n + 1). Důsledek: Operace nad red-black stromem velikosti n mají časovou složitost O(log n)

RB strom a implementace

Rotace Pravá rotace Levá rotace

Operace rotace se provádí v konstantním č ase Pravá rotace

Operace rotace se provádí v konstantním č ase Pravá rotace

Operace rotace se provádí v konstantním č ase Pravá rotace

Operace rotace se provádí v konstantním č ase Pravá rotace

Operace rotace se provádí v konstantním č ase Pravá rotace

Vložení prvku do Red-Black stromu 17 19 7 13 18 5 1 37 49 25 33 Vkládaný prvek: 21

Vložení prvku do Red-Black stromu Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou nebo černou barvou. 17 Kořen stromu je obarven černě. 19 7 13 18 5 Listy (nil) jsou černé. 37 1 49 25 21 Vkládaný prvek: 21 33 Červený uzel má pouze černé syny. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů

Vložení prvku do Red-Black stromu 17 19 7 13 18 5 1 37 49 25 33 Vkládaný prvek: 3

Vložení prvku do Red-Black Stromu Vlastnosti Red-Black stromu 17 Každý uzel stromu je obarven červenou nebo černou barvou. 19 7 13 18 5 37 1 49 25 Kořen stromu je obarven černě. Listy (nil) jsou černé. Problém dvou červených uzlů Červený uzel má pouze černé syny. 3 Vkládaný prvek: 3 33 Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů Cíl:Obnovit vlastnosti Red-black stromu přebarvením uzlů popř. provedením rotací

prvku do Red-Black Stromu Vlastnosti Red-Black stromu 17 Každý uzel stromu je obarven červenou nebo černou barvou. 19 7 13 18 5 37 1 49 25 Kořen stromu je obarven černě. Listy (nil) jsou černé. Problém dvou červených uzlů Červený uzel má pouze černé syny. 3 Vkládaný prvek: 3 33 Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů Cíl:Obnovit vlastnosti Red-black stromu přebarvením uzlů popř. provedením rotací

Obnovení vlastností Red-black stromu Ve stromu existuje pouze jeden červený uzel x jehož předchůdce je červený Postup: Opravit problém dvou červených uzlů x Oprava může způsobit stejný problém u předka -> je nutné postupovat směrem ke kořeni a upravit totéž i u předků Platí následující: Jelikož x má červeného předka pak x není kořen stromu. Je-li parent[x] červený, pak ani on není kořenem tj. existuje parent[parent[x]]. Je-li parent[x] černý, pak úpravy končí. parent[parent[x]] parent[parent[x]]? parent[x] x parent[x] x

Algoritmus vložená prvků do RB stromu

Obnovení vlastností Red-black stromu Existují 3 případy: parent[x] a jeho bratr jsou červení parent[x] je červený, jeho bratr je černý, and x je levý syn svého rodiče jako v případě 2; ale x je pravý syn svého rodiče parent[parent[x]] x Přebarvení parent[x] x Případ 1 parent[parent[x]] Přebarvení parent[x] x Případ 2 Pravá rotace

Obnovení vlastností Red-black stromu Existují 3 případy: parent[x] jeho bratr jsou červení parent[x] je červrný, and x je levý syn svého rodiče jako v případě 2; ale x je pravý syn svého rodiče parent[parent[x]] Přebarvení + Pravá rotace Levá rotace parent[x] x Případ 3 Případ 2

Vložení prvku do Red-black stromu - shrnutí Pozorování: Každý z uvedených případů je proveden v konstantním čase Případ 1 přesouvá x o dva kroky blíže ke kořeni a neprovádí se v něm žádné rotace pouze se přebarvují uzly V Případě 2 a 3, se provádí 1 nebo 2 rotace; pak úpravy končí Lemma: Vložení prvku do red-black stromu s n uzly má časovou složitost O(log n) a provádí se v něm pouze 2 rotace.

Zrušení uzlu v Red-Black stromu Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou nebo černou barvou. 17 19 7 Kořen stromu je obarven černě. 13 18 5 1 37 49 Červený uzel má pouze černé syny. 25 33 Rušený prvek: 25 Listy (nil) jsou černé. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů

Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou nebo černou barvou. 17 19 7 Kořen stromu je obarven černě. 13 18 5 1 uzlu v Red-Black stromu 37 33 Listy (nil) jsou černé. 49 Červený uzel má pouze černé syny. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů Rušený prvek: 25

Zrušení uzlu v Red-Black stromu Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou nebo černou barvou. 17 19 7 Kořen stromu je obarven černě. 13 18 5 1 37 49 Červený uzel má pouze černé syny. 25 33 Rušený prvek: 18 Listy (nil) jsou černé. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů

Zrušení uzlu v Red-Black stromu Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou nebo černou barvou. 17 19 7 Kořen stromu je obarven černě. 13 5 1 37 49 Červený uzel má pouze černé syny. 25 33 Rušený prvek: 18 Listy (nil) jsou černé. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů

Zrušení uzlu v Red-Black stromu Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou nebo černou barvou. 17 19 7 Kořen stromu je obarven černě. 13 5 1 37 49 Červený uzel má pouze černé syny. 25 33 Rušený prvek: 18 Listy (nil) jsou černé. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů První krok: Označíme syna zrušeného uzlu jako extra černý ( doubly black )

Zrušení uzlu v Red-Black stromu Vlastnosti Red-Black stromů Barva neodpovídá 17 Každý uzel stromu je obarven červenou nebo černou barvou. 19 7 13 Kořen stromu je obarven černě. 5 37 Listy (nil) jsou černé. 1 49 25 33 Rušený prvek: 18 Červený uzel má pouze černé syny. Na kterékoliv cestě z kořene do listu leží stejný počet černých uzlů

Zrušení uzlu v Red-Black stromu 17 19 7 13 5 1 37 49 25 33 Rušený prvek: 18

Korekce barvy uzlů v RB stromu Předpokládejme že x je levý syn svého rodiče a jeho bratr w je černý. Existují 3 případy, závisející parent[x] c na barvě synů w: Oba synové w jsou černí Pravý syn w je červený Levý syn w je červený a pravý je černý x c Přebarvení w x Případ 1 parent[x] c w x c' Případ 2 c Přebarvení c c' Levá rotace c'

Korekce barvy uzlů v RB stromu Předpokládejme že x je levý syn svého rodiče a jeho bratr w je černý. Existují 3 případy, závisející na barvě synů w: Oba synové w jsou černí Pravý syn w je červený Levý syn w je červený a pravý je černý parent[x] c x Případ 3 c w Přebarvení c Pravá rotace Případ 2

Korekce barvy uzlů v RB stromu Případ 4: Pravý bratr w uzlu x je červený. w (old) parent[x] parent[x] Přebarvení x Případ 4 w Levá rotace x w x w (new) Pozorování: Případy 2 a 3 provádí maximálně 2 rotace; pak je vše hotovo Případ 1 pouze přebarvuje a přesouvá korekci o jeden krok blíže ke kořeni Případ 4 provádí pouze jedinou rotaci a přesouvá korekci o jeden krok dále od kořene! Lemma: Zrušení uzlu v red-black stromu s n uzly má časovou složitost O(log n) a provádí maximálně tři rotace.

Algoritmus zrušení prvku RB stromu

Algoritmus zrušení prvku RB stromu