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

Podobné dokumenty
Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

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

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

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

GRAFY A GRAFOVÉ ALGORITMY

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

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Matice se v některých publikacích uvádějí v hranatých závorkách, v jiných v kulatých závorkách. My se budeme držet zápisu s kulatými závorkami.

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.

3. Středoškolská stereometrie v anaglyfech

Skalární součin je nástroj, jak měřit velikost vektorů a úhly mezi vektory v reálných a komplexních vektorových prostorech.

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ , 5.1 a 5.2 8/14

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Skalár- veličina určená jedním číselným údajem čas, hmotnost (porovnej životní úroveň, hospodaření firmy, naše poloha podle GPS )

Paměti a jejich organizace

Algoritmizace prostorových úloh

Stromy, haldy, prioritní fronty

Základy algoritmizace. Miroslav Virius

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů

8. Posloupnosti, vektory a matice

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

2 Spojité modely rozhodování

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

Algoritmizace prostorových úloh

13. Třídící algoritmy a násobení matic

Algoritmy a datové struktury

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

Rámcový manuál pro práci s programem TopoL pro Windows

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

Jak pracovat s absolutními hodnotami

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

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

Binární vyhledávací stromy II

Finanční. matematika pro každého. f inance. 8. rozšířené vydání. věcné a matematické vysvětlení základních finančních pojmů

Matematika pro studenty ekonomie

Lenka Zalabová. Ústav matematiky a biomatematiky, Přírodovědecká fakulta, Jihočeská univerzita. zima 2012

Dynamické datové struktury I.

Dynamické datové struktury IV.

Dynamické datové struktury III.

Maturitní téma: Programovací jazyk JAVA

Kapitola 1. Tenzorový součin matic

Registrační číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B

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

Ten objekt (veličina), který se může svobodně měnit se nazývá nezávislý.

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Tabulkové processory MS Excel (OpenOffice Calc)

Úvod do programování - Java. Cvičení č.4

Základy algoritmizace

Rekurzivní algoritmy

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Jazyk matematiky Matematická logika Množinové operace Zobrazení Rozšířená číslená osa

Euklidovský prostor Stručnější verze

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

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

Soustavy lineárních rovnic

12. Aproximační algoritmy

POČÍTAČOVÁ GRAFIKA VEKTOROVÁ GRAFIKA POKROČILÉ ČINNOSTI

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.

3. Matice a determinanty

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

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

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

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

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

TVORBA VÝROBNÍ DOKUMENTACE CV

8 A (strana 1) Soubory a složky, procházení, orientace

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

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

(Cramerovo pravidlo, determinanty, inverzní matice)

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto

2.2. SČÍTÁNÍ A NÁSOBENÍ MATIC

Západočeská univerzita v Plzni. Fakulta aplikovaných věd Katedra matematiky. Geometrie pro FST 1. Pomocný učební text

2. RBF neuronové sítě

0. Lineární rekurence Martin Mareš,

4. Lineární nerovnice a jejich soustavy

1 Úvod do kompilátorů

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

Uživatelem definované požadavky a parametry systému

ADT STROM Lukáš Foldýna

Informatika Algoritmy

A0M15EZS Elektrické zdroje a soustavy ZS 2011/2012 cvičení 1. Jednotková matice na hlavní diagonále jsou jedničky, všude jinde nuly

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Office podrobný průvodce. Tomáš Šimek

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

DUM 05 téma: Úvod do VBA for application

Y36BEZ Bezpečnost přenosu a zpracování dat. Úvod. Róbert Lórencz. lorencz@fel.cvut.cz

Břetislav Fajmon, UMAT FEKT, VUT Brno. Poznámka 1.1. A) první část hodiny (cca 50 minut): představení všech tří metod při řešení jednoho příkladu.

Transkript:

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í hodiny: středa 15:45 17:45 Ak. rok 2015/2016 vbp 2. ze 132

Hodinová dotace Prezenční studium 1 semestr 1/2 KZ 6 kreditů Kombinované studium 1 semestr 12/4 KZ 6 kreditů Ak. rok 2015/2016 vbp 3. ze 132

Požadavky ke klasifikovanému zápočtu Prezenční studium Kombinované studium Kompletní vypracování dané úlohy (přihlášení v ISu) Analýza úlohy Algoritmizace (Odladěný zdrojový kód programu v jazyce C++) Ak. rok 2015/2016 vbp 4. ze 132

Studijní literatura Literatura základní HEROUT, Pavel. Učebnice jazyka C. České Budějovice : Kopp, 1997. ISBN 80-85828-21-9. BENEŠ, Vladimír. Programování I. Elektronická studijní opora. Praha : BIVŠ, 2011. PRATA, Stephen. Mistrovství v C++. Brno : Computer Press, 2004. ISBN 80-251-0098-7. Literatura doporučená KADLEC, Václav. Učíme se programovat v jazyce C. Praha : Computer Press, 2002. ISBN 80-7226-715-9. MILKOVÁ, E. a kol. Algoritmy, základní konstrukce v příkladech a jejich vizualizace. Hradec Králové : Gaudeamus, 2010. KNUTH, Donald, E. Umění programování.1. díl, Základní algoritmy. Brno : Computer Press, 2008,. ISBN 978-80-251-2025-5. Ak. rok 2015/2016 vbp 5. ze 132

Obsah Algoritmus Datové struktury Odvozené datové struktury Třídění Ak. rok 2015/2016 vbp 6. ze 132

ALGORITMUS Ak. rok 2015/2016 vbp 7. ze 132

Algoritmus Algoritmus je základní matematický pojem. Nelze jej tedy definovat. Musíme se tedy uchýlit pouze k opisu. V případě PROGRAMOVÁNÍ jde o transformaci množiny vstupních dat na množinu výstupních dat. Ak. rok 2015/2016 vbp 8. ze 132

Algoritmus Opisná DEFINICE Je to postup, jak řešit danou úlohu pomocí počítače. Sestává z posloupnosti jednoduchých předem stanovených kroků (ekementárních operací, instrukcí) a vede od vstupních měnitelných údajů až k žádaným výstupním údajům (výsledku). Ak. rok 2015/2016 vbp 9. ze 132

Vlastnosti algoritmu Je ELEMENTÁRNÍ Skládá se z konečného počtu jednoduchých (snadno realizovatelných) činností, které označujeme jako kroky. Ak. rok 2015/2016 vbp 10. ze 132

Vlastnosti algoritmu Je DETERMINOVANÝ Po každém kroku lze určit, zda popisovaný proces skončil. Pokud neskončil, pak musí být dáno, kterým krokem má pokračovat. Ak. rok 2015/2016 vbp 11. ze 132

