GP 10, 7/11 20011 Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/11 2001 kl. 9:15 – 12:00.

Slides:



Advertisements
Lignende præsentationer
Filmaften Alfa Romeo i starten af 1950’erne ”Carrera Pan Americana” Klassisk Rally i Europa.
Advertisements

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.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Grundlæggende programmering Efterår 2001
GP 4, 19/ Grundlæggende programmering Efterår 2001 Forelæsning 4 onsdag 19/ kl. 9:15 – 12:00.
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.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
1 Nordjyllands Erhvervakademi Lektion 6 Opsamling på opgaver Mere om rekursion: –Del&Hersk –Sortering –Kompleksitet (effektivitet – ”Store O”) Abstrakte.
Hvordan man skriver koden.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
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.
MM4 Algoritmiske grundprincipper. MM1 Lister, stakke og køer. MM2 Hash-tabeller og Træer. MM3 Sortering.MM4 Søgning.MM5.
Induktion og rekursion
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Anvendelser I Leg og spil.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel 2.3, , problem 30.1.c] Gerth Stølting Brodal.
1 Rekursion og algoritmedesign. 2 Rekursion Matematisk induktion Rekursion Simple eksempler Kryptering Plan Designmetoder Del-og-hersk Dynamisk programmering.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
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/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
GP 5, 26/ Grundlæggende programmering Efterår 2001 Forelæsning 5 onsdag 26/ kl. 9:15 – 12:00.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
GP 3, 12/ Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/ kl. 9:15 – 12:00.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
GP 6, 3/ Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/ kl. 9:15 – 12:00.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Anvendelser I Leg og spil.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
PD – kursusgang 3 Introduktion til Java Script. Mål Viden om hvordan JavaScripts indlejres i HTML dokumenter Viden om programmering i JavaScript  Erklæring.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
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
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering9B.1 Fletning.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmeringfletning.1 Fletning.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – mandag – første time
Parametrisering En kort introduktion.
Præsentationens transcript:

GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00

GP 10, 7/ Dagens program Det praktiske Rekursion

