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



Podobné dokumenty
Dynamické datové struktury IV.

TÉMATICKÝ OKRUH TZD, DIS a TIS

Základní datové struktury

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

Lineární datové struktury

Datové struktury 2: Rozptylovací tabulky

Datové struktury Úvod

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

Dynamické datové struktury I.

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

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

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

Algoritmy a datové struktury

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

Algoritmizace prostorových úloh

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í

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

Dynamické datové struktury III.

Algoritmizace prostorových úloh

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

Stromy, haldy, prioritní fronty

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

Prioritní fronta, halda

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

TGH07 - Chytré stromové datové struktury

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

Kolekce, cyklus foreach

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

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

ABSTRAKTNÍ DATOVÉ TYPY

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

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

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

TGH07 - Chytré stromové datové struktury

Datové typy a struktury

Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,

Rekurzivní algoritmy

Šablony, kontejnery a iterátory

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

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

Datové struktury 1: Základní 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)

Základy algoritmizace. Hašování

Da D to t v o é v ty t py IB111: Datové typy

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

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

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

a) b) c) Radek Mařík

Lineární datové struktury

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

Abstraktní datové typy

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

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

Algoritmy na ohodnoceném grafu

Maturitní téma: Programovací jazyk JAVA

vyhledávací stromové struktury

Prohledávání do šířky = algoritmus vlny

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

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.

Časová a prostorová složitost algoritmů

Šablony, kontejnery a iterátory

Zpracování deklarací a přidělování paměti

ADT STROM Lukáš Foldýna

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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

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

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

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

07 Základní pojmy teorie grafů

Dynamické datové struktury II.

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

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

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

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

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

ADT/ADS = abstraktní datové typy / struktury

Stromy. Jan Kybic.

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

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

Návrh designu: Radek Mařík

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky

Abstraktní datové typy: zásobník

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

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

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Stromové struktury v relační databázi

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

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

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

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

Binární vyhledávací stromy II

Struktura programu v době běhu

STACK

Konstruktory a destruktory

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

Jednoduché datové struktury a stromy

Transkript:

Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 25

Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých je adresa každého elementu spočitatelná; počet indexů koresponduje s dimenzí pole (vektor, matice, tensor) předem stanovená velikost, prvky stejné velikosti přímý přístup na prvek pomocí indexu v konstatním čase vyhledání a zrušení prvku: O(n) - nutné projít (posunout) celé pole přidání/zrušení prvku na začátku a konci: O(1) nalezení nejmenšího a největšího prvku: O(n) Setříděné pole vyhledání prvku v O(log n) smazaní prvku v O(log n), pokud je implementováno jako označení prvku za neplatný (jinak v O(n) ) přidání prvku v O(n) nalezení nejmenšího v O(1) a největšího prvku v O(n) 26

Spojový seznam lineární spojový seznam - dynamická datová struktura, obsahující 1+ datových položek stejného typu, které jsou navzájem lineárně provázany vzájemnýmí odkazy pomocí ukazatelů nebo referencí. Aby byl seznam lineární, nesmí existovat cykly ve vzájemných odkazech. jednosměrný seznam - každá položka odkazuje na položku následující, v obousměrném seznamu odkazuje položka na následující i předcházející položky; konec (tail) a začátek (head) seznamu označují zarážky kruhový (cyklický) seznam obsahuje cyklus, vytvořený navázáním konce a začátku seznamu Sekvenční přístup k prvkům vyhledání prvku: O(n) přidání/zrušení prvku: O(1) 27

Zásobník Abstraktní datový typ, charakterizován způsobem manipulace s daty LIFO (Last In, First Out) pro manipulaci se udržuje tzv. ukazatel zásobníku, který udává tzv. vrchol zásobníku (poslední přidaná položka), a (minimálně) dvě operace push a pop Typickáčasová složitost O(1) operací se snadno realizuje pomocí pole nebo lineárního (jednosměrného) spojového seznamu Typické užití zásobníku pro ukládání info a dat při volání zanořených procedur (bezpečnostní problém s buffer overflow) 28