Vlastnosti algoritmu Je KONEČNÝ Počet opakování jednotlivých kroků je vždy konečný. Algoritmus tedy musí skončit po konečném počtu kroků. Poznámka: příklad s instrukcí 1 GOTO 1 Ak. rok 2015/2016 vbp 12. ze 132

Vlastnosti algoritmu Je REZULTATIVNÍ Vede ke správnému výsledku. Ak. rok 2015/2016 vbp 13. ze 132

Vlastnosti algoritmu Je HROMADNÝ Algoritmus můžeme použít k řešení celé (velké) skupiny (třídy) podobných úloh. Poznámka: např. řešení kvadratické rovnice, soustavy lineárních algebraických rovnic Ak. rok 2015/2016 vbp 14. ze 132

Poznámka 1. Pojem algoritmus se dá formalizovat např. pomocí matematické konstrukce označované jako Turingův stroj procesorová jednotka, tvořená konečným automatem, program ve tvaru pravidel přechodové funkce, pravostranně nekonečné páska pro zápis mezivýsledků. Churchova teze Ke každému algoritmu existuje ekvivalentní Thuringův stroj. Ak. rok 2015/2016 vbp 15. ze 132

Poznámka 1. Konečný automat = velice jednoduchý počítač, který může být v jednom z několika stavů, mezi kterými přechází na základě symbolů, které čte ze vstupu Ak. rok 2015/2016 vbp 16. ze 132

Poznámka 2. Pojem algoritmus se dá formalizovat také např. pomocí teorie parciálně rekurzivních funkcí v teorii vyčíslitelnosti se takto označují funkce v jistém smyslu složitější než tzv. primitivně rekurzivní funkce Ak. rok 2015/2016 vbp 17. ze 132

Metoda SHORA DOLŮ a ZDOLA NAHORU 1. Daný problém musíme vyřešit. 2. Známe-li řešení, potřebujeme jej zapsat jako algoritmus 3. Postup řešení rozkládáme na jednodušší operace elementární kroky tj. metoda SHORA DOLŮ Poznámka: řešení kvadratické rovnice (analýza a řešení) Ak. rok 2015/2016 vbp 18. ze 132

Metoda SHORA DOLŮ a ZDOLA NAHORU Kromě metody SHORA DOLŮ se setkáváme i s metodou ZDOLA NAHORU: Postupně z elementárních kroků vytváříme prostředky, které umožní zvládnout daný problém Vytváříme nový procesor tím, že ho učíme nové operace Použijeme vyšší programovací jazyk (procedury, knihovna procedur nebo systém pro vytváření programů (CASE)) Ak. rok 2015/2016 vbp 19. ze 132

Základní složky (konstrukce) algoritmu Posloupnost (sekvence) tvořena jedním nebo několika kroky (provedou se právě jednou v daném pořadí) nemusí jít o kroky elementární dalším zjemňováním se mohou rozpadnout na součásti, které samy tvoří posloupnosti, cykly nebo podmínky Ak. rok 2015/2016 vbp 20. ze 132

Základní složky (konstrukce) algoritmu Cyklus (iterace) část algoritmu, která se opakuje dokud je splněna podmínka opakování cyklus se vždy skládá z podmínky opakování a z těla cyklu (tj. operací, které se opakují) vyhodnocení podmínky může být před provedením (v C while nebo for), resp. po skončení těla cyklu (v C do-while) nebo i uvnitř těla cyklu (podmíněný skok nebo kombinace podmínky a break) Ak. rok 2015/2016 vbp 21. ze 132

Základní složky (konstrukce) algoritmu Podmíněná operace (selekce) představuje vždy větvení algoritmu tvořena podmínkou a 1, 2 nebo více výběrovými složkami pokud je jedna ze složek vybrána, provede se jednou v C příkazy if a switch (v kombinaci s příkazem break) Ak. rok 2015/2016 vbp 22. ze 132

Základní složky (konstrukce) algoritmu Podprogram opakuje-li se určitá část algoritmu na několika místech (může používat různá data) na elementární kroky ji rozložíme pouze jednou (např. narazíme-li na ni poprvé) na ostatních místech se na ni odvoláme jako na dílčí algoritmus nebo podprogram (procedura, resp. funkce) Ak. rok 2015/2016 vbp 23. ze 132

Algoritmus a data struktura vstupních, výstupních, ale i vnitřních dat spoluurčuje strukturu programu posloupnosti datových položek různých druhů odpovídá posloupnost různých příkazů Poznámka: Přirozeným prostředkem pro zpracování rekurzivních datových struktur (stromy nebo seznamy) jsou obvykle rekurzivní algoritmy! Ak. rok 2015/2016 vbp 24. ze 132

Časová a paměťová náročnost algoritmů potřebné množství operační paměti doba pro provedení algoritmu rozsah vstupních údajů celkový počet elementárních operací (instrukcí) Poznámka: Ve skutečnosti zpravidla stačí orientovat se podle vybraných skupin instrukcí, které jsou časově nejnáročnější (if)! Ak. rok 2015/2016 vbp 25. ze 132

Popis algoritmů Jazyk pro popis programů Program Description Language (PDL) slovní popis algoritmu, dnes velmi častý lehce upravený programovací jazyk, např. Pascal (Pseudopascal) Poznámka: Tradičním jazykem pro popis algoritmů býval Algol 60. Slovní popis programu se může stát základem dobrého komentáře k výslednému programu. Ak. rok 2015/2016 vbp 26. ze 132

Popis algoritmů Strukturogramy grafické znázornění algoritmu tvarově i barevně odlišné znázornění (sekvence, iterace, selekce) Poznámka: Základem obdélník; v záhlaví označení algoritmu nebo dílčí operace; uvnitř kroky, které algoritmus tvoří Ak. rok 2015/2016 vbp 27. ze 132

Popis algoritmů Vývojové diagramy klasický prostředek (ČSN 36 4030, ÚNM, Praha 1974) graficky náročné (úpravy hotových VD) Poznámka: Spíše než logickou strukturu programu zdůrazňují druh operací. Ak. rok 2015/2016 vbp 28. ze 132

Vývojové diagramy mezní značka (začátek, resp. konec algoritmu) sekvence předem definovaná činnost (podprogram) selekce (rozhodování) Ak. rok 2015/2016 vbp 29. ze 132

Vývojové diagramy iterace (začátek, resp. konec iteračního cyklu) vstup, resp. výstup dat spojka komentář (poznámka) Ak. rok 2015/2016 vbp 30. ze 132