GP 10, 7/ Rekursion Dette er en anden måde at anskue løkker på. (kapitel 11). public boolean find(char ch, String str) { // returner sand hvis ch er i str if (str.length() == 0) return false; if (str.charAt(0) = ch) return true; return find(ch, str.substring(1, str.length() ) } Hvis str er tom, så fandt vi den ikke. Hvis det er det første bogstav, så fandt vi den. Ellers leder vi i resten af str. Rekursion angiver at en metode bruger sig selv under sin udførsel.

GP 10, 7/ Aktiveringsstak for find public boolean find(char ch, String str) { // returner sand hvis ch er i str if (str.length() == 0) return false; if (str.charAt(0) = ch) return true; return find(ch, str.substring(1, str.length() ) } ch: ’m’ str: ’Julemand’ ch: ’m’ str: ’ulemand’ ch: ’m’ str: ’lemand’ ch: ’m’ str: ’emand’ ch: ’m’ str: ’mand’

GP 10, 7/ Rekursion: Metoder der kalder sig selv En metode kan kalde en anden metode. En metode kan også kalde sig selv; dvs. dens metodekrop indeholder et kald til samme metodesignatur i kaldet som i hovedet. En metode, som indeholder et kald til sig selv, hedder (direkte) rekursiv og det pågældende kald er et rekursivt kald (eller rekursiv invokering). Det at referere til “sig selv” kaldes rekursion (fra Latin: recurrere, at køre igen). Udførslen af rekursive kald er som for alle kald: For hvert kald (lige meget om rekursiv eller ej) laves en ny metodeaktivering på kaldstakken, og hver gang et kald returnerer fjernes den øverste aktivering igen. Rekursiv design kræver rekursiv tænkning for at kunne udnytte udtrykskraften i rekursion og i at skrive programmer med rekursive metoder.

GP 10, 7/ Eksempel: Fakultetsfunktion Fakultetsfunktionen n! beregner produktet n * (n-1) *... * 2 * 1. Tallet angiver antal forskellige muligheder man har for at halsbånd med n forskellige perler. F.eks 20! = Man kan beregne fakultetsfunktionen iterativt vha. Man kan også beregne det rekursivt ved at indse, at n! = n * (n-1)! for n > 1, og n! = 1 for n = 1: static int factorial(int n) { int result = 1; while (n>1) result *= n; return result; } static int factorial(int n){ if (n>1) return n * factorial(n-1); else return 1;

GP 10, 7/ Eksempel: Towers of Hanoi Towers of Hanoi Problem: –Alle skiver skal flyttes fra tårn A til tårn B. –Kun en skive må flyttes ad gangen. –En større skive må aldrig ligge på en mindre skive. AB C

GP 10, 7/ Eksempel: Towers of Hanoi... Skriv et program, som genererer flytter skiverne. Hvordan gør vi? Grundide: Flyt de øverste n skiver fra tårn A til tårn B således: 1.Flyt de øverste n-1 skiver fra tårn A til tårn C. 2.Flyt den nederste skive fra tårn A til tårn B. 3.Flyt de n-1 øverste skiver fra tårn C til tårn B. F.eks., efter trin 1: AB C

GP 10, 7/ Eksempel: Towers of Hanoi... Fremgangsmåde: –Vi finder ud af, at vi har brug for en operation ”flyt N skiver fra tårn X til tårn Y med tårn Z som hjælpetårn”. –Vi skriver et metodehovede, samt tilhørende kommentar, hvad metoden skal gør: –Så skriver vi metodekroppen først for specielle argumentværdier: –Endelig skriver vi metodekroppen for alle andre værdier: // flyt(n, x, y, z) flytter de n øverste skiver fra tårn x til tårn y via tårn z public static void flyt(int antalSkiver, String fra, String til, String via) { if (n==1) // der er kun 1 skive at flytte; flyt den direkte til måltårnet System.out.println(”Flyt en skive fra ” + x + “ til “ + y); else { // udføres når der er mindst 2 skiver at flytte flyt(n-1, x, z, y); flyt(1, x, y, z); flyt(n-1, z, y, x); }}

GP 10, 7/ Eksempel: Towers of Hanoi... Læg mærke til at: –Vi bruger bare flyt i kroppen og lader som om det allerede er defineret. –Kommentaren på metodehovedet siger, hvad flyt gør når det kaldes. Det er vigtigt at: –du kan komme på en rekursiv formulering af problemet og problemløsningen (”tænke rekursivt”); –du husker at håndtere specielle værdier uden rekursivt kald, ellers går kroppen i en uendelig løkke.

GP 10, 7/ Kock fraktaler public void trekant(int order, int length){ fraktal(order,length); turn(120); fraktal(order,length); turn(120); fraktal(order,length); }

GP 10, 7/ Kock fraktaler Princippet er at man i stedet for at tegne en enkel linje, tegner en linje med et knæk på.

GP 10, 7/ Kock fraktaler public void fraktal(int order, int length){ if (order == 1) move(length); else { fraktal(order-1,length/3); turn(-60); fraktal(order-1,length/3); turn(120); fraktal(order-1,length/3); turn(-60); fraktal(order-1,length/3); }

GP 10, 7/ Forklaring public void fraktal(int order, int length){ if (order == 1) move(length); else { fraktal(order-1,length/3); turn(-60); fraktal(order-1,length/3); turn(120); fraktal(order-1,length/3); turn(-60); fraktal(order-1,length/3); } order angiver hvor mange knæk der skal være på en linje – på en eller anden måde. order = 1 angiver at der ikke skal laves knæk, men blot tegnes en linje. order >1 angiver at der skal laves knæk. Linjen knækkes ved at dele den op i 4 dele. Hver del tegnes en orden mindre.

GP 10, 7/ Aktiverings stak for fraktalen order: 3 length: 81 order: 2 length: 27 order: 1 length: 9

GP 10, 7/ Kaldsstakken i debuggeren Debuggeren er stoppet ved linjen ”move(length)” i metoden fraktal efter et kald med orden = 5. Man kan se at der er 5 aktiveringer af fraktal metoden i kaldsstakken på dette sted

GP 10, 7/ Sortering sorter hver halvdel for sig flet de to halvdele

GP 10, 7/ Sorter en halvdel, kvarte, sorter hver kvart for sig flet de to kvarte sorter hver kvart for sig flet de to kvarte sorter to tal flet

GP 10, 7/ Divide-and-conquer Grundideen bag mergesort (del-og-hersk, divide-and-conquer): For at sortere en tabel med n tal i, gør følgende: –del tabellen i to halvdele; –sorter begge halvdele hver for sig; –flet de to halvdele sammen som et lynlås. –(Se efterfølgende – mere om søgning og sortering næste gang).