I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér.

Slides:



Advertisements
Lignende præsentationer
Separation af de variable
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.
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.
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.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
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.
Uligheder.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel 2.3, , problem 30.1.c] Gerth Stølting Brodal.
1 Algoritmik ved Keld Helsgaun. 2 Plan Algoritmebegrebet et simpelt eksempel Et eksempel på algoritmedesign.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
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.
Ingeniørhøjskolen i Århus Slide 1 Newton approximation ”Oversæt” til algoritme - Step 5: Skriv kode - Step 4: Skriv pseudokode - Step 3: Specificér pre-
FEN IntroJava AAU1 Loops og algoritmer Sweep – for-loop Søgning – while-loop.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
FEN KbP/seminar1: ProgUdsagn1 Kontraktbaseret programmering Seminar 1 Programudsagn og programbeviser.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
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:
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
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.
Algoritmer og Datastrukturer 2 Grådige Algoritmer [CLRS ] Gerth Stølting Brodal.
Grundlæggende programmering Forår 2002
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
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.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Rekursion 2.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.2 Introduktion Vi har tidligere set eksempler på rekursive.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling.
Sortering.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSortering.2 Sortering Vi hartidligere set at effektiv søgning forudsætter.
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.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 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.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
Positionstalsystemer Decimale og binære tal
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14B.1 Sortering.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering6B.1 Rekursive skildpadder Supertrekanter....
DAIMIIntroducerende objektorienteret programmeringfletning.1 Fletning.
I o p o DAIMI, AU, November 1999Introducerende objektorienteret programmering9D.1 Del, løs og kombinér.
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.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering3E.1 Syntaksbeskrivelse Udtryk og Java-programmer.
DAIMIIntroducerende objektorienteret programmering15A.1 Eksamen…
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
DAIMIIntroducerende objektorienteret programmering2A.1 Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
Del, løs og kombinér Et algoritmemønster.
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.
Større skriftlig opgave i 2.hf
Forelæsning Uge 4 – Mandag
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 2
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 4 – Torsdag
Quiz – Uge 3 – mandag – første time
Præsentationens transcript:

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.2 Motivation En ofte anvendt måde at løse et problem på er ved hjælp af trinvis forfinelse hvor man nedbryder et problem i mindre delproblemer som kan løses hver for sig. Her skal vi specielt betragte situationen hvor nedbrydningen af et problem giver mindre problemer af samme type som det oprindelige. Sådanne problemer kaldes rekursivt nedbrydelige problemer. Vi skal i det følgende formulere en algoritmeskabelon for løsning af rekursivt nedbrydelige problemer. Teknikken som skabelonen beskriver kaldes del, løs og kombinér (også kendt som del og hersk eller “divide and conquer”).

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.3 Rekursivt nedbrydeligt Et problem er rekursivt nedbrydeligt hvis det 1.Er simpelt og kan løses direkte. 2.Ikke er simpelt, men kan nedbrydes i (typisk to) delproblemer der hver især er simplere end det oprindelige og hvis løsninger kan kombineres til en løsning på det oprindelige problem. Simplere betyder i denne sammenhæng at nedbrydningen til sidst resulterer i simple problemer.

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.4 Eksempel Summering af elementerne i en sekvens er et rekursivt nedbrydeligt problem. Simple problemer er segmenter med et element. Ikke simple problemer er segmenter med mere end et element (for eksempel hele sekvensen). Et segment med flere elementer kan nedbrydes til to delsegmenter med halvt så mange elementer, og det er klart at nedbrydningen til sidst ender med simple problemer.

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.5 Skabelonen (DLK) løsning løs (problem p) { problem p1,p2; løsning l1, l2; if ( p er simpelt ) { returner løsning på simpelt problem; } else { del p i p1 og p2; l1 = løs(p1); l2 = løs(p2); kombiner l1 og l2 til l; }

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.6 Grafisk illustration, L = løs(P) P P1P2 L1L2 L L1 = løs(P1)L2 = løs(P2) Del Løs Kombinér

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.7 Java-kode for summering int sum(Sequence s, int l, int h) { // pre: l < h // post: sum = summen af segmentet // s[l..h) if ( l+1==h ) return s.elementAt(l); else { int m = (l+h)/2; return sum(s, l, m) + sum(s, m, h); } s: lh m

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.8 Beregning af maksimum int maximum(Sequence s, int l, int h) { // pre: l < h // post: maximum = maximumværdien i // segmentet s[l..h) if ( l+1==h ) return s.elementAt(l); else { int m = (l+h)/2; int m1 = maximum(s, l, m); int m2 = maximum(s, m, h); return (m1>m2 ? m1 : m2); }

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.9 Fokus Hvis et problem er rekursivt nedbrydeligt, er det ofte ganske simpelt at formulere en løsning ved hjælp af del, løs og kombinér- skabelonen. Det eneste man skal bekymre sig om er - hvad er løsningen på simple problemer - hvordan nedbrydes et problem i (to) delproblemer - hvordan kombineres (to) løsninger til en samlet løsning Hvor svært kan det være...

i o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.10 Opgave Skriv med udgangspunkt i DLK-skabelonen en funktion int zeroCount(...) { // pre:... // post: } der kan tælle antallet af 0'er i en sekvens af heltal.