Vývojové diagramy obrazce (značky) propojeny čarami (svisle, vodorovně) implicitní směr shora dolů, zleva doprava, jinak šipky Ak. rok 2015/2016 vbp 31. ze 132

PŘÍKLAD Výpočet kořenů (reálných i komplexních) kvadratické rovnice ax 2 + bx + c = 0, kde a 0 Vstupní data: a, b, c Výstupní data: x 1, x 2 Ak. rok 2015/2016 vbp 32. ze 132

PŘÍKLAD Výpočet kořenů (reálných i komplexních) kvadratické rovnice ax 2 + bx + c = 0, kde a 0 Vstupní data: a, b, c Výstupní data: x 1, x 2 Ak. rok 2015/2016 vbp 33. ze 132

PŘÍKLAD Analýza úlohy Zápis algoritmu (VD) Zdrojový kód v jazyce C++ Odladění programu (testování) Ak. rok 2015/2016 vbp 34. ze 132

DATOVÉ STRUKTURY Ak. rok 2015/2016 vbp 35. ze 132

Datové struktury Základními kameny, součástí výkladu o algoritmech Souvisejí s algoritmy, které se používají pro práci s nimi Datové struktury rozdělujeme na: základní datové struktury odvozené datové struktury Ak. rok 2015/2016 vbp 36. ze 132

Základní datové struktury Algoritmizace I PROMĚNNÁ pojmenované místo v paměti počítače vytváří se na základě deklarace jméno (identifikátor) datový typ Specifikací datového typu určujeme množinu hodnot, které budeme moci do proměnné ukládat množinu operací, které budeme moci s proměnnou provádět velikost proměnné (množství paměti) Ak. rok 2015/2016 vbp 37. ze 132

Základní datové struktury DRUHY PROMĚNNÝCH globální proměnné vytvoří se při spuštění programu existují po celou dobu běhu programu v C jde o proměnné deklarované mimo těla funkcí lokální proměnné deklarované v těle podprogramů (funkcí) vznikají při volání PP, zanikají při ukončení PP dynamické proměnné vznikají a zanikají za běhu programu (na základě příkazů) jejich existence není vázána na podprogramy nebo bloky Ak. rok 2015/2016 vbp 38. ze 132

Základní datové struktury POLE homogenní datová struktura posloupnost proměnných stejného datového typu (složky) v paměti jsou uložené v nepřetržité řadě (chápány jako celek) v deklaraci určujeme: jméno (identifikátor) pole datový typ složek délku pole (počet složek) se složkami pracujeme pomocí indexů (mapovací funkce) Ak. rok 2015/2016 vbp 39. ze 132

Základní datové struktury POLE jednorozměrná pole (vektory) vícerozměrná pole pole s n indexy označujeme jako n-rozměrná konkrétně dvojrozměrné pole (matice) třírozměrné pole (kubická matice) mapovací funkce podstatně složitější než u jednorozměrného pole záleží i na uložení vícerozměrných polí v program. jazycích Ak. rok 2015/2016 vbp 40. ze 132

Základní datové struktury VÍCEROZMĚRNÉ POLE grafické znázornění dvourozměrného pole PV PV 1 a 11 a 12... a 1n Přístupový vektor PV PV 2 PV 3 a 21 a 22... a 31 a 32... a 2n a 3n PV m-1 a m-11 a m-12... a m-1n PV m a m1 a m2... a mn Řádky pole A Ak. rok 2015/2016 vbp 41. ze 132

Základní datové struktury Algoritmizace I VÍCEROZMĚRNÉ POLE Na počítačích, kde je velikost ukazatele rovna 1 (tj. ukazatel zabírá právě jednu adresovatelnou jednotku paměti), znamená použití PV zrychlení výpočtu (odpadá většina násobení). Na počítačích, kde je velikost ukazatele větší než 1, je použití PV stejně náročné jako výpočet mapovací funkce. Ak. rok 2015/2016 vbp 42. ze 132

Základní datové struktury ZÁZNAM (STRUKTURA) skupina proměnných chápaná jako jeden celek jde o strukturu nehomogenní (složky jsou různých datových typů) práce s jednotlivými složkami = kvalifikace spolu se jménem proměnné typu záznam uvedeme také jméno složky (relativní adresa vzhledem k počátku proměnné typu záznam) složky jsou uloženy v paměti v pořadí uvedeném v deklaraci velikost záznamu může být větší než součet velikostí jednotlivých složek (překladač může vložit prázdná místa pro přehlednost ) Ak. rok 2015/2016 vbp 43. ze 132

Základní datové struktury VARIANTNÍ ZÁZNAM (v C je to UNIE) představuje skupinu proměnných přeložených přes sebe všechny složky začínají na stejné adrese velikost variantní části je rovna velikosti největší složky přístup ke složkám variantního záznamu je totožný s přístupem ke složkám běžného záznamu Ak. rok 2015/2016 vbp 44. ze 132

Základní datové struktury OBJEKT definice objektového typu specifikuje: atributy (složky datového typu) metody (funkční a procedurální složky) Poznámka: instance (proměnná objektového typu) obsahuje pouze atributy (atributy instancí) atributy třídy jsou (vlastně) globální proměnné (ukládají se nezávisle na instancích třídy) Ak. rok 2015/2016 vbp 45. ze 132

Základní datové struktury OBJEKT Poznámka: pro ukládání atributů instancí platí stejná pravidla jako pro ukládání složek záznamů skryté atributy překladač může (pro zajištění správné funkce objektů) přidat do třídy skryté atributy pro uživatele nejsou tyto atributy přístupné! Ak. rok 2015/2016 vbp 46. ze 132

Odvozené (abstraktní) datové struktury SEZNAM (list) struktura představující posloupnost složek složky jsou uspořádány podle určitého klíče dle hodnoty dat uložených ve složkách dle hodnoty funkce vypočítané na základě těchto dat dle pořadí v jakém byly složky do seznamu přidávány Ak. rok 2015/2016 vbp 47. ze 132

Odvozené (abstraktní) datové struktury SEZNAM (list) seznam je uspořádaná datová struktura složky ale nemusí být uloženy dle daného pořadí na následující (předchozí) prvek ukazuje ukazatel (pointer, link, spojka) první prvek seznamu = hlava seznamu (head) zbytek seznamu po odtržení hlavy = ohon (tail) seznam může být také prázdný Ak. rok 2015/2016 vbp 48. ze 132

