GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.

Slides:



Advertisements
Lignende præsentationer
Reglernes del 2: Når både mødes
Advertisements

1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Formularer (Access, del 3)
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
1 Rekursion og algoritmedesign. 2 Rekursion Rekursiv definition af X: X defineres i termer af sig selv. Rekursion er nyttig, når en generel version af.
Symbolsk maskinsprog.
GP 4, 19/ Grundlæggende programmering Efterår 2001 Forelæsning 4 onsdag 19/ kl. 9:15 – 12:00.
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 9 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
Rekursion og rekursive algoritmer Rekursion Sorteringsalgoritmer Forklaring af sorteringsalgoritmer Rasmus D. Lehrmann1.
Intro Variabler - datatyper. 2. forelæsning Hvad skete sidste gang Hvad er PHP? Kursussammensætning: læse – newsgroup – forelæsning – øvelsestime – aflevering.
Rapporter (Access, del 5)
Datastruktur & Algoritmik1 Datastruktur & Algoritmik 99 Kim Guldstrand Larsen.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
Økonometri 1: Dummy variable
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
DET GYLDNE SNIT OG PENROSEFLISER
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
Induktion og rekursion
GP12, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 12 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
1 Datalogi C Datastrukturer og algoritmer ved Keld Helsgaun.
2. gradsfunktioner.
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Anvendelser I Leg og spil.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel 2.3, , problem 30.1.c] Gerth Stølting Brodal.
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
1 Rekursion og algoritmedesign. 2 Rekursion Matematisk induktion Rekursion Simple eksempler Kryptering Plan Designmetoder Del-og-hersk Dynamisk programmering.
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Per P. Madsen- Proces1 Algoritmer og datastrukturer Grundprincipper og analyse af algoritmer. MM1 Lister, stakke og køer. MM2 Træer, og Hash-tabeller.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
Introduktion til Access (Access, del 1). RHS – Informationsteknologi – Fra design til udvikling Vi ved nu, hvordan vi finder et design for en database,
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Algoritmer og Datastrukturer 1 Quicksort [CLRS, kapitel 7] Gerth Stølting Brodal.
Økonometri 1: Den multiple regressionsmodel1 Økonometri 1 Den multiple regressionsmodel 24. februar 2003.
GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
GP 4, 27/ Grundlæggende programmering Forår 2002 Forelæsning 4 onsdag 27/ kl. 9:15 – 12:00.
Grundlæggende programmering Forår 2002
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
GP9, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 11 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
Rekursion 2.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.2 Introduktion Vi har tidligere set eksempler på rekursive.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
I o p o DAIMI, AU, November 1999Introducerende objektorienteret programmering9D.1 Del, løs og kombinér.
Del, løs og kombinér Et algoritmemønster.
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 2
Algoritmer og Datastrukturer 2
Grundlæggende Algoritmer og Datastrukturer
Præsentationens transcript:

GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder Martin Lillholm

GP10, Martin Lillholm 2 Sidste gang Graphical User Interfaces (GUI) Projekter med relevans for GP – nu på hjemmesiden

GP10, Martin Lillholm 3 Denne gang Det sidste af GUI Rekursion

GP10, Martin Lillholm 4 Rekursion Nudansk ordbog: I matematik, sprogvidenskab og edb: fremgangsmåde ved definition eller beregning, som består i, at man gentagne gange anvender en og samme simple regel. Andre vil måske sige at rekursion er En definition der benytter begrebet der defineres i definitionen Nogen vil måske foretrækker noget i stil med: Rekursion... se rekursion (indtil du har forstået...) Rekursion benyttes når begreber defineres rekursivt

GP10, Martin Lillholm 5 Rekursiv tankegang – et eksempel En liste af (mindst et) tal kunne defineres ”normalt” som: List: Et eller flere tal adskilt af komma Eller rekursivt som: List: Et tal eller Et tal komma List Eksempler: , 12, , 34, 234,234,3, 5 Tavleillustration, uendelig rekursion (uendelig løkke) og basis tilfælde

GP10, Martin Lillholm 6 Rekursiv tankegang (matematisk set) Funktionen n!, der udtales n fakultet, beregner antallet af rækkefølger (permutationer) af n ting. F.eks. kan 3 personer sættes på en bænk i forskellige måder. Fakultetsfunktionen n! kan defineres ”normalt” som: Men kan også defineres rekursivt som: Tavleillustration, uendelig rekursion og basis tilfælde

