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

Rozměr: px
Začít zobrazení ze stránky:

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

Transkript

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

2 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A do uzlu B uzel A je předek (otec) uzlu B, uzel B je potomek (syn) uzlu A kořen = uzel, který nemá předka, strom má jeden kořen list = uzel, který nemá potomky, listů je obvykle více výška stromu = počet hladin, maximální vzdálenost od kořene k listu (měřeno počtem vrcholů mezi kořenem a listem, délku hran nijak neřešíme) A A B A K K - kořen L - listy výška stromu = 3 A A L A L A A L A A žádný vrchol ve stromové struktuře nemá více rodičů stromy jsou speciálním případem tzv. grafů (těmi se budeme zabývat později) A L A L A L Jan Hnilica Počítačové modelování 14 2

3 Podstromy pro libovolný uzel U platí, že na jeho syny lze pohlížet jako na kořeny podstromů podstromy jsou samy o sobě stromy stromová struktura má přirozeně rekurzivní charakter při práci se stromy se často využívá rekurzivních funkcí uzel U podstrom U podstrom U Jan Hnilica Počítačové modelování 14 3

4 Obecný a binární strom obecný strom: počet potomků uzlu není nijak omezen binární strom: uzel může mít maximálně dva potomky - binární stromy se používají častěji než obecné obecný strom binární strom Jan Hnilica Počítačové modelování 14 4

5 Binární strom uzel stromu typedef struct uzel // uložené informace int X; double Y; char Z;... // pointery na syny (podstromy) struct uzel * levy; struct uzel * pravy; Uzel; v programu uchováváme pointer na kořen stromu, který předáváme jako parametr funkcím (stejně jako jsme předávali pointer na první uzel lineárního seznamu) listy mají oba ukazatele na syny nastaveny na NULL Jan Hnilica Počítačové modelování 14 5

6 Průchod binárním stromem cílem je postupně navštívít a zpracovat všechny uzly stromu (zpracování = výpis, vynulování...) při práci se stromy se často využívá jejich rekurzivní charakter úkol vyřešíme pomocí rekurzivní funkce, která přebírá pointer na kořen stromu K void PruchodStromem(Uzel * K) if (K == NULL) return; ZPRACUJ(K); // zpracujeme aktuální uzel PruchodStromem(K->levy); // průchod levým podstromem PruchodStromem(K->pravy); // průchod pravým podstromem Jan Hnilica Počítačové modelování 14 6

7 Průchod binárním stromem jsou 3 možnosti, kam umístit funkci pro zpracování uzlu: void PruchodStromem(Uzel * K) if (K == NULL) return; ZPRACUJ(K); // 1: pre-order (před průchodem podstromy) PruchodStromem(K->levy); ZPRACUJ(K); // 2: in-order (mezi průchody oběma podstromy) PruchodStromem(K->pravy); ZPRACUJ(K); // 3: post-order (po průchodu podstromy) A pořadí zpracovávaných uzlů B C pre-order: A B D E C F G in-order: D B E A F C G D E F G post-order: D E B F G C A Jan Hnilica Počítačové modelování 15 7

8 Binární vyhledávací strom (BVS) datová struktura k rychlému ukládání a vyhledávání údajů podle hodnoty klíče klíč = jedna z položek uzlu pro každý uzel stromu platí: všechny uzly v jeho levém podstromu mají menší hodnotu klíče všechny uzly v jeho pravém podstromu mají větší hodnotu klíče obecně může strom obsahovat i více uzlů se stejným klíčem (pak by např. v levém podstromu byly uzly s klíčem klíč kořene) Jan Hnilica Počítačové modelování 14 8

9 Binární vyhledávací strom (BVS) Uzel pro jednoduchost bude obsahovat jedinou proměnnou typu int typedef struct uzel int hodnota; // uložená informace struct uzel *levy, *pravy; // pointery na syny Uzel; Vytvoření nového uzlu funkce vrací pointer na nově vytvořený uzel (tzn. vrací paměťovou adresu, na které uzel leží) Uzel * NovyUzel(int h) Uzel * U = (Uzel*)malloc(sizeof(Uzel)); U->hodnota = h; U->levy = U->pravy = NULL; return U; Jan Hnilica Počítačové modelování 14 9

