1 / 28

Algoritmy a datové struktury

Algoritmy a datové struktury. Úvodní slovo. Obsah přednášky. Seznámení s předmětem Algoritmus. Kdo je kdo. Ladislav Beránek beranek@pf.jcu.cz J 510 Při komunikaci uvádějte do e-mailu předmět ve tvaru: [ADS1] +důvod. Plán semestru. 1. Algoritmus 2. Složitosti algoritmu

ninon
Download Presentation

Algoritmy a datové struktury

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmy a datové struktury Úvodní slovo

  2. Obsah přednášky • Seznámení s předmětem • Algoritmus

  3. Kdo je kdo • Ladislav Beránek • beranek@pf.jcu.cz • J 510 • Při komunikaci uvádějte do e-mailu předmět ve tvaru: • [ADS1] +důvod

  4. Plán semestru 1. Algoritmus 2. Složitosti algoritmu 3. Metody návrhu algoritmu 4. Abstraktní datové typy 5. Spojové seznamy 1. 6. Spojové seznamy 2. 7. Třídění - základ 8. Třídění Quicksort 9. Rychlá třídění 10. Stromy + BST 11. AVL + Red-Black 12. B stromy

  5. Požadavky na zápocet • Dle pokynů cvičící

  6. Doporučená literatura • Moodle předmětu - ADS • Literatura: • např. R. Sedgewick: Algoritmy v C/Javě • P. Wroblewski: Algoritmy

  7. Pojem algoritmus • Algoritmus • Všeobecná pravidla určující transformaci vstupních dat na výstupní • Návod, který určuje postup vedoucí k řešení dané úlohy • Posloupnost kroku vedoucích k řešení dané úlohy • Např. recept – transformuje mouku, vodu, vajíčka na palačinky • Program • Realizace algoritmu

  8. Základní vlastnosti algoritmu • Hromadnost • Algoritmus je použitelný na libovolné vstupní údaje splňující • požadované podmínky • Algoritmus neřeší jeden konkrétní problém, ale obecnou třídu • obdobných problému • Např. nikoliv výpočet 2x8, ale součin dvou celých čísel • Determinismus • Každý krok algoritmu musí být jednoznačný a přesně definovaný • Algoritmus nesmí být závislý na prostředí, ve kterém je realizován • Rezultativnost • V konečném poctu kroku musí algoritmus vrátit výsledek

  9. Vytváření algoritmu • Návrh algoritmu je tvořivý proces (nelze automatizovat) • Neexistuje všeobecný návod • Existují známé strategie a paradigmata pro návrh algoritmu

  10. Postup při vytváření algoritmu 1. Formulace problému 2. Stanovení cílu 3. Volba strategie 4. Navržení postupu 5. Zápis vytvořených postupu 6. Ověření správnosti • Definice vstupních dat • Definice výstupních dat

  11. Všeobecné strategie • Dekompozice – rozdělení problému na podproblémy, které jsou z určitého hlediska jednodušší • Abstrakce – zanedbání a/nebo ukrytí detailu

  12. Způsob zápisu algoritmu Přirozeným jazykem + Čitelnost + Srozumitelnost - Dlouhý zápis - Nízká přehlednost - Nejednoznačnost Příklad: Nalezení největšího čísla v posloupnosti. Vstupem je posloupnost čísel, výstupem je největší číslo v dané posloupnosti. Do pomocného prvku uložíme první číslo posloupnosti. Postupně procházíme jednotlivá čísla v posloupnosti a pokud je hodnota právě zkoumaného čísla vetší než hodnota v pomocném prvku, uložíme hodnotu právě zkoumaného čísla do pomocného prvku. Pomocný prvek obsahuje největší číslo v posloupnosti

  13. Způsob zápisu algoritmu Přirozeným jazykem (strukturovaně) + Citelnost + Srozumitelnost - Nejednoznačnost Příklad: Vstup: posloupnost čísel Výstup: největší číslo v posloupnosti 1. Do pomocné proměnné uložit první číslo posloupnosti 2. Postupně procházet jednotlivá čísla posloupnosti 2.1 Jestliže je aktuální číslo vetší než pomocná proměnná, pak uložit aktuální číslo do pomocné proměnné 3. Pomocná proměnná obsahuje největší číslo posloupnosti

  14. Způsob zápisu algoritmu Pseudokód + Jednoznačnost - Nesrozumitelnost Příklad: Vstup: posloupnost čísel P Výstup: největší číslo NEJ v posloupnosti P NEJ <- P[0] pro všechna čísla C z P dělej jestliže C > NEJ pak NEJ <- C vrat NEJ

  15. Způsob zápisu algoritmu Konkrétní jazyk + Jednoznačnost - Nemusí být obecný - Dlouhý zápis Příklad: // Vstup : posloupnost čísel P // Výstup : největší číslo NEJ v posloupnosti P NEJ = P [0]; foreach (C in P) { if(C>NEJ) NEJ = C; } return NEJ;

  16. Způsob zápisu algoritmu Vývojový diagram + Jednoznačný - Zápis Příklad

  17. Klasifikace algoritmu podle implementace Rekurzivní/iterační - rekurzivní algoritmus volá sám sebe dokud není dosažena ukončovací podmínka Iterativní algoritmus používá opakující se konstrukce (cykly) Některé problémy lze jednoduše řešit rekurzí, jiné iteračně Stromecek (délka , úhel ) { Kresli (délka , úhel ); Stromecek ( délka /2, úhel +45); Stromecek ( délka /2, úhel -45); }

  18. Klasifikace algoritmu podle implementace Sériové/paralelní využívají výhody paralelního zpracování ne vždy lze převádět sériový algoritmus na paralelní ne vždy je výhodné převádět sériový algoritmus na paralelní

  19. Klasifikace algoritmu podle implementace Deterministické/náhodné deterministické algoritmy vracejí pro stejný vstup vždy stejný výsledek náhodné algoritmy prohledávají náhodně prostor až dosáhnou přijatelné řešení Např. nalezení znaku ’a’ v poli s 50% znaku ’a’ a 50% znaku ’b’

  20. Klasifikace algoritmu podle implementace Přesné/přibližné hledají přesné nebo přibližné řešení problému u numerických výpočtů nelze určit přesné řešení kvůli konečné aritmetice u grafových problému nelze určit přesné řešení kvůli složitosti problému např. hledání kořene rovnice Pokud existuje analytické řešení – přesný výsledek (kořen kvadratické rovnice) Jinak nutno použít numerickou metodu (např. půlení intervalu)

  21. Klasifikace algoritmu podle použitého paradigmata Rozděl a panuj (Divide and conquer) opakovaně redukovat problém na jeden či více menších problému dokud nelze jednoduše vyřešit dělení většinou probíhá rekurzivně např. mergesort – ve více lidech abecedně setřídit knihy

  22. Klasifikace algoritmu podle použitého paradigmata Sniž a panuj (Decrease and conquer) jednoduší verze rozděl a panuj lze použít v případě, že vyřešení malé části je současně i řešením celku např. hledání půlením intervalu – hledání v telefonním seznamu

  23. Klasifikace algoritmu podle použitého paradigmata Žravé metody (Greedy methods) • v každém kroku se vybírá možnost, která se jeví nejlepší • hledá lokální optimum • nevrací se zpět • když funguje, bývá nejrychlejší • např. Kruskaluv algoritmus pro minimální kostru grafu

  24. Klasifikace algoritmu podle použitého paradigmata Redukce • převádí problém na jiný problém, jehož řešení je známé a není příliš náročné • např. hledání mediánu v nesetříděném poli lze transformovat na problém řazení pole a výběru prostředního prvku v setříděném poli.

  25. Klasifikace algoritmu podle použitého paradigmata Dynamické programování • při řešení problému se postupuje přes řešením série podproblému, atd. • řešení podproblému se ukládají do tabulky, aby se předešlo opakovaným výpočtům • podproblémy se překrývají • např. výpočet hodnot Pascalova trojúhelníku

  26. Klasifikace algoritmu podle použitého paradigmata Heuristické algoritmy • na základe heuristiky prohledávají prostor řešení • většinou nevracejí přesné řešení, ale pouze aproximaci, protože přesné řešení není možné najít v rozumném čase • např. hledání globálního extrému funkce bez omezení intervalu metodou simulovaného žíhání • prozkoumává blízké okolí dosavadního řešení a s pravděpodobností T (teplota) přijímá i horší řešení • I na rozdíl od žravých heuristik se metoda dostane i z lokálních extrému

  27. Klasifikace algoritmu podle složitosti K některým problémům existuje hned několik řešení • některá z nich se pro rostoucí velikost vstupní množiny stávají nepoužitelná, jiná pracují rychle • pro udávání rychlosti algoritmu nemá cenu uvádět časový údaj – pro každý počítač je jiný • složitost algoritmu ukazuje trend růstu času/paměti s rostoucí vstupní množinou

  28. Konec

More Related