Odvozené (abstraktní) datové struktury SEZNAM (list) seznam je dynamická datová struktura v programu deklarujeme pouze ukazatel na hlavu seznamu jednotlivé složky (prvky) seznamu dynamicky alokujeme rušíme seznam je rekurzivní datovou strukturou každá složka (prvek) seznamu obsahuje odkaz na položku stejného typu Ak. rok 2015/2016 vbp 49. ze 132

Odvozené (abstraktní) datové struktury JEDNOSMĚRNÝ SEZNAM nejjednodušší varianta seznamu každý prvek obsahuje odkaz na následující prvek při práci s jednosměrným seznamem používáme zarážku poslední prvek seznamu neobsahuje užitečná data poslední prvek seznamu slouží jako zarážka při prohledávání např. v Pascalu NIL, v C NULL uchováváme tedy (kromě ukazatele na hlavu) také ukazatel na tuto zarážku Ak. rok 2015/2016 vbp 50. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Vytvoření prázdného seznamu 1. Deklarujeme jako proměnné ukazatel na prvek (např. typ uprvek) ukazatel na hlavu seznamu hlava ukazatel na zarážku konec 2. Vytvoříme dynamickou proměnnou typu Prvek její adresu uložíme do proměnných hlava a konec 3. Do složky hlava.další (tj. do složky Další nově vytvořené dynamické proměnné) vložíme hodnotu NIL, resp. NULL Ak. rok 2015/2016 vbp 51. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Přidání nového prvku na konec seznamu 1. Požadovaná data vložíme do složky zarážky 2. Alokujeme nový prvek (novou dynamickou proměnnou typu Prvek) Její adresu uložíme do složky Další zarážky a do konec. Nově alokovaný prvek převezme roli zarážky. 3. Do složky Další nové zarážky vložíme hodnotu NIL, resp. NULL. Ak. rok 2015/2016 vbp 52. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Vyhledání prvku v seznamu (např. hledáme hodnotu dd) 1. Do pomocné proměnné p typu uprvek vložíme ukazatel na hlavu seznamu. 2. Do zarážky vložíme hledanou hodnotu, tj. přiřadíme konec.d = dd. 3. Prohledáváme postupně seznam. Platí-li p.d = dd, skončíme. Jinak do p uložíme adresu následujícího prvku seznamu. 4. Obsahuje-li po skončení p adresu zarážky, seznam hledaný prvek neobsahuje. V opačném př. obsahuje p adresu hledaného prvku. Ak. rok 2015/2016 vbp 53. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Vložení nového prvku za daný prvek seznamu Předpokládejme: známe adresu p prvku, za který chceme vložit do jednosměrného seznamu nový prvek využijeme pomocnou proměnnou q typu uprvek Ak. rok 2015/2016 vbp 54. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Vložení nového prvku za daný prvek seznamu 1. Alokujeme novou proměnnou typu Prvek a uložíme do ní potřebná data. Adresa nové proměnné je uložena v pomocné proměnné q. 2. Do q.další uložíme adresu prvku, který bude v seznamu následovat, tj. obsah proměnné p.další. 3. Do p.další uložíme adresu nově vloženého prvku, tj. obsah proměnné q. Ak. rok 2015/2016 vbp 55. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Vymazání prvku za daným prvkem seznamu Chceme ze seznamu odstranit prvek, který následuje za prvkem s adresou uloženou v proměnné p. K tomu potřebujeme pomocnou proměnnou q. Ak. rok 2015/2016 vbp 56. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Vymazání prvku za daným prvkem seznamu 1. Do q uložíme p.další (to je adresa mazaného prvku). 2. Do p.další uložíme p.další.další (to je adresa prvku, který leží za mazaným prvkem). 3. Zrušíme prvek, na který ukazuje q. Ak. rok 2015/2016 vbp 57. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Smazání daného prvku seznamu Chceme smazat prvek, na který ukazuje ukazatel p. To je složitější, neznáme prvek před tím, který chceme smazat. Jak napojit předcházející a následující prvek? Umíme smazat prvek, který leží za označeným prvkem. Na datech v mazaném prvku nezáleží. Přesuneme do něj tedy obsah prvku následujícího a ten pak smažeme. Ak. rok 2015/2016 vbp 58. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Smazání daného prvku seznamu 1. Přesuneme obsah p.další.d do p.d (nyní prvky p a p.další obsahují stejná data). 2. Smažeme prvek s adresou p.další. Ak. rok 2015/2016 vbp 59. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Smazání celého seznamu Seznam nepotřebujeme (nepoužíváme): je třeba jej smazat, tj. uvolnit dynamicky přidělenou paměť Seznam je: prázdný skládá se z hlava + ohon Algoritmus mazání je rekurzivní. Ak. rok 2015/2016 vbp 60. ze 132

Odvozené (abstraktní) datové struktury OPERACE S JEDNOSMĚRNÝM SEZNAMEM Smazání celého seznamu 1. Je-li seznam prázdný, tedy konec. Jinak ulož adresu hlavy do pomocné proměnné. 2. Do ukazatele na hlavu vlož adresu hlavy ohonu. Smaž hlavu. 3. Smaž ohon, tj. seznam, který zbyl po smazání hlavy. Ak. rok 2015/2016 vbp 61. ze 132

Odvozené (abstraktní) datové struktury JINÉ TYPY SEZNAMŮ Dvousměrný seznam (double-linked list) každý prvek obsahuje odkaz nejen na následující prvek, ale i na předcházející prvek dvousměrný seznam lze procházet v obou směrech od hlavy k poslednímu prvku od posledního prvku k hlavě Ak. rok 2015/2016 vbp 62. ze 132

Odvozené (abstraktní) datové struktury JINÉ TYPY SEZNAMŮ Kruhový seznam (cyklický) může být jednosměrný i dvousměrný obvykle se nepoužívá zarážka poslední prvek odkazuje na první prvek pokud jde o seznam dvousměrný, pak i první prvek odkazuje na prvek poslední Ak. rok 2015/2016 vbp 63. ze 132

Odvozené (abstraktní) datové struktury STROM rekurzivní datová struktura Abstraktní definice stromu se základním typem T je rekurzivní: Strom se základním typem T je buď prázdná struktura nebo prvek typu T, na který je připojen konečný počet disjunktních stromových struktur se základním typem T (označujeme je jako podstromy). Ak. rok 2015/2016 vbp 64. ze 132

Odvozené (abstraktní) datové struktury STROM prvky stromu se označují jako vrcholy, resp. uzly vrchol, ke kterému není připojen žádný podstrom označujeme jako koncový vrchol, resp. list vrchol, který sám není připojen k žádnému jinému vrcholu označujeme jako kořen kořen spolu se všemi podstromy, které jsou k němu připojeny, tvoří celý strom prvky, které nejsou listy, označujeme jako vnitřní vrcholy stromu Ak. rok 2015/2016 vbp 65. ze 132

