Úvod do programování 5. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.

Slides:



Advertisements
Podobné prezentace
Sorty Bubble, Insert a Quick
Advertisements

Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Nalezení nejkratší vzdálenosti mezi uzly dopravní sítě Předmět: Teorie dopravy - cvičení.
Programování 4. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
:-) Asymptotická složitost algoritmů Autor: Antonín DANĚK Semestrální projekt 1 – Y14TED.
Strategické otázky výzkumníka 1.Jaký typ výzkumu zvolit? 2.Na jakém vzorku bude výzkum probíhat? 3.Jaké výzkumné metody a techniky uplatnit?
Ekonomicko-matematické metody č. 11 Prof. RNDr. Jaroslav Ramík, CSc.
Hodnocení kvality výuky 2014 – 2015 LS Říjen 2015.
Doprava ROZMĚRY Který obrázek je největší? Který obrázek je nejmenší?
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o, Orlová Lutyně AUTOR: Ing. Oldřich Vavříček NÁZEV: Podpora výuky v technických oborech TEMA: Základy elektrotechniky.
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
Úvod do programování 9. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
ZAL – 5. cvičení Martin Tomášek Pole - opakování Základní datový typ. V poli držíme více elementů (jednoho typu) S elementy v poli můžeme manipulovat.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Grafy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T. G. Masaryka, Kostelec nad Orlicí.
Úvod do programování 2. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
OneNote. Co to je?  OneNote patří k produktům Microsoftu, nyní je ke stažení zdarma  jde o aplikaci pro rychlou, snadnou a přehlednou správu různých.
Úvod do programování 7. hodina
Měření délky pevného tělesa
Zajištění obsluhy všech úseku dopravní sítě Předmět: Teorie dopravy - cvičení Ing. František Lachnit, Ph.D.
COM – Práce s objektovým modelem jiné aplikace
Matematika 3 – Statistika Kapitola 4: Diskrétní náhodná veličina
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Lineární funkce - příklady
ČÍSLO PROJEKTU CZ.1.07/1.5.00/ ČÍSLO MATERIÁLU 1 – Množiny – teorie
Programování v jazyce C++
Kánon hlavy (Unface) Základní pravidla pro kresbu portrétu
Hra k zopakování a procvičení učiva (Test znalostí)
Operační výzkum Lineární programování – cvičení
8.1.2 Podprostory.
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
ROZVRHOVÁNÍ SLUŽEB VE ZDRAVOTNICKÉM ZAŘÍZENÍ
Maďarská metoda Kirill Šustov Michal Bednář Stanislav Běloch
Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,
Souběh Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Běžné reprezentace grafu
Rozpisy témat a odevzdávárny
Gymnasium Jižní Město Praha
ZAL – 8. cvičení 2016.
Kvadratické nerovnice
ČÍSLO PROJEKTU CZ.1.07/1.5.00/ ČÍSLO MATERIÁLU
ČÍSLO PROJEKTU ČÍSLO MATERIÁLU NÁZEV ŠKOLY AUTOR TÉMATICKÝ CELEK
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Optimální pořadí násobení matic
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Algoritmizace Hashing II
Česká padelová tour 2018 seriál oficiálních soutěžních turnajů vrcholící Mistrovstvím České republiky v padelu vyhlašuje:
Materiál byl vytvořen v rámci projektu
Konstrukce trojúhelníku
3. přednáška Laplaceova transformace
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Text zápatí (edituje se v menu Vložení / Záhlaví a zápatí)
Teorie chyb a vyrovnávací počet 1
ALG 08 Merge sort -- řazení sléváním
Tereza Bížová Představení se.
Lineární regrese.
Dynamické programování Úloha batohu neomezená
Matematika + opakování a upevňování učiva
Lineární funkce a její vlastnosti
Základy infinitezimálního počtu
Funkce v jazyce C = „množina“ operací, která provádí nějakou činnost s různými vstupy odstranění vícenásobného psaní či vkládání téhož kódu a lepší přehlednost.
Grafy kvadratických funkcí
Seminář o stavebním spoření
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Algoritmy vyhledávání a řazení
Hledání k-tého nejmenšího prvku
Transkript prezentace:

Úvod do programování 5. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Jan LánskýÚvod do programování 5. hodina2 Umíme z minulé hodiny Syntax Předávání parametrů funkce referencí ref Pole Algoritmy Kopie pole Nesetříděné pole: nalezení hodnoty a počtu výskytů, nejdelší posloupnost stejných hodnot Eratostenovo síto Ladění programu