10 Binární vyhledávací strom (BVS) Vyhledání hodnoty průchod od kořene k listům, v každém uzlu se podle hodnoty klíče rozhodujeme, zda pokračovat doprava či doleva (popř. zda jsme uzel už našli) neprocházíme celý strom, ale jedinou cestu od kořene k listům funkce přebírá pointer na kořen stromu a hledanou hodnotu, vrací pointer na uzel s požadovanou hodnotou, případně NULL, pokud uzel ve stromu není Uzel * Hledej(Uzel * K, int hodnota) while (K!= NULL && K->hodnota!= hodnota) if (hodnota > K->hodnota) K = K->pravy; else K = K->levy; return K; Jan Hnilica Počítačové modelování 14 10

11 Binární vyhledávací strom (BVS) Vyhledání hodnoty rekurzivní varianta funkce Uzel * Hledej(Uzel * K, int hodnota) if (K == NULL K->hodnota == hodnota) return K; if (hodnota > K->hodnota) return Hledej(K->pravy, hodnota); else return Hledej(K->levy, hodnota); Jan Hnilica Počítačové modelování 14 11

12 Binární vyhledávací strom (BVS) Přidání hodnoty hodnotu ukládáme do nového listu, přitom je potřeba zachovat strukturu podle pravidel BVS uzel s novou hodnotou připojujeme tam, kde ho pak budeme hledat průchod stromem jako při hledání, dokud nerazíme na konec větve (NULL), přitom udržujeme pointer na předka, za který nový uzel připojíme časová složitost: jeden průchod od kořene k listu (výška stromu) funkce přebírá pointer na kořen stromu odkazem (může ho změnit, pokud byl doposud NULL) void Pridej(Uzel ** K, int hodnota) // strom byl dosud prázdný if (*K == NULL) *K = NovyUzel(hodnota); return; // pracovní indexy Uzel *P = *K; // pro hledaní pozice nového uzlu Uzel *Q = *K; // předek nového uzlu Jan Hnilica Počítačové modelování 14 12

13 Binární vyhledávací strom (BVS) Přidání hodnoty (pokračování kódu z předchozí strany) // najdeme místo pro nový uzel while (P!= NULL) Q = P; if (hodnota == P->hodnota) return; if (hodnota > P->hodnota) P = P->pravy; else P = P->levy; // vytvoříme nový uzel a připojíme ho za Q P = NovyUzel(hodnota); if (hodnota > Q->hodnota) Q->pravy = P; else Q->levy = P; Pridej(&K, hodnota); // volání funkce v programu Jan Hnilica Počítačové modelování 14 13

14 Binární vyhledávací strom (BVS) Přidání hodnoty totéž jako rekurzivní funkce Uzel * PridejRek(Uzel * K, int hodnota) if (K == NULL) K = NovyUzel(hodnota); else if (hodnota > K->hodnota) K->pravy = PridejRek(K->pravy, hodnota); else if (hodnota < K->hodnota) K->levy = PridejRek(K->levy, hodnota); return K; K = Pridej(K, hodnota); // volání funkce v programu Jan Hnilica Počítačové modelování 14 14

15 Binární vyhledávací strom (BVS) Smazání hodnoty nejprve musíme nalézt rušený uzel a jeho předka uzel U, obsahující odstraňovanou hodnotu: a. je list smažeme ho, v jeho předkovi nastavíme příslušný pointer na NULL b. má jednoho syna smažeme ho, přepojíme jeho syna na místo smazaného uzlu (předek U pak ukazuje na syna U místo na U) c. má dva syny nemůžeme ho smazat (syny by nebylo kam zapojit) hodnotu v uzlu U nahradíme hodnotou h, což může být a) největší hodnota levého podstromu U b) nejmenší hodnota pravého podstromu U uzel obsahující h je buďto list, nebo má jednoho syna smažeme ho jedním z výše uvedených postupů Pozn. Rozmyslete si, že uvedený výběr uzlu s hodnotou h zaručuje, že strom zůstane platným BVS. časová složitost smazání hodnoty opět odpovídá výšce stromu algoritmus si zkuste napsat sami jako cvičení Jan Hnilica Počítačové modelování 14 15