Odvozené (abstraktní) datové struktury STROM Je-li G kořen podstromu připojeného k uzlu C, říkáme také, že G je (přímým) následovníkem C a C je (přímým) předchůdcem G. A B C D E F G H I J K L M N O Ak. rok 2015/2016 vbp 66. ze 132

Odvozené (abstraktní) datové struktury STROM Kořen je vrchol, který nemá žádného předchůdce. A List je vrchol, který nemá žádného následovníka. B C D E F G H I J K L M N O Ak. rok 2015/2016 vbp 67. ze 132

Odvozené (abstraktní) datové struktury STROM Dodatek k definici stromu: Nechť počet podstromů připojený k libovolnému z vrcholů daného stromu nepřesáhne n. Potom takový strom označujeme jako n-ární. Nejčastěji: n = 2 binární strom n = 3 ternární strom Číslo n ( -aritu ) označujeme jako typ stromu. Ak. rok 2015/2016 vbp 68. ze 132

Odvozené (abstraktní) datové struktury STROM Příklad: A Ternární strom B C D E F G H I J K L M N O Ak. rok 2015/2016 vbp 69. ze 132

Odvozené (abstraktní) datové struktury STROM Pojmy: kořen stromu je na první úrovni uzly, následovníci kořene, jsou na druhé úrovni obecně: je-li uzel R na úrovni i a uzel S je následovníkem R, pak uzel S je na úrovni i+1 Ak. rok 2015/2016 vbp 70. ze 132

Odvozené (abstraktní) datové struktury STROM Pojmy: Nechť x je úroveň vrcholu X. Chceme-li projít stromem od kořene k vrcholu X, musíme projít x hran (včetně hrany, která vstupuje do kořene). Pak místo o úrovni vrcholu často hovoříme o délce vnitřní cesty daného vrcholu. Ak. rok 2015/2016 vbp 71. ze 132

Odvozené (abstraktní) datové struktury STROM Pojmy: Součet délek cest všech uzlů v daném stromě se nazývá délka vnitřní cesty stromu. Průměrná délka vnitřní cesty stromu je dána vztahem P i = 1 n i=1 n n i i n i je počet uzlů na i-té úrovni stromu Ak. rok 2015/2016 vbp 72. ze 132

Odvozené (abstraktní) datové struktury STROM A Pojmy: Zvláštní vrcholy D B E F G C H I J K L M N O Ak. rok 2015/2016 vbp 73. ze 132

Odvozené (abstraktní) datové struktury STROM Pojmy: D B E F A G C H I J K L M N O Délka vnější cesty stromu = součet délek cest všech zvláštních vrcholů. Průměrná délka vnější cesty stromu: m i = počet zvláštních vrcholů na i-té úrovni (m je celkový počet zvl. vrcholů) Ak. rok 2015/2016 vbp 74. ze 132

Odvozené (abstraktní) datové struktury STROM Pojmy: Stromy nejčastěji reprezentujeme jako dynamické datové struktury. Vrcholy stromu mohou být např. záznamy: obsahují ukazatele na kořeny připojených podstromů (nebo NULL, není-li podstrom připojen) užitečné informace jsou uloženy ve složce typu data (podobně jako u seznamu) Ak. rok 2015/2016 vbp 75. ze 132

Odvozené (abstraktní) datové struktury BINÁRNÍ STROMY Ke každému vrcholu jsou připojeny dva podstromy (jeden nebo oba mohou být prázdné) Jeden označujeme jako levý, druhý jako pravý podstrom Ak. rok 2015/2016 vbp 76. ze 132

Odvozené (abstraktní) datové struktury BINÁRNÍ STROMY Nejčastěji se setkáváme s binárními stromy s následujícím uspořádáním dat: Pro každý vrchol U platí, že všechny údaje, uložené v levém podstromu, připojenému k U, jsou menší, než je údaj uložený v U, a všechny údaje, uložené v pravém podstromu, připojenému k U, jsou větší, než je údaj uložený v U. Binární strom je přístupný pomocí ukazatele na kořen. Vrcholy alokujeme dynamicky. Ak. rok 2015/2016 vbp 77. ze 132

Odvozené (abstraktní) datové struktury BINÁRNÍ STROMY Při procházení binárního stromu využíváme některou z metod: přímé zpracování (preorder) (zpracujeme data v kořeni, pak levý podstrom, poté pravý podstrom) vnitřní zpracování (inorder) (projdeme levý podstrom, pak kořen, nakonec pravý podstrom) zpětné zpracování (postorder) (zpracováváme v pořadí levý podstrom, pravý podstrom, kořen) Ak. rok 2015/2016 vbp 78. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Vytvoření binárního stromu Vytvoříme prázdný binární strom strom se skládá ze záznamů (struktur) typu vrchol musíme mít ukazatel na kořen stromu musíme mít proměnnou typu ukazatel na vrchol Vytvoření prázdného stromu = přiřazení hodnoty NULL této proměnné typu ukazatel na vrchol Ak. rok 2015/2016 vbp 79. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Zrušení binárního stromu Je-li strom, na který t (ukazatel na kořen) ukazuje, prázdný, skončíme Smažeme levý podstrom připojený k vrcholu, na který ukazuje t Smažeme pravý podstrom připojený k vrcholu, na který ukazuje t Smažeme vrchol, na který ukazuje t Ak. rok 2015/2016 vbp 80. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Vložení nového vrcholu Máme data dd a chceme je zařadit do stromu Pokud tam takový údaj ještě není, přidáme do stromu nový vrchol; jinak není třeba dělat nic Přidáváme-li vrchol do prázdného stromu, alokujeme pro něj paměť Uložíme do něj potřebná data a adresu vrcholu uložíme do ukazatele na kořen Ak. rok 2015/2016 vbp 81. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Vložení nového vrcholu V nedprázdném stromě vyjdeme od kořene a porovnáme dd s hodnotou v něm je-li dd menší než uložená hodnota zařadíme nový vrchol do levého podstromu jinak jej zařadíme do pravého podstromu Ak. rok 2015/2016 vbp 82. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Vyhledání údaje ve stromu 1. Je-li strom prázdný, hledaný údaj v něm není; konec 2. Jinak porovnáme dd s hodnotou v kořeni; jsou-li si rovny, nalezli jsme hledaný údaj; konec 3. Jinak je-li dd menší než hodnota uložená v kořeni, prohledáme levý podstrom připojený ke kořeni; Provedeme s ním tento algoritmus a skončíme 4. Jinak prohledáme pravý podstrom a skončíme Ak. rok 2015/2016 vbp 83. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Zrušení vrcholu 1. Rušíme list. V takovém případě uvolníme dynamickou paměť přidělenou tomuto uzlu a odstraníme odkaz na rušený vrchol v jeho předchůdci (nebo ukazatel na kořen, jestliže měl strom jen jeden vrchol) 2. Rušíme vrchol, který má jen jednoho následovníka (analogie rušení prvku seznamu). Adresu rušeného prvku uložíme do pomocné proměnné; odkaz v předchůdci upravíme tak, aby ukazoval na následovníka a vrchol zrušíme. Ak. rok 2015/2016 vbp 84. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Zrušení vrcholu 3. Rušíme vrchol, který má dva následovníky. Nastává problém, čím zrušený vrchol nahradit. Kromě hodnoty dd, která nás již nezajímá, obsahuje také odkazy na své následovníky, které je třeba uchovat. Výsledkem této operace musí být opět uspořádaný binární strom. Ak. rok 2015/2016 vbp 85. ze 132

