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



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

TGH07 - Chytré stromové datové struktury

TGH07 - Chytré stromové datové struktury

Datové struktury Úvod

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

Dynamické datové struktury III.

Prioritní fronta, halda

Stromy, haldy, prioritní fronty

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

Dynamické datové struktury IV.

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

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

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

TGH05 - Problém za milion dolarů.

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í

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

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

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

TGH06 - Hledání nejkratší cesty

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

Abstraktní datové typy

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

Algoritmy na ohodnoceném grafu

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

Algoritmizace prostorových úloh

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

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 - haldy a třídicí algoritmy

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

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

Konstruktory a destruktory

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

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

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.

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

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

Lineární datové struktury

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

TGH06 - Hledání nejkratší cesty

Šablony, kontejnery a iterátory

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

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

10. Složitost a výkon

prioritu a vždy je třeba začít pracovat na úkolu, který ma v daný okamžik

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Dynamické datové struktury I.

Co když chceme najít i druhý nejmenší prvek? Nebo co když chceme najít k

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.

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

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

Radek Mařík

Algoritmy a datové struktury

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

Algoritmizace prostorových úloh

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Šablony, kontejnery a iterátory

Spojová implementace lineárních datových struktur

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

Skip list dokumentace

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

PRAKTICKÁ EFEKTIVITA KONTEJNERŮ

Stromové struktury v relační databázi

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Abstraktní datové typy FRONTA

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

Pole a kolekce. v C#, Javě a C++

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

Časová a prostorová složitost algoritmů

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

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

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

ADT STROM Lukáš Foldýna

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

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

SQL tříhodnotová logika

Časová složitost algoritmů

Základy algoritmizace a programování

8. Geometrie vrací úder (sepsal Pavel Klavík)

Padovan heaps Vladan Majerech

a) b) c) Radek Mařík

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

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

6. Tahy / Kostry / Nejkratší cesty

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

Základy algoritmizace. Hašování

Semestrální práce 2 znakový strom

Datové struktury I NTIN066

Algoritmy I, složitost

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

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

Datové struktury 2: Rozptylovací tabulky

Návrh designu: Radek Mařík

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

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

1 Test 1 naivní vs standardní

Druhá skupina zadání projektů do předmětu Algoritmy II, letní semestr 2014/2015

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

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

Transkript:

Amortizovaná složitost. Prioritní fronty, haldy binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 1. Asymptotické odhady Asymptotická složitost je deklarována na základě nejhorší nejlepší) možné instance běhu algoritmu, což ale není vždy vypovídající, protože i nejhorší sekvence případů může mít výrazně lepší průběh, než by asymptotická složitost napovídala. Operace s vysokou složitostí změní datovou strukturu tak, že takto špatný případ nenastane po nějakou delší dobu - tím se složitá operace amortizuje. horní asymptotický odhad f je shora asymptoticky ohraničená funkcí g až na konstantu): f Og) 0 c > 0) n0 ) n > n ) : c g f dolní asymptotický odhad f je zespoda asymptoticky ohraničená funkcí g až na konstantu): f Ωg) 0 c > 0) n0 ) n > n ) : c g f optimální asymptotický odhad f je asymptoticky ohraničená funkcí g z obou stran až na konstantu): f Ωg) 2 c1, c2 > 0) n0 ) n > n0 ) : c1 g f c g 2. Amortizovaná složitost = průměrný čas na vykonání operace v sekvenci operací v nejhorším případě - nevyužívá pravděpodobnost => průměrný čas na operaci skutečně zaručený Příklad: vkládání prvků do ArrayListu - list zdvojnásobuje svou velikost pokaždé, když dojde k jeho naplnění - vkládání prvků bez realokace) vyžaduje čas O1), pro N prvků je to ON) - v nejhorším případě vkládání operace potřebuje čas až ON) - vložení N prvků včetně realokace) je tedy potřeba v nejhorším případě ON) + ON) = ON) - amortizovaný čas na jedno vložení prvku je pak ON)/N= O1) 3. Prioritní fronty - abstraktní datový typ ADT) - každý element má přiřazenu svou prioritu - první jsou z fronty vybírány elementy s nejnižší/nejvyšší prioritou - PF nemusí být implementována pouze haldou -1-

