Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Skripta Výpočetní systémy III Praha 2000

Podobné prezentace


Prezentace na téma: "Skripta Výpočetní systémy III Praha 2000"— Transkript prezentace:

1 Skripta Výpočetní systémy III Praha 2000
Algoritmy a programy Skripta Výpočetní systémy III Praha 2000

2 Jak automatizovat výpočet?
ALGORITMUS 1. Stanovit (rozmyslet) přesně předem postup 2. Během opakovaného provádění postupu již nepřemýšlet a postupovat mechanicky. přesná definice vyžaduje sestavit matematický model počítače (výpočtu) – Konečný automat, zásobníkový automat, Turingův stroj, … Výpočetní systémy I - přednáška č.5

3 Nejobtížněji je ověřitelná resultativnost postupu
„Naivní“ (nepřesná) definice (nepužitelná pro přesné matematické důkazy) Přesně popsaný POSTUP s vlastnostmi: Diskrétní = složený z jednotlivých jednoduchých kroků Deterministický (určitý) = po každém kroku je jasné, který krok následuje nebo zda se končí Resultativní (finitní, konečný) = po provedení konečného počtu kroků musí postup končit Hromadný = použitelný pro celou třídu úloh (různá vstupní data) Správný = výsledek splňuje dané podmínky Nejobtížněji je ověřitelná resultativnost postupu Výpočetní systémy I - přednáška č.5

4 algoritmus zapsaný formálně, srozumitelně pro počítač
Program = algoritmus zapsaný formálně, srozumitelně pro počítač Jednotlivé elementární kroky mohou být: Instrukce operačního kódu počítače Příkazy nějakého programovacího jazyka Již hotové úseky kódu nebo podprogramy

5 ? NE Lze každý problém řešit algoritmem?
Existuji principiálně algoritmicky neřešitelné problémy U jiných problémů algoritmus neznáme Lze o daném postupu vždy rozhodnout, zda je algoritmem? V některých případech neumíme ověřit, zda je postup resultativní (konečný). Konečnost nelze ověřit algoritmicky

6 Pokud algoritmus známe, je již již „vyhráno“?
NE Algoritmus může vyžadovat tak velké množství kroků, že i na velmi rychlém počítači je nereálné jej provést v přijatelném čase (časová složitost) Algoritmus může vyžadovat neúnosně mnoho paměťových míst (prostorová složitost) Algoritmus může pracovat se zaokrouhlovacími chybami tak „nešťastně“, že pohltí platné cifry (numerická nestabilita)

7 Jak ověřit algoritmus? Důkaz korektnosti:
Parciální (částečná) korektnost: Pokud vstupy splňují nějakou podmínku, musí vstupy spolu s výstupy splňovat nějakou podmínku. Zachování této podmínky se sleduje krok po kroku během provádění algoritmu Resultativnost: Ověří se, že postup někdy skončí. Zpravidla tak, že neexistují nekonečné klesající posloupnosti přirozených čísel. Obecný návod k ověření neexistuje.

8 Testování na zkušebních datech
Ověří vždy pouze nesprávnost algoritmu (pro vyvrácení správnosti stačí jediný protipříklad) Nikdy nelze testováním na zkušebních datech plně prověřit správnost. Vždy lze jen snížit pravděpodobnost chyb Testovací data je třeba volit vhodně (projít všechny cesty v programu aspoň jednou verzí vstupních dat, brát hodnoty blízké mezí přípustnosti, …)

9 Jak znázornit graficky algoritmus?
Univerzální, avšak ne bezproblémový prostředek: VÝVOJOVÉ DIAGRAMY (někdy též bloková schémata, grafy řízení) Znázorňují časový postup provádění kroků algoritmu pomocí orientovaného grafu s jediným výchozím uzlem (začátek postupu) a jediným koncovým uzlem (konec postupu). Jednotlivé uzly (bloky)jsou spojeny šipkami (orientované hrany grafu)

10 Typy uzlů ve vývojových diagramech

11 Rozhodovacích bloků je vždy stejný počet jako slučovacích bloků
Někdy se výkonné bloky nezakreslují. Příslušnou výkonnou akci representuje pouze hrana grafu Nejjednodušší grafy řízení mají 0 nebo 1 rozhodování