16 Binární vyhledávací strom (BVS) Setřídění uložených hodnot průchod do hloubky metodou in-order + výpis hodnot (popř. zápis do nějakého pole) void VypisVzestupne(Uzel * K) if (K == NULL) return; VypisVzestupne(K->levy); // vypíšeme všechny menší hodnoty printf( %i,, K->hodnota); // vypíšeme hodnotu uzlu VypisVzestupne(K->pravy); // vypíšeme všechny větší hodnoty výstup: 1, 7, 9, 10, 12, 13, 15, 17, 24, 28, 30, Jan Hnilica Počítačové modelování 14 16

17 Binární vyhledávací strom (BVS) Výška BVS operace s BVS (hledání, přidávání a mazání) mají časovou složitost odpovídající výšce stromu výška stromu ale velmi závisí na pořadí, ve kterém hodnoty do stromu přidáváme a odebíráme (analogie quicksort a výběr pivota) Krajní varianty (pro strom obsahující n uzlů): A) zcela vyvážený strom, výška log 2 n B) zcela degenerovaný strom, výška = n lze ukázat, že pokud do stromu přidáváme a rušíme hodnoty v náhodném pořadí, výška stromu je cca 1.4 log 2 n ( pro velká n je to velmi dobrá časová složitost) Jan Hnilica Počítačové modelování 14 17

18 Vyvažování stromů cílem je zajistit, že operace hledání, přidávání a mazání hodnot budou mít zaručenu logaritmickou časovou složitost O(log n) Definice dokonale vyvážený binární vyhledávací strom (DV BVS) pro každý uzel platí, že počet uzlů v levém a pravém podstromu se liší max. o 1 nejlepší možné vyvážení, ale je obtížné ho udržovat během přidávání a mazání hodnot AVL strom pro každý uzel platí, že výška jeho levého a pravého podstromu se liší max. o 1 slabší forma vyvážení, ale stačí k udržení logaritmické složitosti a je mnohem snáze udržovatelná název podle autorů: Adeľson-Velskij, Landis (1962) AVL strom, který není DV BVS Pozn. Operace s AVL stromy přesahují rámec tohoto kurzu. Zájemce nalezne jejich popis např. v Kombinatorické algoritmy (L. Kučera) Algoritmy a štruktúry údajov (N. Wirth) (orig. Algorithms + data structures = programs) Jan Hnilica Počítačové modelování 14 18

19 Halda (heap) Definice binární strom, který splňuje následující pravidla: 1. všechny hladiny s výjimkou poslední jsou zcela zaplněny 2. všechny prvky v poslední hladině jsou umístěny co nejvíc vlevo 3. pro každý uzel platí: hodnota v něm uložená je menší než hodnoty v jeho synech z definice plyne: 1. nejmenší hodnota je v kořeni 2. výška haldy obsahující n hodnot je cca log 2 n Využití pokud potřebujeme opakovaně a rychle zjišťovat a odebírat minimum z uložených hodnot (a přitom průběžně přidávat další hodnoty) třídění haldou (heapsort) 5 Pozn. Haldu můžeme realizovat i jako maximovou (otec > syn, maximum v kořeni), tzn. pomocí stejných algoritmů lze efektivně pracovat s maximy uložených hodnot Jan Hnilica Počítačové modelování 14 19

20 Haldové operace Zjištění minima minimum je vždy v kořeni konstantní časová složitost O(1) Přidání hodnoty hodnotu přidáme do nového listu, ten musíme vytvořit na poslední hladině co nejvíce vlevo upravíme haldu - novou hodnotu opakovaně prohazujeme s hodnotou v předkovi, dokud je předek větší (s novou hodnotou "proskáčeme" stromem vzhůru) uvědomte si, že tato prohození neporuší uspořádání haldy (proč?) časová složitost odpovídá výšce haldy, tzn. O(log n) Odstranění minima minimum v kořeni nahradíme hodnotou z posledního uzlu, poslední uzel smažeme (poslední uzel je na spodní hladině co nejvíc vpravo) upravíme haldu - s hodnotou vloženou do kořene proskáčeme stromem dolů tzn. pokud je hodnota větší než hodnota některého ze synů, prohodíme je (pokud je větší než oba synové, prohodíme s menším z nich) opět platí, že tato prohození neporuší uspořádání haldy časová složitost opět odpovídá výšce haldy, tzn. O(log n) Jan Hnilica Počítačové modelování 14 20