Fronty FIFO abstraktní datový typ, charakterizován způsobem manipulace s daty- FIFO (First In, First Out). Typickáčasová složitost O(1) operací, realizuje se obvykle pomocí spojového seznamu Obvyklé operace: bool empty() příznak prázdná/neprázdná fronta T& front() vrací referenci na položku v čele neprázdné fronty void dequeue() odebere položku v čele neprázdné fronty void enqueue(const T& foo) zařadí argument foo na konec fronty int size() vrací počet položek ve frontě 29

Halda stromová datová struktura splňující vlastnost haldy: pokud je B potomek A, pak klíč(a) klíč(b). min-heap - v kořenu stromu je prvek s nejmenším klíčem, naopak max-heap. 30

Halda min-heap - v kořenu stromu je prvek s nejmenším klíčem, naopak max-heap. stromová datová struktura splňující vlastnost haldy: pokud je B potomek A, pak klíč(a) klíč(b). Obvyklé operace: delete-max / delete-min: odstranění kořene z max-/min-heapu increase-key, decrease-key: aktualizace klíče v max-/min-heapu insert: vložení nového klíče merge: spojení dvou heapů do jednoho nového implementace v poli: k i < k 2i+1, k i < k 2i+2 31

Prioritní fronty abstraktní datový typ, charakterizován způsobem manipulace s daty: InsertWithPriority vlož prvek s asociovanou prioritou GetNext: vyber prvek s nejvyšší prioritou PeekAtNext: ukaž prvek s nejvyšší prioritou, aniž by byl z fronty odstraněn Implementace pomocí lineární struktury (pole, spojový seznam) výběr z čela fronty O(1), vložení se zařazením O(n) Implementace pomocí binárního stromu(haldy) maxheap, výběr O(log n), vložení O(log n) 32

Stromy zákl.pojmy - kořen stromu, (vnitřní) uzly či vrcholy, listy, předek (předchůdce) a následovník, rodič a potomek, podstrom stupeň (arita) uzlu = počet přímých následovníků vnitřního uzlu stupeň stromu = maximální stupeň mezi všemi uzly stromu cesta ve stromu: délka cesty = počet hran od kořene k danému uzlu (=hloubka uzlu) délka vnitřní cesty = součet délek cest jednotlivých uzlů průměrná délka vnitřní cesty: 1 P = n. i kde n i je počet vrcholů na i-té úrovni hloubka uzlu - délka cesty od kořene k uzlu hloubka stromu / výška stromu - rovna hodnotě maximální hloubky uzlu (pro binární strom: n=2 h+1 1, tedy hloubka h=floor(log 2 n) ) I n i i 33

Procházení stromem do šířky procházení po hladinách (vrstvách úrovní) - prohledávání do šířky. do hloubky procházení od kořene stromu na potomky daného vrcholu po jednotlivých větvích - prohledávání do hloubky. Uspořádání metody procházení: Přímé (pre-order) uspořádání - R, A, B Vnitřní (in-order) uspořádání - A, R, B A Inverzní (post-order) uspořádání - A, B, R Dokonale vyvážený strom pro každý vrchol platí, že počet vrcholů v levém podstromu a pravém podstromu se liší nanejvýše o jedna. Vyhledávací - všechny klíče v levém podstromu jsou menší než a všechny klíče v pravém podstromu jsou větší než klíč v daném vrcholu. R B 34

Binární strom Orientovaný graf s jedním kořenem, z něhož existuje cesta do všech vrcholů grafu; každý vrchol má max. dva následovníky a s výjimkou kořene právě jednoho předka. Kořen předka nemá. Reprezentace - pomocí dynamické struktury (hrany reprezentovány ukazateli), pomocí pole (viz halda). B-strom vícecestný m-ární strom, se stránkovou organizací; každá stránka (až na jednu) musí obsahovat n až 2n uzlů, kde n je zvolená konstanta (= řád B-stromu) B-strom je díky této vlastnosti vyvážený, operace přidání, vyjmutí i vyhledávání tedy probíhají v logaritmickém čase (výška B-stromu min. log m n, max log m/2 n). Typické užití modifikace (B+) používají souborové systémy (NTFS, ReiserFS, XFS a JFS2) a relační databáze ukládání indexů 35