Odvozené (abstraktní) datové struktury OPERACE S BINÁRNÍMI STROMY Zrušení vrcholu V tomto případě se používá následujícího triku: 1. Najdeme nejpravější vrchol levého podstromu připojeného k rušenému vrcholu (označíme jej Q; to je vrchol, v němž je uložena největší z hodnot menších než v rušeném vrcholu). Nalezený vrchol má nejvýše jednoho následovníka (jinak by nemohl být nejpravější). 2. Hodnotu z vrcholu Q přeneseme do vrcholu, který chceme zrušit. 3. Zrušíme vrchol Q. Analogicky nejlevější vrchol pravého podstromu, Ak. rok 2015/2016 vbp 86. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) datová struktura podobná stromu vrcholy tohoto stromu se nazývají stránky Ak. rok 2015/2016 vbp 87. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) Pro b-strom řádu n platí: kořenová stránka obsahuje alespoň jednu položku každá stránka obsahuje maximálně 2n položek (ulož. údajů) každá stránka (kromě kořenové) obsahuje minimálně n položek Ak. rok 2015/2016 vbp 88. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) Pro b-strom řádu n platí: Každá stránka je buď listovou stránkou (nemá žádné následovníky), nebo má m+1 následovníků, kde m je počet položek v ní uložených. Všechny listové stránky jsou na stejné úrovni. Ak. rok 2015/2016 vbp 89. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) B-stromy 1. řádu: stránky obsahují 1 nebo 2 položky Takové b-stromy se často nazývají 2-3-stromy: každá stránka kromě listů má 2-3 následovníky. Takové stromy se nazývají také binární b-stromy, resp. bb-stromy. Ak. rok 2015/2016 vbp 90. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) B-strom 2. řádu (jeho stránky tedy obsahují 2 4 údaje) 07 11 13 60 70 3 9 13 21 23 25 27 31 33 35 41 43 45 47 51 53 61 63 65 Ak. rok 2015/2016 vbp 91. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) Přidání údaje do b-stromu (1) a) Vyhledáme listovou stránku, do které nový údaj patří; pokud je v ní místo, (obsahuje méně než 2n údajů), vložíme nový údaj a skončíme. b) Je-li stránka zaplněná, obsahovala by 2n+1 údajů; údaj zařadíme na správné místo a takto vzniklou přeplněnou stránku rozdělíme na dvě po n údajích a prostřední údaj přesuneme do předchůdce (když stránka předchůdce nemá, vytvoříme ho). Ak. rok 2015/2016 vbp 92. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) Přidání údaje do b-stromu (2) V předchůdci se může situace opakovat. Z toho plyne: b-strom roste pouze tak, že se rozdělí kořenová stránka. Ak. rok 2015/2016 vbp 93. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) Odstranění údaje z b-stromu a) Odstraňovaný údaj neleží v listové stránce Vyhledáme nejbližší menší údaj (nejpravější prvek v levém podstromu připojeném k tomuto prvku). b) Tedy: Odstraňujeme-li m-tý prvek ve stránce S, vyhledáme největší prvek v (m - 1)-tém podstromu, připojeném k S. Tento náhradní prvek bude ležet v listovní stránce. Jeho hodnotu přeneseme na místo mazaného prvku a smažeme náhradní prvek v listu. Ak. rok 2015/2016 vbp 94. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) Odstranění údaje z b-stromu b) Odstranění prvku z listu Poté, co prvek z listu S vyjmeme, musíme se přesvědčit, kolik prvků v něm zůstalo (žádná stránka kromě kořene nesmí mít méně prvků než n). Pokud v listu S zůstalo alespoň n prvků, skončíme. Ak. rok 2015/2016 vbp 95. ze 132

Odvozené (abstraktní) datové struktury B-STROM (b-tree) Odstranění údaje z b-stromu b) Odstranění prvku z listu Pokud bude list S obsahovat n-1 prvků, pokusíme se vypůjčit si potřebný prvek ze sousední stránky (se společným předchůdcem). Ta musí mít n+1 prvků. Pokud má pouze n prvků (nemůžeme si od ní půjčit ), musíme tyto dvě stránky sloučit (to můžeme, neboť obě tyto listové stránky mají dohromady pouze 2n-1 prvků). Atd. Ak. rok 2015/2016 vbp 96. ze 132

Odvozené (abstraktní) datové struktury ZÁSOBNÍK (stack) Jde o datovou strukturu, do které odkládáme data v průběhu zpracování. Data ze zásobníku odebíráme v obráceném pořadí, než jsme data vkládali: poslední uloženou položku musíme vyjmout jako první předposlední uloženou položku musíme vyjmout jako druhou atd. Ak. rok 2015/2016 vbp 97. ze 132

Odvozené (abstraktní) datové struktury ZÁSOBNÍK (stack) vložení další položky vyjmutí položky vrchol zásobníku dno zásobníku Ak. rok 2015/2016 vbp 98. ze 132

Odvozené (abstraktní) datové struktury ZÁSOBNÍK (stack) Položku, která neleží na vrcholu zásobníku, nelze vyjmout. Známe-li její polohu, můžeme ji přečíst (získat její hodnotu, aniž byla ze zásobníku vyjmuta). Implementace zásobníku: pomocí pole (musíme si neustále pamatovat index posledně vloženého prvku, který je na vrcholu zásobníku) pomocí seznamu (definujeme hlavu seznamu jako vrchol zásobníku) Ak. rok 2015/2016 vbp 99. ze 132

