Ukázka odstranění rekurze Přemysl Tišer

Slides:



Advertisements
Podobné prezentace
Stavový prostor. • Existují úlohy, pro které není k dispozici univerzální algoritmus řešení • různé hry • problém batohu, problém obchodního cestujícího.
Advertisements

Programování v C jazyku - SEMINÁŘ
Funkce Připomeňme si program pro výpočet faktoriálu:
Programovací jazyk C++
Dynamické programování Programovací technika pro řešení takových optimalizačních úloh, u nichž platí, že úloha se dá rozložit na menší podúlohy, z jejichž.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Editace vzorů aplikace APSTR
J a v a Začínáme programovat Lucie Žoltá Přetěžování metod, rekurze.
Morfologická křivka kmene
ALGORITMIZACE ÚVODNÍ PŘEDNÁŠKA 2 SLOVO ALGORITMUS VZNIKLO ZE JMÉNA ARABSKÉHO MATEMATIKA AL-KHWARIZMIHO, KTERÝ V DEVÁTÉM STOLETÍ SEPSAL ROZSÁHLOU KOLEKCI.
Algoritmizace a programování
Algoritmizace.
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Informatika I 2. přednáška
Algoritmizace a základy programování
Algoritmy a programovací techniky
Sémantická analýza Jakub Yaghob
Syntaxí řízený překlad
Algoritmy vyhledávání a řazení
Algoritmizace a programování Třídící algoritmy - 12
Časová složitost algoritmů
Počítače a programování 1
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Sorty Bubble, Insert a Quick
Aplikační počítačové prostředky X15APP MATLAB Katedra elektroenergetiky, Fakulta elektrotechniky ČVUT, Technická 2, Praha 6 Ing. Zbyněk Brettschneider.
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
Rozklad problému na podproblémy, rekurze
doc. RNDr. Zdeněk Botek, CSc.
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
C – procedury Mgr. Lenka Švancarová.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Rekurze. volání podprogramu opětovně v jeho těle –v době, kdy předchozí volání ještě nebylo ukončeno Druhy rekurze přímá rekurze nepřímá rekurze.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
ALGO – Algoritmizace 7. cvičení – ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
PŘÍKAZ do - while úkol 1_43.
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné.
Algoritmizace a programování Algoritmy 1 - Úvod. Základní pojmy Počítačový program Počítačový program zápis zdrojového kódu, kterému rozumí počítač zápis.
Datové sklady (DWH) VOJTĚCH VYCHODIL, MICHAL VACHLER, PAVEL FIALA BRNO 2015.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Složitost algoritmu Vybrané problémy: Při analýze složitosti jednotlivých algoritmů často narazíme na problém, jakým způsobem vzít v úvahu velikost vstupu.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Počítače a programování 2
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Základní pojmy v automatizační technice
Výukový materiál zpracován v rámci projektu
Rekurze.
Programovací jazyk C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Mgr. et Mgr. Pavel Římovský, Bc. Jaroslav Mudrák
Rekurze.
Programování v jazyce C++
PROLOG strategie vyhodnocení dotazu
Abstraktní datové typy
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Výukový materiál zpracován v rámci projektu
Oblast platnosti identifikátoru (1)
ALG 07 Selection sort (Select sort) Insertion sort (Insert sort)
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Název školy: Základní škola a mateřská škola Dolní Bojanovice, okres Hodonín příspěvková organizace Číslo projektu: CZ.1.07/1.4.00/ Označení materiálu:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Funkce s proměnným počtem parametrů
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

Ukázka odstranění rekurze Přemysl Tišer Ackermannova funkce Ukázka odstranění rekurze Přemysl Tišer

Definice A(0,n)=n+1 A(m,0)=A(m-1,1) A(m,n)=A(m-1,A(m,n-1)) v ostatních případech

Návrh shora dolů Zdánlivě jednoduchá rekurzivní definice vede na jednoduchý rekurzivní algoritmus: public static int ackRek(int m, int n) { if (m==0) return n+1; // programátorská hrůza if (n==0) return ackRek(m-1,1); return ackRek(m-1, ackRek(m, n-1)); }

Problémy s rekurzí Každé volání funkce téměř vždy znamená další dvě volání Možnosti počítače se vyčerpají již při nízkých hodnotách m,n Počet volání roste zhruba jako 4n, což pro n=8 dává 2785999 Pozn.: Pro A(4,1) program skončil přetečením zásobníku

Odstranění rekurze I Na začátku funkce definujeme zásobník pro ukládání parametrů Použijeme jeden cyklus pro vkládání parametrů, druhý pro odebírání parametrů, pro které již byla Ackermannova funkce spočítána Oba cykly se budou podle potřeby střídat

Odstranění rekurze II Na vrchol zásobníku vždy uložíme hodnoty m, n, pro které budeme potřebovat provést výpočet Po zpracování vrcholu zásobníku, parametry na tomto vrcholu odebereme Jakmile se vrátíme na první vložený záznam, spočítáme výsledek funkce a skončíme

Odstranění rekurze III Hodnotu n, kterou bude teprve potřeba spočítat, budeme reprezentovat číslem -1, které bude po provedení výpočtu nahrazeno správnou hodnotou

Algoritmus I Konkrétní řešení lze nalézt v přiloženém kódu ackRek používá rekurzi ackermann využívá výše popsaný způsob Uvedený algoritmus je pouze polotovar, lze vylepšit tak, aby zbytečně neukládal na zásobník parametry m,n, pro které je již Ackermannova funkce spočítána. Takto je ponechá pro větší názornost.

Algoritmus II Jako zásobník používám z lenosti ;o) dvě pole mZas a nZas, pro ukládání výsledků dvourozměrné pole pomTab. Použitá literatura: Miroslav Virius: Základy algoritmizace, skriptum ČVUT