21 Uložení haldy v poli haldu lze snadno uložit do běžného 1-rozměrného pole jednotlivé uzly indexujeme po vrstvách zleva doprava: uzel s indexem [i] má syny na indexech [2i + 1] a [2i + 2] předka na indexu [i / 2] (pro liché i) [i / 2 + 1] (pro sudé i) Jan Hnilica Počítačové modelování 14 21

22 Haldové operace v poli v ukázkách budeme pracovat s haldou hodnot typu double halda bude uložena v poli o n prvcích mějme na paměti, že při použití pole je nutné vždy testovat, jestli je pro přidání dalšího prvku ještě místo, zrovna tak je potřeba ošetřit, zda neodebíráme minimum z prázdné haldy tyto testy si čtenář doplní sám, v ukázkách nebudou uvedeny z důvodu úspory místa úvodem vytvoříme funkci pro výpočet indexu předka prvku, ležícího v poli na indexu i int IndexPredka(int i) if (i % 2 == 0) return (i / 2-1); else return (i / 2); Jan Hnilica Počítačové modelování 14 22

23 Haldové operace v poli Přidání hodnoty do haldy do haldy přidáváme číslo c, proměnná pocet vyjadřuje aktuální počet hodnot na haldě void PridejHodnotu(double c, double halda[], int * pocet) // hodnotu uložíme na konec haldy (*pocet)++; halda[*pocet] = c; // upravíme haldu double pomocny; int umistovany = *pocet - 1; // index umísťovaneho prvku int predek = IndexPredka(umistovany); // index předka while (umistovany > 0 && halda[umistovany] < halda[predek]) // prohozeni prvků pomocny = halda[umistovany]; halda[umistovany] = halda[predek]; halda[predek] = pomocny; // posun nahoru umistovany = predek; predek = indexpredka(umistovany); Jan Hnilica Počítačové modelování 14 23

24 Haldové operace v poli Odstranění minima z haldy double OdeberMinimum(double halda[], int * pocet) // uložíme si odebirané minimum double min = halda[0]; // snížíme velikost haldy, poslední prvek vložíme do kořene (*pocet)--; halda[0] = halda[*pocet]; // proměnné pro úpravu haldy int umistovany = 0; // index umísťované hodnoty int syn = 2 * umistovany + 1; // index menšího syna double pomocny; pokračování kódu na další straně Jan Hnilica Počítačové modelování 14 24

25 Haldové operace v poli odstranění minima - pokračování kódu z předchozí strany // úprava haldy = proskákání stromem dolů while (syn < *pocet) if (syn + 1 < *pocet) // test druhého syna if (halda[syn + 1] < halda[syn]) syn++; if (halda[umistovany] > halda[syn]) // prohodit pomocny = halda[umistovany]; halda[umistovany] = halda[syn]; halda[syn] = pomocny; // posunout dolů umistovany = syn; syn = 2 * umistovany + 1; else break; // funkce vrací minimum, odebrané v úvodu z kořene return min; Jan Hnilica Počítačové modelování 14 25

26 Třídění haldou - heapsort Cíl: setřídit údaje uložené v poli při použití haldových operací Postup: z hodnot v poli vytvoříme haldu na počátku halda tvořena jediným prvkem (prvním prvkem vlevo) (n-1) krát přidáme prvek do haldy, přidáváme vždy první prvek zprava halda se postupně tvoří v levé části pole n-krát odebereme minimum z haldy minima odebíráme z kořene (prvek na nultém indexu) halda se postupně zmenšuje, minima ukládáme doprava, na místa uvolněná po haldě časová složitost: (n-1)-krát přidání a n-krát odebrání prvku, celkově O(n log n) paměťová složitost: třídíme přímo v poli, O(n) pozn. po provedení tohoto algoritmu jsou čísla v poli uspořádána sestupně (minima byla ukládána zprava) - jaké jsou možnosti, když chceme vzestupné uspořádání? Jan Hnilica Počítačové modelování 14 26

