Stromy, haldy, prioritní fronty



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

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

Rekurzivní algoritmy

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

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

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

Dynamické datové struktury III.

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

Prioritní fronta, halda

TGH07 - Chytré stromové datové struktury

Algoritmy na ohodnoceném grafu

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

TGH07 - Chytré stromové datové struktury

Dynamické datové struktury IV.

Algoritmy výpočetní geometrie

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

Datové struktury 2: Rozptylovací tabulky

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

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

Techniky návrhu algoritmů

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

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

TGH05 - Problém za milion dolarů.

Dynamické programování

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

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.

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

Datové struktury Úvod

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

Úvod do teorie grafů

Použití dalších heuristik

Algoritmy a datové struktury

Stromy. Jan Kybic.

Algoritmus pro hledání nejkratší cesty orientovaným grafem

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

Vzdálenost uzlů v neorientovaném grafu

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

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

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

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

ADT STROM Lukáš Foldýna

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

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

Časová a prostorová složitost algoritmů

ALGORITMY A DATOVÉ STRUKTURY

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

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

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

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

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

Teorie grafů BR Solutions - Orličky Píta (Orličky 2010) Teorie grafů / 66

Datové struktury 1: Základní datové struktury

4EK311 Operační výzkum. 5. Teorie grafů

opakování reprezentace grafů, dijkstra, bellman-ford, johnson

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

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

TGH06 - Hledání nejkratší cesty

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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

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

TGH08 - Optimální kostry

Algoritmická matematika 1

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

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

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

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

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

TGH06 - Hledání nejkratší cesty

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

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

Jan Březina. 7. března 2017

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

Předmět: Algoritmizace praktické aplikace

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

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í

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Algoritmy I, složitost

H {{u, v} : u,v U u v }

Union-Find problém. Kapitola 1

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Operační výzkum. Síťová analýza. Metoda CPM.

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

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í

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

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

VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5

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

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

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

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

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

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Hledáme efektivní řešení úloh na grafu

a) b) c) Radek Mařík

6. Tahy / Kostry / Nejkratší cesty

R zné algoritmy mají r znou složitost

Transkript:

Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 1 / 27

Motivace Volání rekurzivní funkce Motivace 1: Volání rekurzivní funkce Řazení dat QuickSortem. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 2 / 27

Motivace Rekurzivně definova(tel)ná množina dat Motivace 2: Rekurzivně definova(tel)ná množina dat Množina všech permutací dané posloupnosti. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 3 / 27

Základy teorie grafů Grafy Orientované a neorientované grafy Definice Orientovaný graf o n uzlech je dvojice G = (V (G), E(G)), kde V (G) je množina uzlů, n = V (G), a E(G) = { u, v ; u, v V (G)} V (G) V (G) množina = orientovaných hran, čili uspořádaných dvojic uzlů (graficky šipek). Orientovaná hrana u, u se nazývá smyčka. (Neorientovaný obyčejný) graf o n uzlech je dvojice G = (V (G), E(G)), kde V (G) je množina uzlů a E(G) = {{u, v}; u, v V (G), u v} = množina neorientovaných hran, čili neuspořádaných dvojic uzlů. Smyčky nejsou povoleny. Poznámka: Nuance v rozdílech pojmů pro orientované a neorientované grafy budeme pro stručnost pomíjet. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 4 / 27

Stromy v teorii grafů Volné stromy (Volné) stromy Definice Volný strom je každý souvislý acyklický a neorientovaný graf. Les je každý acyklický a neorientovaný graf. Poznámka: Většina algoritmů nad stromy funguje i nad lesy. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 5 / 27

Stromy v teorii grafů Volné stromy Vlastnosti volných stromů Věta Nechť G = (V (G), E(G)) je neorientovaný graf. Pak následující tvrzení jsou ekvivalentní. 1 G je volný strom. 2 Jakékoli 2 uzly v G jsou spojeny jedinečnou jednoduchou cestou. 3 G je souvislý, ale pokud vyjmeme jakoukoli hranu z E(G), výsledný graf bude nesouvislý. 4 G je souvislý a E(G) = V (G) 1. 5 G je acyklický a E(G) = V (G) 1. 6 G je acyklický, ale pokud přidáme jakoukoli hranu do E(G), výsledný graf bude obsahovat aspoň jeden cyklus. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 6 / 27

Stromy v teorii grafů Kořenové stromy Kořenové stromy Definice Kořenový strom je volný strom, ve kterém jeden z uzlů je odlišen od ostatních jako kořen, r. Uzly u ve vzdálenosti d od kořenu r tvoří hladinu uzlů v hloubce h(u) = d. Kořen má hloubku h(r) = 0. Nechť uzel u leží na (jedinečné) cestě z kořene r do uzlu v. Pak u je předchůdce v a v je následník u. Nejbližší předchůdce uzlu je jeho rodič a nejbližší následník je jeho potomek. Každý uzel kromě kořenu má jedinečného rodiče. Uzly se stejným rodičem jsou sourozenci. Uzel, který nemá potomky, se nazývá list. Ostatní uzly jsou vnitřní. Stupeň vnitřního uzlu je počet jeho potomků (rodič se nepočítá)!!!!!!! k-ární strom: každý vniřní uzel má stupeň nejvýše k. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 7 / 27