GP10, Martin Lillholm 7 Rekursiv programmering En metode i Java kan kalde sig selv og dermed opnås rekursion En rekursiv metode er typisk delt op i: –Et basis tilfælde (rekursionen stopper) –De(t) rekursive kald til metoden selv eller Som altid: –Ethvert (rekursivt) metodekald giver anledning til nyt virkefelt med nye parametre og lokale variable – en ”ny” udgave af metoden –Når et metodekald afsluttes returneres til den kaldende metode – altså i tilfældet rekursion ofte til ”metoden selv” Direkte og indirekte rekursion

GP10, Martin Lillholm 8 Fakultetsfunktionen i Java int rfak(int n) { // Rekursiv fakultetsfunktion if (n == 0) return 1; // Basis tilfælde else return n * rfak(n - 1); // Rekursivt kald } int ifak(int n) { // Iterativ fakultetsfunktion int resultat = 1; for (int i=n; i >= 1; i=i-1) resultat = resultat * i; return resultat; } Side 580 i L&L for sum

GP10, Martin Lillholm 9 Og så den lidt syrede forklaring Den om manden og hans klon-maskine …

GP10, Martin Lillholm 10 Rekursion vs. iteration Alle problemer kan løses både iterativt og rekursivt. Rekursion er en anden måde at tænke på – men ækvivalent. Rekursive løsninger er ofte elegante på papiret Men... –Er langsommere pga. de mange metodekald –Kræver mere lager –Kan nemt ”løbe løbsk” Til gengæld... –Findes der problemer, der er egner sig rigtig godt til rekursion –Og faktisk er temmelig besværlige at løses iterativt uden hjælpedatastrukturer

GP10, Martin Lillholm 11 Tårnene i Hanoi – elegant rekursion Berømt ”spil” fra 1880’erne (Edouard Lucas) Alle skiver skal flyttes fra tårn A til tårn C. Kun en skive må flyttes af gangen En større skive må aldrig ligge oven på en mindre skive ABC

GP10, Martin Lillholm 12 Tårnene i Hanoi – eksempel StartopstillingTræk 1Træk 3Træk 2

GP10, Martin Lillholm 13 Tårnene i Hanoi – eksempel Træk 4Træk 5Træk 6Træk 7 (slut)

GP10, Martin Lillholm 14 Tårnene i Hanoi – rekursiv algoritme Flyt en stak af n skiver fra tårn A til tårn B med tårn C til hjælp: 1.Flyt de øverste n-1 skiver til ektrapinden 2.Flyt den nederste skive til destinationspinden 3.Flyt de n-1 skiver fra ekstrapinden til destinationspinden Men hvordan løser vi 1 for de n-1 skiver – rekursion. Hvordan ville vi løse dette iterativt ?

GP10, Martin Lillholm 15 Tårnene i Hanoi –SolveTowers.java side 590 i L&L i BlueJ Dog med et par twists – se en af dagens opgaver Grundideen i rekursion er altså at løse et problem ved gentagne gange at løse simplere delproblemer af samme slags Virker kun hvis delproblemerne rent faktisk er simplere end det oprindelige problem og Hvis de ender med et trivielt delproblem (basis tilfælde) Eksponentiel kompleksitet 2 N -1 for N skiver … og historiens om verdens undergang … en skive hver sekund for 64 skiver tager 548 milliarder år

GP10, Martin Lillholm 16 Fibonacci tal Talrækken: 1, 1, 2, 3, 5, 8, 13, 21, 34,... Tavlegennemgang Sjove eksempler fra den virkelige verden på: –

GP10, Martin Lillholm 17 Quicksort – sortering med rekursion Peter Sestofts notenote

GP10, Martin Lillholm 18 Sorteringsmetoder – sammenligning

GP10, Martin Lillholm 19 Fraktaler Fraktaler er geometriske former, der er selvsimilære eksempelvis ved at det samme mønster gentages på forskellige skalaer og orienteringer Koch Snowflake – uformel gennemgang –KochSnowflake.java side 597 i L&L i BlueJ