Algoritmizace a datové struktury (14ASD) 3. cvičení
Algoritmus Definice Jedná se o posloupnost elementárních kroků Návod jak provést určitou činnost Přesný návod či postup, kterým lze vyřešit daný typ úlohy … Transformace vstupních dat na výstupní data Vstupy mají definované množiny hodnot, jichž mohou nabývat Algoritmus je procedura proveditelná Turingovým strojem teoretický model počítače popsaný matematikem Alanem Turingem Jedná se o posloupnost elementárních kroků Jak si jej jednoduše představit: postup pro výpočet obvodu kruhu kuchařka: recepty postup jak převést číslo ze z-adické soustavy do jiné
Vlastnosti algoritmů Elementární Deterministický Konečný Resultativní Skládá se z konečného počtu jednoduchých činností (kroky) Deterministický Po každém kroku můžeme určit zda skončil nebo v jakém kroku budeme pokračovat Konečný Musí skončit po konečném počtu kroků Resultativní Vede k výsledku Hromadný (obecný) Můžeme použít k řešení celé skupiny podobných úloh Efektivní Vede k řešení v optimálním čase - rychlost
Metody řešení algoritmů Shora dolů Postup řešení rozkládáme na jednodušší operace, až dospějeme k elementárním krokům Příkladem je kvadratická rovnice Vypočti diskriminant Podle něj rozhodneme, zda-li máme Jedno řešení Dvě řešení Dvě komplexní řešení Zdola nahoru Skupiny elementárních operací chápeme jako nové elementární kroky Postupně z elementárních kroků vytváříme prostředky, které nakonec umožní zvládnout požadovaný problém
Časová a paměťová náročnost Samotné vyřešení úlohy ještě neznamená spokojenost Často se dá úloha řešit jednodušeji (efektivněji) Musíme použít optimalizaci? Náročnost pro počítač Při komplikovanější úloze můžeme dlouho čekat na výsledek (procesor má příliš mnoho instrukcí) Časová náročnost tedy zjednodušeně může být úměrná počtu elementů, které umístíme do algoritmu Potom co nemůžeme ovlivnit: počet vstupních dat (ale…) Příklad Výpočet absolutní hodnoty zabere 3takty procesoru sin(x) nám zabere 291taktů Není to moc, ale pokud budeme kombinovat mnoho funkcí…
Základní symboly vývojového diagramu
robot Karel - pomůcka (shrnutí) Karel – elementární operace Krok – posun o jedno políčko dopředu VlevoBok – natočení o 90° vlevo Polož – položení jedné cihly na aktuální políčko Zvedni – zvednutí jedné cihly z aktuálního políčka Karel – základní podmínky JeCihla – podmínka je pravdivá, pokud Karel stojí na políčku s minimálně jednou cihlou JeSever – podmínka je pravdivá, pokud je Karel otočen k severu (nahoru) JeZeď – podmínka je pravdivá, pokud před Karlem je zeď (při provedení příkazu Krok by do ní narazil)
Nekonečný cyklus
ObejdiMístnostDokolaZrohu – Karel stojí v libovolném rohu místnosti natočený zády ke stěně. Karel má obejít místnost buď ve směru nebo proti směru hodinových ručiček, podle toho, jak je na začátku natočen. proti směru po směru
ObejdiMistnostDokola – Karel má podél zdi obejít celou místnost dokola proti směru hodinových ručiček. Výchozí pozice je neznámá, stejně tak i směr natočení. Karel má na každé políčko u zdi stoupnout minimálně jednou. zjednodušující pravidlo – na začátku Karel může „chvíli“ jít podél zdi i po směru hodinových ručiček Z V
ObejdiMistnostDokola – efektivněji (stále proti směru hodinových ručiček) Snahou je, aby Karel zbytečně nevstoupil na políčka vícekrát. Nápověda – využijte cihlu (cihly) jako "zarážku„, na počátku je místnost bez cihel. Karel vstoupí pouze na jedno políčko u zdi dvakrát, na ostatní pouze jednou. Z V
Právě5CihelVeVšechRozích – Karel projde všechna políčka v rozích místnosti a naskládá na ně tolik cihel, aby po ukončení algoritmu ve všech rozích bylo přesně 5 cihel. Na počátku nevíme, kde robot stojí a jakým směrem se dívá. Na počátku v místnosti mohou být KDEKOLIV cihly v RŮZNÉM počtu.