Del, løs og kombinér Et algoritmemønster.

Slides:



Advertisements
Lignende præsentationer
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
Advertisements

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.
Datastruktur & Algoritmik1 Datastruktur & Algoritmik 99 Kim Guldstrand Larsen.
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.
Efterår 2009VVU-IT: Softwarekonstruktion1 Velkommen til Softwarekonstruktion Aase Bøgh, Systemudvikling Martin Siegumfeldt,
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
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.
Eksempel på realisering af domænemodel
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.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
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.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
Quiz 3.1. Quiz 1 – Assignment dIntProg, E14 Hvad er værdierne af x og y efter udførelse af følgende program? 1.x er 6, y er 3 2.x er 8, y er 5 3.x er.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
 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.
Rekursive skildpadder Supertrekanter.....  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.2 Penta, etc.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
 Jens Bennedsen, 2003Introducerende objektorienteret programmering Exceptions.
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.
 Bærbak & Caspersen, 2000 Introducerende objektorienteret programmering4B.1 Talsystemer Positionstalsystemer Decimale og binære tal.
 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)
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.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
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.
Sequence En container til heltal.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSequence.2 Datatypen Sequence Oprette Sequence()
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.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Objektinteraktion i GUI’er MVC og Observer.  Michael E. Caspersen, 2003Introducerende objektorienteret programmeringmvc.2 AWT framework Listeners og.
 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.
Quiz Uge 2 – torsdag. Hvorfor har vi clicker quizzer? Formålet med quizzerne er –at afveksle undervisningsformen – så I ikke falder i søvn –at tvinge.
Forelæsning Uge 4 – Mandag
Quiz Uge 2 – mandag.
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 2 Grådige Algoritmer [CLRS ]
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

Del, løs og kombinér Et algoritmemønster

Introducerende objektorienteret programmering 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”).  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering

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.  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering

Introducerende objektorienteret programmering 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.  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering

Introducerende objektorienteret programmering 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; }  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering

Grafisk illustration, L = løs(P) Del P1 P2 Løs L1 = løs(P1) L2 = løs(P2) L1 L2 Kombinér L  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering

Java-kode for summering l h 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); }  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering

Introducerende objektorienteret programmering 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); }  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering

Introducerende objektorienteret programmering 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...  Michael E. Caspersen, 2000 Introducerende objektorienteret programmering