27 Obecný strom počet synů není omezen pro uložení pointerů na syny se nabízí několik variant: 1) Pole pointerů na syny použitelné, pokud předem známe maximální možný počet synů (označme ho S) typedef struct uzel int hodnota; struct uzel * synove[s]; Uzel; každý uzel alokuje paměť pro uložení S pointerů, z nichž bude u většiny uzlů využita jen část pro velké S paměťově neúnosné funkce pro průchod stromem do hloubky void Pruchod(Uzel * K) Zpracuj(K); for (int i = 0; i < S; i++) if (K->synove[i]!= NULL) Pruchod(K->synove[i]); Jan Hnilica Počítačové modelování 14 27

28 Obecný strom 2) Lineární seznam pointerů na syny ve stromové struktuře jsou propojeny dva typy uzlů: NULL uzel stromu uzel seznamu synů // 1. uzel stromu typedef struct uzel int hodnota; // uložená informace struct seznam * synove; // pointer na počátek seznamu synů Uzel; // 2. uzel seznamu synů typedef struct seznam Uzel * syn; // pointer na synovský uzel stromu struct seznam * dalsi; // pointer na bratra v seznamu Seznam; Jan Hnilica Počítačové modelování 14 28

29 Obecný strom 2) Lineární seznam pointerů na syny průchod stromem do hloubky (K je pointer na kořen stromu) void Pruchod(Uzel * K) if (K == NULL) return; Zpracuj(K); Seznam * S = K->synove; while (S!= NULL) Pruchod(S->syn); S = S->dalsi; Jan Hnilica Počítačové modelování 14 29

30 Obecný strom 3) Kanonická reprezentace binárním stromem uzel obsahuje dva pointery (oba typu Uzel*) 1. na prvního syna 2. na mladšího bratra listy mají pointer syn nastavený na NULL synové jednoho uzlu jsou propojeni přes pointery bratr informace syn bratr typedef struct uzel int hodnota; struct uzel *syn, *bratr; Uzel; 1 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL Jan Hnilica Počítačové modelování 14 30

31 Písmenkový strom (trie) struktura umožňující úsporné uložení slovníku (množiny řetězců) a rychlé vyhledávání slov příklad: k e m o s t o y r p u a uložená slova: n y sto strom stromek stromy strop struna struny uzly uhraničené tečkovanou čarou signalizují konec slova operace vyhledání, přidání a smazání slova složitost daná délkou slova (nikoliv délkou slovníku) Jan Hnilica Počítačové modelování 14 31

32 Písmenkový strom (trie) Způsob uložení pointerů na syny uzlu velmi závisí na možném počtu znaků, kterými slovo může pokračovat tuto množinu znaků označujeme jako abecedu, značíme Σ počet znaků označujeme jako tzv. velikost abecedy, značíme Σ Malé abecedy pole pointerů (indexované např. ASCII kódy znaků) výhodou je okamžitý přístup k pointeru na další znak slova O(1) struct uzel int konecslova; // 0 nebo 1 struct uzel * synove[26]; // např. pro abecedu a z (ascii ) ; Rozsáhlé abecedy lineární seznam pointerů výhoda: nebudou alokovány nevyužité pointery nevýhoda: prodlouží se hledání dalšího znaku O( Σ ) binární vyhledávací strom pointerů rychlejší vyhledávání dalšího znaku O(log Σ ) Jan Hnilica Počítačové modelování 14 32

Lineární spojový seznam (úvod do dynamických datových struktur)

Lineární spojový seznam (úvod do dynamických datových struktur) Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky

Více

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

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 Stromy úvod 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 Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

Dynamické datové struktury IV.

Dynamické datové struktury IV. Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra

Více

Prioritní fronta, halda

Prioritní fronta, halda Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje

Více

Dynamické datové struktury III.

Dynamické datové struktury III. Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované

Více

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

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)

Více

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

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 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 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí

Více

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

Základní datové struktury III: Stromy, haldy Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní

Více

Stromy, haldy, prioritní fronty

Stromy, haldy, prioritní fronty 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

Více

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í

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í Stromy 2 AVL AVL stromy jména tvůrců stromů: dva Rusové Adelson-Velskii, Landis vyvážené binární 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

Více

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

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3 DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),

Více

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.

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. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

TGH07 - Chytré stromové datové struktury

TGH07 - Chytré stromové datové struktury TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 1. dubna 2014 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním

Více

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

Vyvažování a rotace v BVS, všude se předpokládá AVL strom Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce

Více

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

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 binární vyhledávání a bst Karel Horák, Petr Ryšavý 23. března 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Naimplementujte binární vyhledávání. Upravte metodu BinarySearch::binarySearch. 1 Příklad 2 Mysĺım

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu

Více

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

Binární vyhledávací stromy pokročilé partie Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald

Více

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

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.

Více

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

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

TGH07 - Chytré stromové datové struktury

TGH07 - Chytré stromové datové struktury TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 5. dubna 2017 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním

Více

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

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce) 13. Metody vyhledávání. Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce). Asociativní vyhledávání (sekvenční, binárním půlením, interpolační, binární vyhledávací

Více

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom 8 Podklady ředmětu ro akademický rok 2013/2014 Radim Farana Obsah 2 Dynamické datové struktury. Strom. Binární stromy. Vyhledávací stromy. Vyvážené stromy. AVL stromy. Strom 3 Název z analogie se stromy.

Více

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

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS

Více

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

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39 Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Více

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

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy Volné stromy Úvod do programování Souvislý, acyklický, neorientovaný graf nazýváme volným stromem (free tree). Často vynecháváme adjektivum volný, a říkáme jen, že daný graf je strom. Michal Krátký 1,Jiří

Více

Pointery II. Jan Hnilica Počítačové modelování 17

Pointery II. Jan Hnilica Počítačové modelování 17 Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky

Více

Radek Mařík

Radek Mařík 2012-03-20 Radek Mařík 1. Pravá rotace v uzlu U a) v podstromu s kořenem U přemístí pravého syna U.R uzlu U do kořene. Přitom se uzel U stane levým synem uzlu U.R a levý podstrom uzlu U.R se stane pravým

Více

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

NPRG030 Programování I, 2018/19 1 / :03:07 NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování

Více

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

Algoritmy na ohodnoceném grafu

Algoritmy na ohodnoceném grafu Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus

Více

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í

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í Select sort: krok 1: výběr klíče z n prvků vyžaduje 1 porovnání krok 2: výběr klíče z 1 prvků vyžaduje 2 porovnání krok 3: výběr klíče z 2 prvků vyžaduje 3 porovnání atd. celkem porovnání Zlepšení = použít

Více

Binární vyhledávací stromy

Binární vyhledávací stromy Binární vyhledávací stromy Definice: Binární vyhledávací strom (po domácku BVS) je buďto prázdná množina nebo kořen obsahující jednu hodnotu a mající dva podstromy (levý a pravý), což jsou opět BVS, ovšem

Více

ADT STROM Lukáš Foldýna

ADT STROM Lukáš Foldýna ADT STROM Lukáš Foldýna 26. 05. 2006 Stromy mají široké uplatnění jako datové struktury pro různé algoritmy. Jsou to matematické abstrakce množin, kterou v běžném životě používáme velice často. Příkladem

Více

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

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí: Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.

Více

a) b) c) Radek Mařík

a) b) c) Radek Mařík 2012-03-20 Radek Mařík 1. Čísla ze zadané posloupnosti postupně vkládejte do prázdného binárního vyhledávacího stromu (BVS), který nevyvažujte. Jak bude vypadat takto vytvořený BVS? Poté postupně odstraňte

Více

Algoritmy výpočetní geometrie

Algoritmy výpočetní geometrie Algoritmy výpočetní geometrie prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)

Více

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

Spojová implementace lineárních datových struktur Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB

Více

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