12 TYP UZLU graf počet indg outdg Počátek 1 Konec Výkonný n Rozhodovací
Konec Výkonný n Rozhodovací (predikátový) m 2 Slučovací z k

13 Podmínka korektnosti grafu řízení
Každý uzel musí ležet aspoň na jedné cestě od počátečního uzlu k uzlu koncovému (musí být dosažitelný) Vývojové diagramy lze sestavit i velmi komplikované a mimořádně obtížně srozumitelné. To je jejich hlavní nebezpečí a nevýhoda!!

14 Algoritmy je třeba navrhovat a realizovat co nejjednodušší
Důvody: Méně chyb Snadná srozumitelnost pro ostatní a tím i snadné provádění změn (údržby z důvodu oprav chyb, změny prostředí, rozšiřování funkcí) Obvykle i rychlejší program a méně nároků na paměť

15 Principy strukturovaného programování
Hierarchický rozklad složité úlohy na jednodušší (postup shora dolů – „top-down“) – v případě potřeby v několika – mnoha úrovních) Při rozkladu složitější úlohy na jednodušší je možné používat pouze následující konstrukce: sekvence = řazení akcí za sebou selekce (výběr) = rozhodnutí podle podmínky zda jedna nebo druhá akce (if P then A else B) iterace (opakování = cyklus) opakování dané činnosti, dokud je splněna nějaká podmínka (while P do A) nebo dokud daná podmínka nenastane (repeat A while Q) Jiné způsoby rozkladu složité úlohy na jednodušší přípustné nejsou

16 DEFINICE STRUKTUROVANÉHO ALGORITMU (rekurzivní)
Každý jednoduchý krok je strukturovaný algoritmus Sekvence dvou strukturovaných algoritmů je strukturovaný algoritmus Selekce dvou strukturovaných algoritmů je strukturovaný algoritmus Iterace strukturovaného algoritmu je strukturovaný algoritmus Jiné algoritmy než ty, které mohou vzniknout užitím bodů 1., 2., 3. a 4. již strukturované nejsou (průnik všech tříd algoritmů splňujících 1.,2.,3.,4.)

17 ? Lze každý problém, která umíme řešit nějakým algoritmem řešit i strukturovaným algoritmem? ANO Dokonce se nic podstatného neztratí. Lze dokázat, že toho lze vždy dosáhnout přidáním jediné pomocné proměnné. Strukturovaný algoritmus (program) je přehlednější, jednodušší a obvykle i efektivnější. Zkušený a odpovědný programátor navrhuje algoritmy a programy strukturovaně

18 Čeho se vyvarovat – příklad nestrukturované konstrukce

19 Nestrukturovaná konstrukce, kterou lze jako jedinou připustit – předčasný výskok z cyklu (tak zvané dobře navržené algoritmy - BJ programy)

20 Strukturogramy (struktogramy)

21 +nelze sestavit nestrukturovaný algoritmus,
Výhody a nevýhody strukturogramů oproti vývojovým diagramům +nelze sestavit nestrukturovaný algoritmus, lze postupně zjemňovat návrh, lze pojmenovávat celky, lze se vždy soustředit na jednoduchou úvahu (jednu úroveň) lze algoritmus odvozovat ze strukturu dat - způsob zakreslování není normalizován, spojnice nezaznamenají časovou následnost, ale rozklad úlohy (to může být nenázorné a nezvyklé) Snaha zachovat výhody a minimalizovat nevýhody vede ke plošným strukturogramům

22 Sekvence v plošném strukturogramu
Akce 1 Akce 2

23 Selekce v plošném strukturogramu
podmínka ANO NE Akce Akce 2

24 Iterace s akcí ve zpětné větvi (do while) v plošném strukturogramu
Podmínka opakování Akce Akce

25 Iterace a akcí v dopředné větvi (repeat until) v plošném strukturogramu
podmínka opakování Akce

26 Jak algoritmus navrhnout?
Příklad Úkol: Je dáno pole celých čísel dané délky N. Každé číslo je uloženo v jednom slově. Slova jsou adresovatelná. Adresa prvého prvku pole je A. Vypočtěte součet těchto čísel a uložte jej na adresu S (případně jej zobrazte).  Úvaha: Pole bude identifikováno indexem od 1 do N. P bude adresa předcházející prvému prvku P = A – 1, takže prvek P[i], kde i je pořadové číslo prvku v poli, získáme modifikací P obsahem indexregistru IND v kterém bude i.