seznam binární strom (min-) heap insert O(1) O(log n) O(log n) findmin O(n) O(1) O(1) deletemin O(n) O(log n) O(log n) decreasekey O(1) O(log n) O(log n) delete O(n) O(log n) O(log n) merge O(1) O(m log(n+m)) O(m log(n+m)) 36

Skip List Přeskakovací seznam - N-vrstvá struktura, popsána 1990 (William Pugh) jako jednodušší/rychlejší alternativa k vyváženým stromům Randomizovaná varianta setříděného spojového seznamu s dodatečnými paralelními vrstvami. Paralelní seznamy přeskakují více položek. Vyhledávání začíná na nejvyšší vrstvě a přechází do nižších vrstev pokud je aktuální položka větší/rovna vyhledávanému klíči. Je-li rovna, je nalezeno, je-li aktuální položka větší, procedura se opakuje po návratu o jeden krok a přechodu do nižší vrstvy.. Operace Insert, Search, Delete jsou prováděny v čase O(log n) za podmínky dostatečného počtu vrstev 37

Hash (rozptylovací) tabulky Datová struktura, která používá hashovací funkci H(key) pro efektivní mapování klíče k na celéčíslo z intervalu <0, N-1> a ukládá položky (klíč, data) na vypočtené pozice H(key) Při mapování hašovací funkcí může docházet ke kolizím řešenířetězené seznamy (rozptýlené tabulky), řetězené seznamy s oblastí přetečení, otevřená adresace (sekundární hashovací fce lineární/kvadratické pokusy, double hash fce) Perfektní hashování: ke kolizím nedochází Vlastnosti: nejhorší případ - všechny klíče kolidují složitost O(n) Při faktoru naplnění A = n/n (počet položek/velikost tab.) 0,7 je očekávaná složitost O(1) Příklad H(key) = Ordinal(key) mod N 38

Řešení kolizí 1. řetězené seznamy tzv. rozptýlené tabulky. 2. oblast přetečení řetězený seznam je vytvářen v oblasti přetečení 3. sekundární hashovací funkce - umístění vkládaného prvku na jinou volnou pozici, kterou určíme sekundární hašovací funkcí. metoda lineárních pokusů - sekvenčně prohledává tabulku, G(i)=i ; tj. h 0 = H(k) h i = (h 0 + i) mod L, i = 1,, L-1 Prvky se shlukují kolem pozic primárních klíčů metoda kvadratických pokusů - rozptyluje prvky rovnoměrněji po celém poli, G(i)=ci 2, tj. h 0 = H(k) h i = (h 0 + ci 2 ) mod L, i > 0, c>0 metoda dvojího hashování h 0 = H(k) h i = (h 0 + j H (k)) mod L, i > 0, c>0 L... Neexistuje společný dělitel L a počet řádků (L je bezpečné), jinak se některé pozice obsazují a jiné vůbec 39

Slovníky Slovník je abstraktní datová struktura, skládající se z množiny unikátních klíčů a a množiny hodnot, kde každý klíč je asociován (mapován) s jednou hodnotou nebo s množinou hodnot. Základní operace: new, insert, find and delete. new() vrací slovník D find(k, D) vrací hodnotu asociovanou s klíčem k ve slovníku D insert(k, v, D) asociuje ve slovníku D klíč k s hodnotou v delete(k, D) ruší klíč k ve slovníku D Implementace binární vyhledávací stromy (AVL), skiplisty, hash tabulky aj. 40

Rekurze rekurzivní algoritmus volá sám sebe dokud není dosažena ukončovací podmínka Iterativní algoritmus používá opakující se konstrukce (cykly) Příklad Tree (length, angle) { Draw(length, angle); Tree(length/2, angle+delta); Tree(length/2, angle-delta); } Každý algoritmus využívající rekurzi lze přepsat do nerekurzivního tvaru (např. s použitím zásobníku) Rekurzivní datové struktury definice dynamických datových struktur (seznamy, stromy): struct node { int n; // some data struct node *ptr_next; // pointer to another struct node }; // LIST is simply a synonym for struct node * typedef struct node *LIST; 41