Odvozené (abstraktní) datové struktury FRONTA Datová struktura podobná zásobníku. Má odlišnou vnitřní strukturu: prvky do fronty vkládáme na jedné straně (konec) prvky z fronty vybíráme na druhém konci (čelo) prvky ve frontě uloženy dle pořadí vložení prvky z fronty vybíráme ve stejném pořadí prvek lze z fronty vyjmout jen je-li na řadě (na čele fronty) Ak. rok 2015/2016 vbp 100. ze 132

Odvozené (abstraktní) datové struktury FRONTA Frontu reprezentujeme pomocí pole, resp. seznamu (jako zásobník) vyjmutí položky vložení položky čelo fronty konec fronty Ak. rok 2015/2016 vbp 101. ze 132

Odvozené (abstraktní) datové struktury FRONTA Fronta s prioritami Priorita prvku je funkce hodnoty v prvku uložené. Fronta s prioritami: prvky vkládáme v pořadí, ve kterém přišly prvky vybíráme v pořadí závislém na jejich prioritě Prioritu lze uplatnit i při vkládání. Fronty s prioritami se implementují pomocí seznamů. Ak. rok 2015/2016 vbp 102. ze 132

Odvozené (abstraktní) datové struktury FRONTA Fronta kruhová Např. pole Q[0, 1, 2,, n-1] a po prvku Q[n-1] bude následovat prvek Q[0]. Pro obsluhu kruhové fronty potřebujeme ukazatel f na čelo fronty ukazatel r na konec fronty Ak. rok 2015/2016 vbp 103. ze 132

Odvozené (abstraktní) datové struktury FRONTA Fronta kruhová [n-1] [0] [1] [2] Ak. rok 2015/2016 vbp 104. ze 132

Odvozené (abstraktní) datové struktury FRONTA Fronta kruhová Při každé operaci vkládání, resp. výběru kontrolujeme, zda f = r. rovnost nastane po výběru prvku, pak je fronta prázdná. rovnost nastane po vložení prvku, pak je fronta již plná. Ak. rok 2015/2016 vbp 105. ze 132

Odvozené (abstraktní) datové struktury TABULKA Tabulka symbolů je datová struktura umožňující rychle zjistit, zda se v ní někde daný prvek vyskytuje. Umožňuje: snadno prvek vložit snadno prvek vyjmout Takové tabulky se využívají v kompilátorech při lexikální analýze (např. zda již byl daný identifikátor deklarován). Ak. rok 2015/2016 vbp 106. ze 132

Odvozené (abstraktní) datové struktury TABULKA Tabulka symbolů Roli tabulky symbolů mohou hrát binární stromy. Nemáme-li žádné apriorní informace o statistickém rozdělení vkládaných prvků, nebudou vytvořené stromy příliš optimální. Proto se obvykla používají hešové tabulky: souvislá oblast paměti pro ukládání prvků hesel tabulka je rozdělena na tzv. koše (např. K(1), K(2),, K(k)) v každém z košů může být s hesel (každý koš má s pozic, často se volí s=1). Ak. rok 2015/2016 vbp 107. ze 132

Odvozené (abstraktní) datové struktury GRAFY Orientovaný graf G definujeme jako dvojici G = {U,H}, kde U je množina uzlů, H UxU je množina orientovaných hran. O orientované hraně e = <i, j>, kde i a j jsou uzly, říkáme, že jde z uzlu i do uzlu j. Orientovaný graf může také obsahovat hranu <i, i>. Někdy též zapisujeme i j, resp. i i. Ak. rok 2015/2016 vbp 108. ze 132

Odvozené (abstraktní) datové struktury GRAFY Ztotožníme-li hranu <i, j> s hranou <j, i>, jde o neorientovaný graf. Definujeme-li zobrazení h: H R, které jednotlivým hranám přiřadí číselné hodnoty, pak hovoříme o ohodnoceném grafu. Posloupnost orientovaných hran <i, i 1 >, <i 1, i 2 >,, <i k, j> označujeme jako cestu z uzlu i do uzlu j. Cesta, jejíž počáteční uzel je roven uzlu koncovému, je cyklus. Ak. rok 2015/2016 vbp 109. ze 132

Odvozené (abstraktní) datové struktury GRAFY 4 4 5 3 5 3 2 1 2 1 Orientovaný graf Neorientovaný graf Ak. rok 2015/2016 vbp 110. ze 132

Odvozené (abstraktní) datové struktury MNOŽINY Množiny s prvky ordinálních typů Ordinálními typy mohou být znaky, intervaly, výčtové typy, (seznamy objektů). Ak. rok 2015/2016 vbp 111. ze 132

Třídění TŘÍDĚNÍ Ak. rok 2015/2016 vbp 112. ze 132

Třídění Pojmy: Třídění = uspořádání dané posloupnosti dat podle určitého klíče v neklesající, resp. nerostoucí pořadí. Prvky tříděné posloupnosti budou stejného datového typu. Obecně jde o záznamy (struktury). Klíčem bude: některá ze složek záznamu funkce vypočítaná na základě celého záznamu Ak. rok 2015/2016 vbp 113. ze 132

Třídění Pojmy: Vnitřní třídění známe počet prvků posloupnosti všechny prvky posloupnosti jsou uloženy ve vnitřní paměti počítače Vnější třídění neznáme počet prvků posloupnosti všechny prvky posloupnosti jsou uloženy ve vnější paměti se sekvenčním přístupem (magnetická páska, disk) Ak. rok 2015/2016 vbp 114. ze 132

Vnitřní třídění TŘÍDĚNÍ PŘÍMÝM VÝBĚREM 1. Ve zdrojové posloupnosti najdeme prvek s nejmenším klíčem. 2. Vyměníme tento prvek s prvkem na první pozici. 3. Nyní máme na první pozici prvek s nejmenším klíčem. Máme-li utřídit zbytek posloupnosti, opakujeme tyto kroky se zbylými n-1 prvky, dokud je n > 1. Ak. rok 2015/2016 vbp 115. ze 132

Vnitřní třídění TŘÍDĚNÍ PŘÍMÝM VÝBĚREM Příklad: 3 2 17 1 8 5 neutříděno 1 2 17 3 8 5 1 2 17 3 8 5 1 2 3 17 8 5 1 2 3 5 8 17 1 2 3 5 8 17 plně utříděné Ak. rok 2015/2016 vbp 116. ze 132