3 Algoritmy řazení. prvku a 1 je rovněž seřazená. Specifikace problému řazení (třídění): A... neprázdná množina prvků Posl(A)... množina všech posloupností prvků z A ... prvky množiny Posl(A) q... délka posloupnosti Posl(A), přičemž Delka()

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

Dynamické datové struktury I.

Dynamické datové struktury I. Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

Dynamické datové struktury II.

Dynamické datové struktury II. Dynamické datové struktury II. Stromy. Binární vyhledávací strom. DFS. BFS. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

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

Pole a kolekce. v C#, Javě a C++ Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java

Více

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

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod

Více

Maturitní téma: Programovací jazyk JAVA

Maturitní téma: Programovací jazyk JAVA Maturitní téma: Programovací jazyk JAVA Insert Sort (třídění vkládáním) 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek

Více

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

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu

Více

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 333LP - lgoritmy a programování - Zkouška z předmětu 333LP Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8]

Více

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

Algoritmy II. Otázky k průběžnému testu znalostí Algoritmy II Otázky k průběžnému testu znalostí Revize ze dne 19. února 2018 2 Lineární datové struktury 1 1. Vysvětlete co znamená, že zásobník představuje paměť typu LIFO. 2. Co je to vrchol zásobníku?

Více

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 Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8] count=0 for i in range(1,len(data)):

Více

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

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 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

Více

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

Prioritní fronta, halda (heap), řazení Prioritní fronta, halda (heap), řazení Co je prioritní fronta? Definována operacemi - vlož prvek - vyber největší (nejmenší) prvek Proč pf? Rozhraní: class PF { // ADT rozhrani PF(); boolean jeprazdna();

Více

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

Programování v C++ 1, 16. cvičení Programování v C++ 1, 16. cvičení binární vyhledávací strom 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené

Více

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) { Vyhledání extrému v poli použito v algoritmech řazení hledání maxima int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) // nikoli 0 if (Pole[i] > max) max = pole[i];

Více

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

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A Každá úloha je hodnocena maximálně 25 body. Všechny své odpovědi zdůvodněte! 1. Postavte na stůl do řady vedle

Více

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

Datový typ prioritní fronta Semestrální práce z předmětu 36PT Datový typ prioritní fronta Semestrální práce z předmětu 36PT Martin Tůma Cvičení 113, Út 18:00 22. května 2004 Specifikace problému Často potřebujeme přístup k informacím, tak aby tyto byly seřazeny podle

Více

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.

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 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste

Více

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

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start

Více

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

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 Pokročilé haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (I-EFA) ZS 2010/11,

Více

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

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 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ě

Více

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

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

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

Dynamické programování. Optimální binární vyhledávací strom The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamické programování Optimální binární vyhledávací strom Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The

Více

vyhledávací stromové struktury

vyhledávací stromové struktury vyhledávací algoritmy Brute Force Binary Search Interpolation Search indexové soubory Dense index, Sparse index transformační funkce Perfect Hash, Close Hash Table, Open Hash Table vyhledávací stromové

Více

Datové struktury Úvod

Datové struktury Úvod Datové struktury Úvod Navrhněte co nejjednodušší datovou strukturu, která podporuje následující operace: 1. Insert a Delete v O(n), Search v O(log n); Datové struktury Úvod Navrhněte co nejjednodušší datovou

Více

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

Spojové struktury. Spojová struktura (linked structure): Spojová struktura (linked structure): Spojové struktury množina objektů propojených pomocí spojů (odkazů, referencí, ukazatelů) Spoj často vyjadřuje vztah předchůdce následník Lineární spojové struktury

Více

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

Stromy. Jan Kybic.

Stromy. Jan Kybic. Stromy Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 44 Stromy Binární vyhledávací stromy Množiny a mapy 2 / 44 Strom (Tree) Strom skládá se s uzlů (nodes) spojených hranami (edges).

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly. Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?

Více

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

Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Red Black strom je binární strom s jedním dvouhodnotovým příznakem

Více

Semestrální práce 2 znakový strom

Semestrální práce 2 znakový strom Semestrální práce 2 znakový strom Ondřej Petržilka Datový model BlockFileRecord Bázová abstraktní třída pro záznam ukládaný do blokového souboru RhymeRecord Konkrétní třída záznamu ukládaného do blokového