Jan LánskýÚvod do programování 5. hodina3 Cíle hodiny Algoritmy Třídění pole: Selection sort, Insertion sort, Bubble sort Třídění pole omezených hodnot: Counting sort Binární vyhledávání v setříděném poli Syntax Globální proměnné Měření počtu operací Měření doby běhu programu

Jan LánskýÚvod do programování 5. hodina4 Třídění Budeme třídit pole vzestupně od nejnižší hodnoty po nejvyšší hodnotu Pokud i<j pak pole[i]<pole[j] Setříděné pole umožňuje rychleji hledat prvky podle hodnoty než pole nesetřídění Algoritmy budou pro jednoduchost předpokládat, že hodnoty prvků jsou po dvou různé. V praxi hodnoty různé nebývají ale u představených algoritmů není třeba úprava.

Jan LánskýÚvod do programování 5. hodina5 Třídící algoritmy Přímé algoritmy O(n 2 ) Selection sort, Insertion sort, Bubble sort Dva vnořené cykly, setřídí původní pole Omezené hodnoty prvků Counting sort Pomocné pole, jehož délka odpovídá maximu z hodnot prvků pole. Chytré algoritmy O(n log(n)) Heapsort, Mergesort, Quicksort Složitější implementace, naučíme se později

Jan LánskýÚvod do programování 5. hodina6 Selection sort Český název: Třídění výběrem, Pole je rozděleno na levou a pravou část. Levá část je setříděná a pravá je nesetříděná Každý prvek v levé části má menší hodnotu než libovolný prvek v pravé části V každém kroku nalezneme prvek s nejmenší hodnotou v pravé části a vyměníme ho s prvním prvkem pravé částí Touto výměnou jsme prvek připojili na nakonec levé části

Jan LánskýÚvod do programování 5. hodina7 Selection sort Nesetříděná část pole začíná na indexu i Index aktuálně minimálního prvku z nesetříděné posloup. Index prvku z nesetříděné části s aktuálně nejmenší hodnotou Prvek s nejmenší hodnotou v nesetříděné posloupnosti prohodíme s prvním prvkem nesetříděné posloupnosti. Tento prvek se nyní stává posledním prvkem setříděné posloupnosti. Stačilo by Length -1, ale pro přehlednost programu necháme Length

Jan LánskýÚvod do programování 5. hodina8 Selection sort ii j Krok i = 9 jde vynechat Kroky i = 2 a i = 5 Minimum bylo na prvním místě

Jan LánskýÚvod do programování 5. hodina9 Selection sort Funkce Vymena se použije i pro Bubble Sort. Funkce Main bude obdobná i pro Insert Sort a Bubble Sort 0, 1, 1, 2, 3, 4, 5, 6, 7, 9

Jan LánskýÚvod do programování 5. hodina10 Insertion sort Český název: Třídění vkládáním Pole je rozděleno na levou a pravou část. Levá část je setříděná a pravá je nesetříděná V každém kroku vezmeme první prvek v pravé části a vložíme ho na správné místo v levé části. Prvky v levé části, které mají větší hodnotu než právě vložený prvek posuneme o jednu pozici doprava. Procházíme je zprava doleva

Jan LánskýÚvod do programování 5. hodina11 Insertion sort akt – hodnota aktuálně vkládaného prvku Po konci cyklu: hodnota pole[j] je nejmenší z hodnot prvků větších než hodnota aktuálně vkládaného prvku. Do prvku napravo okopírujeme hodnotu prvku nalevo Cyklus končí, pokud hodnota prvku nalevo není větší než hodnota vkládaného prvku

Jan LánskýÚvod do programování 5. hodina12 Insertion sort ii j Krok i = 0 není součástí algoritmu

Jan LánskýÚvod do programování 5. hodina13 Bubble sort Český název: Bublinkové třídění, V setříděném poli je hodnota prvku nalevo vždy vyšší než hodnota prvku napravo. V každém kroku vyměníme všechny sousední prvky, které nesplňují nerovnost. V každém kroku se alespoň jeden prvek dostane na své finální místo Možné vylepšení Průchod polem jen do místa posledního uskutečněné výměny z minulého kroku V praxi na obecné pole horší než Insertion Sort a Selection Sort. Výhodný, pokud je pole částečně setříděné

Jan LánskýÚvod do programování 5. hodina14 Bubble sort Porušena nerovnost Došlo k výměně, musí být další iterace while cyklu Budeme testovat, zda ve for cyklu dojde k výměně Pokud nedošlo k výměně, je pole setříděné

Jan LánskýÚvod do programování 5. hodina15 Bubble sort i Krok i = 9 jde vynechat while