Stromy v teorii grafů Kořenové stromy Kořenové stromy Poznámka: Kořenový strom je rekurzivně definovatelný. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 8 / 27

Stromy jako datové struktury Uspořádané stromy Uspořádané stromy k-ární stromy jsou z implementačních důvodů obvykle uspořádané. Definice Uspořádaný strom. obrazek Potomci každého vnitřního uzlu jsou očíslovány (zleva doprava) čísly {1,..., #počet potomků}. Dva kořenové stromy se stejnými uzly v jiném pořadí jsou různé uspořádané stromy. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 9 / 27

Stromy jako datové struktury Poziční stromy Poziční stromy k-ární stromy jsou z implementačních důvodů ještě častěji poziční. Definice Poziční strom. obrazek Potomci každého vnitřního uzlu jsou označeny různými čísly. Pokud žádný potomek není označen číslem i, pak i-tý potomek chybí a příslušný podstrom je prázdný (NIL). Dva kořenové stromy se stejnými podstromy ale jiným označením pozic jsou různé poziční stromy. k-ární strom je poziční strom, kde každý uzel má potomky označeny čísly k. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 10 / 27

Stromy jako datové struktury Binární stromy Binární stromy Definice k-ární strom pro k = 2 se nazývá binární. Alternativní rekurzivní definice binárního stromu. Definice Binární strom (BS) T je datová struktura definovaná nad konečnou množinou uzlů, která buď neobsahuje žádné uzly nebo obsahuje 3 disjunktní množiny uzlů: kořen, BS zvaný levý podstrom a BS zvaný pravý podstrom. Pokud není levý podstrom prázdný (NIL), jeho kořen je levým potomkem kořenu. Podobně pro pravý podstrom. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 11 / 27

Stromy jako datové struktury Binární stromy prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 12 / 27

Stromy jako datové struktury Plné, výškově vyvážené a úplné stromy k-ární stromy Plné, výškově vyvážené a úplné k-ární stromy Definice (a) Plný k-ární strom: Každý vnitřní uzel má stupeň právě k. (b) Výškově vyvážený strom: Hloubka libovolných dvou listů se liší nejvýše o 1. (c) Úplný k-ární strom: Výškově vyvážený plný k-ární strom, plněný zleva doprava, kde nejvýše 1 vnitřní uzel má stupeň menší než k. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 13 / 27

Stromy jako datové struktury Vlastnosti úplných k-árních stromů Vlastnosti úplných k-árních stromů Věta Nechť T je úplný k-ární strom o n uzlech. Pak Hloubka h(t ) = log k n. Počet uzlů v hloubce i < h(t ) je k i. Pro n = kh(t )+1 1 k 1 mají všechny listy hloubku h(t ) a všechny vnitřní uzly stupeň k. Počet listů je pak k h(t ) a počet vnitřních uzlů je 1 + k + k 2 + + k h(t ) 1 = kh(t ) 1 k 1. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 14 / 27

Stromy jako datové struktury Vlastnosti binárních a úplných binárních stromů Vlastnosti úplných binárních stromů (UBS) Věta Nechť T je UBS o n uzlech. Pak (a) Hloubka h(t ) = log n. (b) Počet uzlů v hloubce i < h(t ) je 2 i. (c) Počet vnitřních uzlů je n/2 a počet listů je n/2. (d) Pro n = 2 h(t )+1 1 mají všechny listy hloubku h(t ). Věta Nechť T je libovolný binární strom o n uzlech. Pak (e) n 1 h(t ) log n. (f) Počet uzlů stupně 2 je počet listů minus jedna. (Snadno indukcí.) prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 15 / 27

Stromy jako datové struktury Vlastnosti binárních a úplných binárních stromů Příklady úplných binárních stromů (UBS) prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 16 / 27

Implementace binárních stromů Implementace obecného binárního stromu pomocí spojových struktur Implementace binárního stromu pomocí spojových struktur struct node { int key; node *parent; node *left; node *right } prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 17 / 27

Implementace binárních stromů Implementace UBS pomocí pole Implementace UBS pomocí pole Věta Nechť T je UBS o n uzlech. Předpokládejme, že uzly T jsou číslovány zleva doprava shora dolů, kořen má číslo 1. Pak lze UBS reprezentovat pomocí jednorozměrného pole A[1,..., n] tak, že uzel stromu i je reprezentován prvkem pole A[i]. Indexy rodiče, levého potomka a pravého potomka uzlu i v poli A lze spočítat pomocí následujících funkcí: Parent(i) = i/2. Left(i) = 2i. Right(i) = 2i + 1. Poznámka: Implementace těchto funkcí je 1 strojová instrukce. obrazek prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 18 / 27

Binární halda Definice Binární halda (heap) Definice Uvažujme pole A[1,..., Length(A)] implementující UBS pomocí funkcí Parent, Left, Right. Pak binární halda o velikosti Heap Size(A) < Length(A) je dynamická množina uložená v A[1,..., Heap Size(A)], která splňuje H-vlastnost: Pro každý prvek s indexem 1 < i Heap Size(A) platí Důsledek A[Parent(i)] A[i] (1) Největší hodnota je v kořeni A[1]. Hloubka haldy o Heap Size(A) prvcích je Θ(log(heap size(a))). Poznámka: Takto definovaná halda nemá nic společného s haldou ve smyslu dynamické paměti. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 19 / 27

Binární halda Udržování H-vlastnosti Algoritmus udržování H-vlastnosti Algoritmus Vstup: Pole A a index i takový, že binární podstromy s kořeny v A[Left(i)] a A[Right(i)] jsou binární haldy (splňují H-vlastnost), ale přitom A[i] < A[Left(i)] nebo A[i] < A[Right(i)]. procedure Heapify(A, i) { l Left(i); r Right(i); if (i Heap Size(A) & A[l] > A[i]) then Largest l else Largest i; if (r Heap Size(A) & A[r] > A[Largest]) then Largest r; if (Largest i) then {A[i] A[Largest]; Heapify(A, Largest)} } prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 20 / 27

Binární halda Udržování H-vlastnosti Složitost algoritmu udržování H-vlastnosti obrazek Věta Časová složitost operace Heapify na podstromu o n uzlech (s kořenem i) je t HP (n) t HP (2n/3) + Θ(1) (2) (což znamená t HP (n) = Θ(log n), viz přednáška za 2 týdny). Důkaz. Po provedení Θ(1) operací, procedura Heapify se volá rekurzivně pro levý nebo pravý podstrom a ten má v nejhorším případě velikost 2n 3 (případ, kdy poslední hladina stromu je zaplněna přesně z jedné poloviny). prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 21 / 27

Binární halda Algoritmus konstrukce haldy Konstrukce haldy Vstup: libovolné pole A[1,..., Length(A)]. procedure Build Heap(A) { Heap Size(A) Length(A); for (i = length(a)/2 downto 1) do Heapify(A, i) } Poznámky: Prvky v A[ n/2 + 1,..., n] = listy = 1-prvkové haldičky. Procedura Build Heap mapuje postupně na zbývající prvky pole operaci Heapify tak, aby postupně směrem nahoru platila H-vlastnost. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 22 / 27

Binární halda Algoritmus konstrukce haldy Složitost algoritmu konstrukce haldy Věta Časová složitost t BH (n) = O(n). Důkaz. Protože se n/2 krát volá Heapify, které trvá O(log n), je t BH (n) = O(n log n). Protože halda je UBS, platí, že ve výšce h je nejvýše n 2 uzlů. Heapify haldy o výšce h trvá O(h). Tedy h+1 t BH (n) = log n h=0 n 2 h+1 O(h) = O protože pro libovolné k > 1 platí k h k 2 h = (1 12 k ) + h=0 ( 1 2 1 2 k h=1 ) + + 1 k 2 h + h=2 n log n h=0 h = O(2n) = O(n), 2 h 1 k 2 h + + ( 1 2 k 1 1 2 k ) = h=k 1 2 h = ( 2 1 2 k 1 ) k 2 k < 2. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 23 / 27

HeapSort HeapSort procedure HeapSort(A) { Build Heap(A); for (i length(a) downto 2) do { A[1] A[i]; Heap Size(A) Heap Size(A) 1; Heapify(A, i) } } Věta Časová složitost t HS (n) = O(n log n). Důkaz. t HS (n) = t BH (n) + 2 i=n 1 (t HP(i) + Θ(1)) = O(n) + O( n 1 i=2 log i) = O(n log n). prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 24 / 27

Prioritní fronta Prioritní fronta Definice Prioritní fronta je dynamická množina umožňující efektivní realizaci operací vkládání libovolných nových prvků a jejich vybírání v pořadí jejich velikosti pomocí následujících operací: Get Max(S), Extract Max(S), Insert(S, k). Jedna z nejužitečnějších aplikací haldy. Např. rozvrhování úloh podle relativních priorit v multitaskingovém systému: při dokončení běžící úlohy se vybere nová s nejvyšší prioritou, nové úlohy jsou průběžně zařazovány. událostmi řízená simulace: prvky haldy jsou události s časovou značkou, které se mají simulovat, simulace se musí provádět v pořadí časových značek, nové události se zařazují podle časových značek, místo operace Max potřebujeme Min. prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 25 / 27

Prioritní fronta Operace nad prioritní frontou function Get Max(A) { return A[1] } function Extract Max(A) { if (Heap Size(A) < 1) then error(heapunderflow); max A[1]; A[1] A[Heap Size[A]]; Heap Size(A) Heap Size(A) 1; Heapify(A, 1); return max} } prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 26 / 27

Prioritní fronta Operace nad prioritní frontou procedure Insert(A, k) { Heap Size(A) Heap Size(A) + 1; i Heap Size(A); while (i > 1 & A[Parent(i)] < k) do { A[i] A[Parent(i)]; i Parent(i); } A[i] k } prof. Pavel Tvrdík (ČVUT) Stromy, haldy, prioritní fronty DSA, ZS 2008/9, Přednáška 6 27 / 27