Více

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132 Ak. rok 2015/2016 vbp 1. ze 132 Ing. Vladimír Beneš, Ph.D. vedoucí katedry Petrovický K101 katedra informatiky a kvantitativních metod E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační

Více

Základy algoritmizace a programování

Základy algoritmizace a programování Základy algoritmizace a programování Složitost algoritmů. Třídění Přednáška 8 16. listopadu 2009 Který algoritmus je "lepší"? Různé algoritmy, které řeší stejnou úlohu zbytek = p % i; zbytek = p - p/i*i;

Více

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní graf má stromovou šířku nejvýše k, a je-li tomu tak, také vrátí příslušný stromový rozklad. Poznamenejme, že je-li k součástí vstupu,

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

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

Reprezentace dat v informačních systémech. Jaroslav Šmarda Reprezentace dat v informačních systémech Jaroslav Šmarda Reprezentace dat v informačních systémech Reprezentace dat v počítači Datové typy Proměnná Uživatelské datové typy Datové struktury: pole, zásobník,

Více

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

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

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

Složitosti základních operací B + stromu Složitosti základních operací B + stromu Radim Bača VŠB Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky ŠKOMAM 2010-1- 28/1/2010 Složitosti základních operací B +

Více

IB111 Úvod do programování skrze Python

IB111 Úvod do programování skrze Python Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově

Více

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

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

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

Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n) 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

Více

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Osmé počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 20.11.2017,

Více

R zné algoritmy mají r znou složitost

R zné algoritmy mají r znou složitost / / zné algoritmy mají r znou složitost Dynamické programování / / Definice funkce Otázka Program f(x,y) = (x = ) (y = ) f(x, y-) + f(x-,y) (x > ) && (y > ) f(,) =? int f(int x, int y) { if ( (x == ) (y

Více

Rekurze. Jan Hnilica Počítačové modelování 12

Rekurze. Jan Hnilica Počítačové modelování 12 Rekurze Jan Hnilica Počítačové modelování 12 1 Rekurzivní charakter úlohy Výpočet faktoriálu faktoriál : n! = n (n - 1) (n - 2)... 2 1 (0! je definován jako 1) můžeme si všimnout, že výpočet n! obsahuje

Více

Předmět: Algoritmizace praktické aplikace

Předmět: Algoritmizace praktické aplikace Předmět: Algoritmizace praktické aplikace Vytvořil: Roman Vostrý Zadání: Vytvoření funkcí na stromech (reprezentace stromu haldou). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4. Hloubka 5.

Více

Základy algoritmizace. Hašování

Základy algoritmizace. Hašování Základy algoritmizace Hašování Problematika hašování Hašování - nástroj na jednoduchý způsob "zakódování vstupních dat. Vstupní data jsou zpracována hašovací funkcí jsou jistým způsobem komprimována. Relativně

Více

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

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání. Vyhledávací stromy Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání. Vytvářejí se vždy nad již existující datovou strukturou (zpravidla tabulkou). Vyhledávací stromy můžeme rozdělit

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016 ZPRO cvičení 8 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 7, 2016 Outline I 1 Outline 2 Dynamické alokování paměti 3 Dynamická alokace

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

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

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet. 4 Stromy a les Jedním ze základních, a patrně nejjednodušším, typem grafů jsou takzvané stromy. Jedná se o souvislé grafy bez kružnic. Přes svou (zdánlivou) jednoduchost mají stromy bohatou strukturu a

Více

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

prioritu a vždy je třeba začít pracovat na úkolu, který ma v daný okamžik 1. Binární halda Uvažme následující problém ze života: jsme velmi vytíženým manažerem, kterému se plánovací diář stále plní obrovským množstvím úkolů. Každý úkol má předepsanou prioritu a vždy je třeba

Více

Implementace binárního stromu směrníky

Implementace binárního stromu směrníky Téma: Vypracoval: Zdeněk Alčer Implementace binárního stromu směrníky 1. Teorie stromu: Pojem strom je datová struktura, která je v teorii grafů formálně definována jako zvláštní případ grafu bez cyklů.

Více