Stromy. Jan Hnilica Počítačové modelování 14
|
|
- Jarmila Pokorná
- před 5 lety
- Počet zobrazení:
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) 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íceStromy. 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íceDynamické 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ícePrioritní 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íceDynamické 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íceReprezentace 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íceProgramová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íceZá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íceStromy, 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íceAVL 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íceDobSort. Ú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íceIntervalové 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íceZá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ícebfs, 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ícebfs, 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íceDynamicky 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íceTGH07 - 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íceVyvaž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ícebin 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íceAlgoritmy 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íceBiná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íceBiná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íce5 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íceTGH07 - 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íceAdresní 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íceAplikovaná 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íceNá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íceRekurzivní 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íceZá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íceVolné 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ícePointery 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íceRadek 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íceNPRG030 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íceTest 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íceAlgoritmy 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íceSelect 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íceBiná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íceADT 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ícepř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ícea) 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íceAlgoritmy 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íceSpojová 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íce3 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íceVyhledá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íceDynamické 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íceDynamické 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ícePole 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íceCí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íceMaturitní 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íceAlgoritmizace 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íceB3B33ALP - 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íceAlgoritmy 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íceB3B33ALP - 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íce2 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ícePrioritní 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íceProgramová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íceIAJCE 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íceInformatika 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íceDatový 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íceZdů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íceStromy. 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ícePokroč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íceAmortizovaná 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íceProgramová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íceGrafové 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íceGrafové 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íceDynamické 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ícevyhledá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íceDatové 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íceSpojové 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íceALGORITMIZACE 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íceStromy. 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íceVyhledá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íceDatové 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íceVý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íceRed 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íceSemestrá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íceAlgoritmizace 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íceZá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íceUkáž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ů 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íceReprezentace 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íce1. 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íceSlož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íceIB111 Ú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íceProhledá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íceBiná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íceZá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íceZá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íceR 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íceRekurze. 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ícePř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íceZá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íceVyhledá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íceMartin 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íceAlgoritmizace 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ícePokroč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íce4 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íceprioritu 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íceImplementace 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