Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér."— Præsentationens transcript:

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

2 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”).

3 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.

4 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.

5 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; }

6 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

7 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

8 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); }

9 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...

10 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.


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

Lignende præsentationer


Annoncer fra Google