Vnitřní třídění TŘÍDĚNÍ BUBLINKOVÉ (bublesort) 1. Opakovaně procházíme polem 2. Porovnáváme dva sousední prvky 3. Pokud relace nevyhovuje, prohodíme je Při prvním průchodu vyplave nejlehčí prvek na hladinu, při druhém průchodu vyplave 2. nejlehčí prvek, atd. Ak. rok 2015/2016 vbp 117. ze 132

Vnitřní třídění TŘÍDĚNÍ BUBLINKOVÉ (bublesort) Vylepšení algoritmu při průchodu polem registrujeme uskutečněné výměny prvků v okamžiku, kdy při průchodu polem nenastala žádná výměna, je pole uspořádané Ak. rok 2015/2016 vbp 118. ze 132

Vnitřní třídění TŘÍDĚNÍ BUBLINKOVÉ (bublesort) Vylepšení algoritmu zapamatujeme si i index prvku, kterého se týkala poslední výměna za tímto prvkem již nebyly žádné další výměny tj. prvky jsou již uspořádány tento úsek již nemusíme procházet Ak. rok 2015/2016 vbp 119. ze 132

Vnitřní třídění TŘÍDĚNÍ BUBLINKOVÉ (bublesort) Vylepšení algoritmu evidentně záleží na směru pohybu v tříděném poli pohyb zleva doprava nejtěžší prvek vybublá nejrychleji pohyb zprava doleva nejlehčí prvek vybublá nejrychleji kombinujme (střídejme) tedy oba směry pohybu v tříděném poli třídění PŘETŘÁSÁNÍM Ak. rok 2015/2016 vbp 120. ze 132

Vnitřní třídění SHELLOVO TŘÍDĚNÍ (Shellsort) Příčina neefektivnosti předchozích algoritmů vyměňujeme pouze sousední prvky nejmenší prvek např. na konci pole potřebujeme n výměn preferujme výměnu prvků na velké vzdálenosti Ak. rok 2015/2016 vbp 121. ze 132

Vnitřní třídění SHELLOVO TŘÍDĚNÍ (Shellsort) Donald L. Shell (1.3.1924 2.11.2015), americký počítačový vědec Myšlenka přeuspořádejme pole tak, že vezmeme-li každý h-tý prvek, dostaneme setříděné pole (pole setříděné s krokem h) pole setříděné s krokem h představuje h proložených nezávislých polí Ak. rok 2015/2016 vbp 122. ze 132

Vnitřní třídění SHELLOVO TŘÍDĚNÍ (Shellsort) Myšlenka při Shellově třídění třídíme nejprve s krokem h 1 pak s krokem h 2 (h 2 < h 1 ), atd. nakonec třídíme s krokem h n = 1 (dostaneme plně setříděné pole) při každém z průchodů třídíme pole, které je již částečně utříděné můžeme očekávat, že bude třeba jen málo výměn Ak. rok 2015/2016 vbp 123. ze 132

Vnitřní třídění RYCHLÉ TŘÍDĚNÍ (quicksort) (třídění rozdělováním) Myšlenka nejefektivnější je výměna prvků v poli na velké vzdálenosti mějme pole seřazené v opačném pořadí potřebujeme jen n/2 výměn porovnáme prvky na obou koncích pole a vyměníme je pak postoupíme o jedno pole ke středu a zopakujeme porovnání Ak. rok 2015/2016 vbp 124. ze 132

Vnitřní třídění RYCHLÉ TŘÍDĚNÍ (quicksort) (třídění rozdělováním) Myšlenka pokud pole není seřazené v obráceném pořadí, nemůže být náš postup tak přímočarý vyjdeme z principu Rozděl a panuj zvolíme náhodně prvek x uspořádáme pole tak, aby vlevo od x byly menší prvky a vpravo od x byly větší prvky máme 3 části vlevo jsou prvky menší než x prvek x je už na svém místě vpravo jsou prvky větší než x Ak. rok 2015/2016 vbp 125. ze 132

Vnitřní třídění RYCHLÉ TŘÍDĚNÍ (quicksort) (třídění rozdělováním) Myšlenka pokud pole obsahuje pouze 3 prvky za x volíme prostřední (pokud jde o velikost, tj. medián) předeslaným procesem získáme uspořádané pole pokud pole obsahuje pouze 2 prvky za x volíme kterýkoli z nich a je to Ak. rok 2015/2016 vbp 126. ze 132

Vnitřní třídění RYCHLÉ TŘÍDĚNÍ (quicksort) (třídění rozdělováním) Algoritmus 1. Zvolíme x a rozdělíme popsaným způsobem tříděné pole na úseky a1,, as,, an Platí, že a i <= x pro i=1, 2,, s-1 a s = x a i >= x pro i=s+1,, n Ak. rok 2015/2016 vbp 127. ze 132

Vnitřní třídění RYCHLÉ TŘÍDĚNÍ (quicksort) (třídění rozdělováním) Algoritmus 2. Proces rozdělení opakujeme pro úseky a 1,, a s a s+1,, a n 3. Dále pak pro jejich části, až dospějeme k úsekům délky 1 4. 5. A ty už budou automaticky utříděné Ak. rok 2015/2016 vbp 128. ze 132

Vnitřní třídění RYCHLÉ TŘÍDĚNÍ (quicksort) (třídění rozdělováním) Algoritmus rozdělení pole na dvě části 1. Vyjdeme od prvního prvku pole a budeme hledat prvek, který je větší než x. 2. Zároveň budeme pole prohledávat od konce, až narazíme na prvek, který je menší než x. 3. Tyto dva prvky zaměníme. 4. Až se oba směry prohledávání setkají uprostřed pole, skončíme. Ak. rok 2015/2016 vbp 129. ze 132

Některé základní algoritmy 1. Záměna dvou daných prvků 2. Seřazení tří daných prvků dle velikosti 3. Nalezení dané hodnoty v daném poli jednorozměrné pole dvourozměrné pole 4. Nalezení extrémní velikosti prvku a jeho polohy v daném poli jednorozměrné pole dvourozměrné pole 5. Součet, resp. součin prvků daného číselného pole (vektor, matice) Ak. rok 2015/2016 vbp 130. ze 132

Některé základní algoritmy Algoritmizace I 6. Záměna minimálního a maximálního prvku v daném poli 7. Součet, resp. součin matic 8. Záměna dvou řádků matice 9. Matice převlečená naruby (s využitím algoritmu v úloze 8) 10. Nalezení v absolutní hodnotě maximálního prvku v řádku (resp. sloupci) matice a jeho záměna s prvkem diagonálním Ak. rok 2015/2016 vbp 131. ze 132

Programování I Děkuji za pozornost Ak. rok 2015/2016 vbp 132. ze 132