- PF musí implementovat alespoň tyto operace: void pushelement e) // vloží element s prioritou Element pull) // vybere z fronty element s nejnižší/nejvyšší prioritou 4. Binární halda - je to implementace ADT prioritní fronty - stromová struktura s vlastností: pokud A je potomek B, potom B<=A - operace: insertx) // vloží prvek x do haldy accessmin) // vrátí nejmenší prvek haldy deletemin) // odstraní z haldy nejmenší prvek obvykle koře decreasekeyx,d) // zmenší hodnotu prvku x o d mergeh1, H2) // sloučí haldy H1a H2 do jedné, kterou vrátí deletex) // odstraní prvek x z haldy insertx) Obrázek 1 - Binární halda je stromová struktura 1. přidáme prvek x na konec haldy; 2. while parentx)>x) { prohodíme prvek x s prvkem parentx); 3. } accessmin) - vrátí hodnotu kořene stromu - složitost O1) deletemin) 1. vrátí element x, který je kořenem stromu; -2-

2. na místo x vloží nejpravější prvek y ze spodního patra pozor, ten nemusí být maximální!) 3. whiley > nejmenší z jeho dětí){ prohoď y a jeho nejmenšího potomka // y probublává dolů stromem 4. } decreasekeyx, d) - zmenšíme hodnotu prvku x o d, prvek x necháme probublat stromem nahoru delete x) - podobné jako deletemin) Reprezentace binární haldy v paměti 1. stromovou dynamickou datovou strukturou s ukazateli v obou směrech 2. polem kořen má index 1, potomci mají index 2k a 2k+1) 5. d-regulární halda Obrázek 2 - Bin. halda jako pole - d udává stupeň štěpení stromu haldy - pro d=2 je d-regulární halda právě binární halda - operace a jejich složitost nad d-regulární haldou jsou analogické jako v případě binární haldy - přesná složitost se liší základem logaritmu základ je d) 6. Binomiální halda - mn. stromů řádu i=1,, log, každý řád je zastoupen max. jedním stromem - pro binomiální strom řádu i platí: každý vrchol je menší nebo roven všem svým potomkům má 2 i vrcholů má hloubku i jeho kořen má i synů strom řádu i vznikne ze dvou stromů řádu i -1-3-

Obrázek 3 - Řády stromu -implementace: pole ukazatelů na kořeny stromů řádu i, plus zvláštní ukazatel na min prvek kořen jednoho ze stromů) mergeh 1, h 2 ) - spojení dvou stromů - ke stromu, jehož kořen je menší, se jako další syn připojí strom s větším kořenem insertx), amortizovaná složitost je konstantní - prvek tvoří strom řádu 0, strom se sloučí s jiným stromem řádu 0 pokud existuje) a vznikne jeden strom řádu 1, ten se dále sloučí s dalším existujícím stromem řádu 1... accessmin) - složitost O1) - vrátí prvek reprezentovaný kořenem stromu, na nějž ukazuje MIN ukazatel deletemin) - vezmou se všechny podstromy, které vznikly odebráním kořene a ty se postupně mergují s ostatními stromy decreasekey) - funguje jako u binární haldy, poté se aktualizuje min. ukazatel 7. Fibonacciho halda - velmi podobná binomiální haldě, ale některé mají amortizovanou složitost - operace insert, accessmin a merge probíhají v O1) - vnitřní struktura je flexibilnější - podstromy nemají pevně daný tvar a v extrémním případě může každý prvek haldy tvořit izolovaný strom nebo naopak všechny prvky mohou být součástí jediného stromu hloubky N => jednoduchá implementace - operace, které nejsou potřebné, odkládáme a vykonáváme je až v okamžiku, kdy je to nevyhnutelné, například spojení nebo vložení nového prvku se jednoduše provede spojením -4-

kořenových seznamů s konstantní náročností) a jednotlivé stromy spojíme až při operaci snížení hodnoty klíče - každý vrchol má nejvýše log synů - velikost stromu řádu k je nejméně F k +2, kde F k je k-té Fibonacciho číslo - kořen každého stromu řádu k má právě k potomků - stromy haldy propojeny dvojitým kruhovým spojovým seznamem 8. Zdroje Obrázek 4 - Kruhový seznam [1] Genyk-Berezovskyj, Marko: Přednáška 1 z PAL. https://cw.felk.cvut.cz/lib/exe/fetch.php/courses/a4m33pal/pal01.pdf [2] Genyk-Berezovskyj, Marko: Přednáška 5 z PAL. https://cw.felk.cvut.cz/lib/exe/fetch.php/courses/a4m33pal/pal05.pdf [3] Wikipedia: Priority Queue. http://en.wikipedia.org/wiki/priority_queue [4] Mička, Pavel: Amortizovaná složitost. http://www.algoritmy.net/article/3024/amortizovana-slozitost -5-