Jan LánskýÚvod do programování 5. hodina16 Counting Sort Český název: Třídění počítáním V poli se vyskytují pouze hodnoty z intervalu až 0 až k pro k malé Pomocné pole o velikosti k Časová složitost O(n+k) V pomocném poli uchováváme četnosti výskytů jednotlivých hodnot. Indexy pomocného pole odpovídají hodnotám původního pole Projdeme pomocné pole a hodnotu reprezentovanou indexem prvku dáme na výstup tolikrát, kolik je jeho četnost (hodnota prvku v pomocném poli). Naše implementace třídí hodnoty 0 až k. Jde udělat obecně i když hodnoty nejsou od 0

Jan LánskýÚvod do programování 5. hodina17 Counting Sort Zjistíme maximální hodnotu v poli Vytvoříme pomocné pole pro počítání četností hodnot. Pozor: musí být délky max+1 Pomocné pole může být děravé, díry přeskočí else větev. Snížíme čítač hodnoty a přiřadíme ji na příslušné místo původního pole Nejde snadno nahradit for cyklem

Jan LánskýÚvod do programování 5. hodina18 Counting sort I i Dvakrát 1, chybí 8 hodnoty Původní pole

Jan LánskýÚvod do programování 5. hodina19 Counting sort II i Původní pole hodnoty Původní pole

Jan LánskýÚvod do programování 5. hodina20 Binární vyhledávání Hledáme výskyt hodnoty v setříděném poli. Časová složitost O(log(n)) vs. hledání v nesetříděném poli se složitostí O(n) Pole rozpůlíme na poloviny a podle hodnoty dělícího prvku si vybereme levou nebo pravou polovinu. Je-li hledaný prvek menší než dělící prvek, vybereme levou polovinu. Předchozí krok opakujeme na vybrané polovině pole dokud nenalezneme prvek, nebo jsme v jednoprvkovém poli

Jan LánskýÚvod do programování 5. hodina21 Binární vyhledávání Hodnota nenalezena Aspoň jeden prvek Výběr poloviny nalezeno Nalezení indexu prvku s hledanou hodnotou. Nevrací první výskyt ! Length - 1

Jan LánskýÚvod do programování 5. hodina22 Binární vyhledávání levypravystred Hledáme hodnotu 5 while

Jan LánskýÚvod do programování 5. hodina23 Globální proměnné Lokální proměnné Definovány v těle funkcí. Viditelné jen ve funkci, kde jsou definovány Globální proměnné Definovány mimo tělo funkcí Viditelné ze všech funkcí Raději je nepoužívat, nepřehledný zdrojový kód. Rozumné použití: při testování pro čítače (počtu operací, počtů volání funkcí, atd.) Doposud známe jen lokální proměnné

Jan LánskýÚvod do programování 5. hodina24 Globální proměnné Globální proměnná musí být static V kódu na stejném místě jako definice funkce Použití globální proměnné ve funkci Funkce Použití globální proměnné ve funkci Main

Jan LánskýÚvod do programování 5. hodina25 Měření počtu operací Funkce provádějící danou operaci inkrementuje čítač operací, který je globální proměnnou Porovnání vlastností dvou algoritmů na konkrétních datech. Porovnání vlastností algoritmu pro různá data Najednou můžeme sledovat počty různých operací (porovnání, přiřazení, sčítání, …) Nenahrazuje asymptotickou složitost

Jan LánskýÚvod do programování 5. hodina26 Měření počtu operací Globální proměnnou musím vynulovat mezi jednotlivými měřeními Funkce, která měří počet operací Využití funkce

Jan LánskýÚvod do programování 5. hodina27 Měření doby běhu programu Analogické použití jako v případě měření počtu operací. Výsledek v ms nebo tikách procesoru Výsledek může být ovlivněn vnějšími vlivy Př.: Jiné běžící procesy, obsah cash pamětí Opakovat měření vícekrát Měřit na čisté instalaci OS Nenahrazuje asymptotickou složitost

Jan LánskýÚvod do programování 5. hodina28 Stopwatch using System.Diagnostics Stopwatch Start – začne měřit čas Stop – ukončí měření Reset - vynuluje ElapsedTicks – tiky procesoru ElapsedMilliseconds - miliseknudy

Jan LánskýÚvod do programování 5. hodina29 Stopwatch Přidat Systém.Diagnostics Nové stopky V druhém zavolání jsme rychlejší 6 vs tiků, (tj. cca 0,1 ms) Důvod: cashe Řešení: ignorovat první měření

Jan LánskýÚvod do programování 5. hodina30 Zpětná vazba Objevili jste ve slajdech chyby? Včetně pravopisných Nechápete nějaký slajd? Je příliš obtížný, nesrozumitelný? Máte nějaký nápad na vylepšení? Anonymní formulář Odeslání za pár vteřin