27 Princip řešení – algoritmus odpovídá vždy datům
Přípravná fáze: Vynulujeme střadač, v kterém se bude součet hromadit. Nastavíme indexregistr na hodnotu 1 Vlastní zpracování (tělo algoritmu): Poli v datech odpovídá cyklus (iterace) v programu, iterace začíná pro prvý prvek pole, končí zpracováním posledního. Po zpracování každého prvku je nutné zvýšit index o jedničku Závěr: Střadač je třeba uložit, případně zobrazit Možné modifikace algoritmu: Začínat indexem N, končit indexem 1. To umožňuje zkrátit kód, je-li k dispozici instrukce snížení indexregistru o 1, spojená se skokem Instrukce LOOP

28 Modifikace úlohy Není předem známa délka pole. Pole končí až koncovou značkou (reservovaný symbol EOF, nepřípustná hodnota dat). Data kromě toho mohou být na vnější paměti. Místo zvětšení indexu máme pak k dispozici příkaz čti číslo. Problém s úpravou algoritmu tkví v tom, že před přečtením záznamu nevíme, zda to bude platný záznam nebo koncová značka. Proto: Zásada čtení s předstihem (do zásoby): Prvý záznam přečti před začátkem zpracování souboru (v přípravné fázi). Další záznam vždy okamžitě poté, co zpracování předchozího záznamu skončilo a již jej nepotřebujeme.

29 Z hodnot v daném poli či proudu
Výběr maxima (minima) Z hodnot v daném poli či proudu Algoritmus je podobný Možnost: Do pomocné adresy kandidát dáme během přípravné fáze prvý (či poslední) prvek v poli. Cyklus zkrátíme o jeden krok. V každém kroku porovnáváme právě vyšetřovaný prvek s kandidátem. Je-li větší, provedeme výměnu. Možnost: V přípravě dáme na adresu kandidát hodnotu, která „určitě nevyhraje“. Cyklus provádíme přes celé pole. Možné modifikace úlohy: Nejen vítěz, ale prvé dva, tři, … Je-li téže hodnoty dosaženo vícekrát, všechna její umístění

30 Jiná úloha – logická struktura zpracovávaných dat je složitější, strukturu zpracování z ní lze však snadno odvodit Zadání: Je dán text, připravený v textovém editoru. Na začátku jsou řídicí znaky. Vlastní text začíná písmenem. V textu jsou písmenka a oddělovače (mezery, znaky přechodu na nový řádek, novou stránku, tabelátory …). Vše končí zarážkou – koncovým znakem. Určete délku textu pro výpočet honoráře (AA). Pro ni se počítá jakkoliv dlouhá skupina oddě-lovačů, které následují bezprostředně za sebou, jako jediný znak. Vypočtěte dále celkový počet slov v textu a průměrný počet znaků ve slově.

31 Jaká je struktura dat této úlohy?
1. Úroveň: Řídicí znaky na začátku (ty budeme muset v pří-pravě přeskočit). Pak následuje vlastní text (záznam  sekvence). Na závěr výpočet průměru, zobrazení výsledků. 2. Úroveň: Opakuje se vždy skupina: slovo a poté mezery, které následují. Tak dlouho, dokud nepřijde koncový znak. (proud – pole či soubor v datech  iterace –cyklus). 3. Úroveň: Ve skupině je vždy slovo, následované skupinou mezer (záznam  sekvence v programu). 4. Úroveň: Obě skupiny jsou proudy. Slovo je opakování „písmen“, skupina mezer je opakováním oddělovačů. Z toho již snadno získáme strukturu algoritmu. Je shodná se strukturou dat. Na závěr průměry a zobrazení. Kde se budou zvětšovat počítadla započítávaných znaků? Kde zvětšovat počítadla slov? Jak ošetřit podmínky cyklů (nezapomenout na možnost EOF hned za slovem!)? Jak se změní úvaha, pokud budeme chtít počítat i věty (pro zjednodušení pomocí počtu teček v textu)?


Stáhnout ppt "Skripta Výpočetní systémy III Praha 2000"

Podobné prezentace


Reklamy Google