Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


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

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

2 i o p o DAIMI, AU, November 1999Introducerende objektorienteret programmering9D.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, November 1999Introducerende objektorienteret programmering9D.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, November 1999Introducerende objektorienteret programmering9D.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, November 1999Introducerende objektorienteret programmering9D.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, November 1999Introducerende objektorienteret programmering9D.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, November 1999Introducerende objektorienteret programmering9D.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, November 1999Introducerende objektorienteret programmering9D.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, November 1999Introducerende objektorienteret programmering9D.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...


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

Lignende præsentationer


Annoncer fra Google