Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

1 Algoritmer og Datastrukturer Øvingsforelesning 11 Dynamisk programmering, grådighet Vidar Kristoffer Strat Foiler av Torbjørn Morland (hovedsaklig)

Liknende presentasjoner


Presentasjon om: "1 Algoritmer og Datastrukturer Øvingsforelesning 11 Dynamisk programmering, grådighet Vidar Kristoffer Strat Foiler av Torbjørn Morland (hovedsaklig)"— Utskrift av presentasjonen:

1 1 Algoritmer og Datastrukturer Øvingsforelesning 11 Dynamisk programmering, grådighet Vidar Kristoffer Strat Foiler av Torbjørn Morland (hovedsaklig)

2 2 Gruppeøving Sjekk hjemmesiden for tidspunkter

3 3 Dagens tema Repetisjon av Dynamisk programmering Grådighet (med eksempler) Hvordan angripe oppgaver med Grådig/DP? Eksempler Øving 9: Skumlehulen Øving 10: Pengeveksling

4 4 Repetisjon av DP Optimal substruktur Den optimale løsningen av problemet består av optimale løsninger på delproblemer Overlappende delproblemer Løsningen på ett delproblem kan brukes for å løse flere større delproblemer ::

5 Ooops... f(3)f(2)f(1) f(0)f(1) f(2) f(1) f(0) f(4) f(2)f(1) f(0)f(1) f(3) f(6)f(5) f(4)f(3)f(2)f(1) f(0)f(1) f(2)f(1) f(0)

6 Yeah! f(3)f(2)f(1) f(0) f(4)f(6)f(5)

7 7 Grådighet Noen ganger trenger vi ikke sjekke alle mulige delproblemer Krav til problemer som vi vil løse grådig: Greedy Choice Property: fra et lokalt optimum kan vi nå et globalt optimum, uten å måtte gjøre om på valg vi har tatt Optimal substruktur: som for DP Det er ofte lett å forstå intuitivt at grådighet fungerer på et problem, men like ofte vanskelig å vise det formelt ::

8 8 Strategi for grådighet Formuler problemet slik at vi kan velge grådig, og sitte igjen med bare ett subproblem Når vi foretar et valg, legger det begrensninger på hvilke valg vi kan foreta senere Dette går bra på grunn av at greedy choice property er oppfylt ”Vis” at det alltid er trygt å velge grådig

9 Intuitivt eksempel Vi vil ha drops! Hvert drops har en ”verdi” (hvor godt det smaker) Vi kan bare velge to drops Hva er høyeste ”verdi” vi kan oppnå? Hvilke drops velger vi? 9

10 Intuitivt eksempel 10

11 Intuitivt eksempel 11 23

12 Intuitivt eksempel

13 Intuitivt eksempel = 43

14 14 Eksempel – Prims algoritme Finne minimalt spenntre Velger alltid billigste kant fra noder vi allerede har valgt til en vi ikke har valgt. Oppfyller både greedy choice og optimal substruktur

15 15 Eksempel – Huffmankoding Prefikskoding Ingen gyldig kodestreng er et prefiks i en annen gyldig kodestreng Eksempel: {0,10,110,1110,11110,…} Med prefikskoder kan vi kode en tekst til en sammenhengende binærstreng uten fare for misforståelser Et optimalt prefikstre er et fullt binærtre, men ikke nødvendigvis et balansert tre

16 16 Eksempel – Huffmankoding Har en mengde av bokstaver (evt. strenger) og frekvenser. Lager en node for hver bokstav vi har. Algoritme: Så lenge det er to eller flere noder igjen: Fjerner to noder med lavest frekvens Lager en foreldrenode med frekvensverdi lik summen av frekvensene til disse to Legger den nye noden tilbake med de gjenstående nodene Gir optimalt prefikstre

17 Eksempel – Huffmankoding 17

18 18 Grådig eller DP Hvordan angripe oppgaven? Hvordan finne ut om det er grådig eller DP?

19 19 Eksempel 1 Vi vil finne den største summen vi kan få fra en liste med positive heltall der et element ikke kan være med i summen hvis naboen er det Eksempel: [1,7,8,7,1,2,4]

20 20 Eksempel 1 Fungerer grådig algoritme? Nei, fordi det er ikke gitt at et lokalt optimalt valg gir globalt optimal løsning.

21 21 Eksempel 1 – Optimal substruktur Vi observerer at maks sum for en liste består av maks sum for en mindre del av listen Eksempel: [1,7,8,7,1,2,4] er maks for [1,7,8,7,1,2,4] 7+7 er maks for [1,7,8,7,1] 7 er maks for [1,7] Altså optimal løsning av problemet består av optimale løsninger av delproblemer

22 22 Eksempel 1 – overlappende delproblemer Prøver å sette opp en rekursiv formel for løsning av problemet A = lista, i = delproblemet vi ser på M(i, A) = max(A[i]+M(i-2, A), M(i-1, A)) Enten tar vi med element i, eller vi gjør ikke det Legger merke til at kallet M(i-1, A) også vil kalle M(i-2, A) – overlappende delproblemer Nå har vi funnet ut at problemet passer bra for DP

23 23 Eksempel 1 Det er trivielt å finne løsning for liste med 1 eller 2 elementer M(0, A) = A[0] M(1, A) = max(A[0], A[1]) For større delproblem må vi bruke den rekursive formelen, tilpasset M(i, A) = max(A[i]+M(i-2, A), M(i-1, A)) R[i] = max(R[i-1], A[i] + R[i-2])

24 24 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4] R=[1, -, -, -, -, -, -] #R[0]=A[0]

25 25 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4] R=[1, -, -, -, -, -, -] R=[1, 7, -, -, -, -, -] #R[1]=max(R[0],A[1])

26 26 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4] R=[1, -, -, -, -, -, -] R=[1, 7, -, -, -, -, -] R=[1, 7, 9, -, -, -, -] #Tar med A[2]

27 27 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4] R=[1, -, -, -, -, -, -] R=[1, 7, -, -, -, -, -] R=[1, 7, 9, -, -, -, -] R=[1, 7, 9,14, -, -, -] #Tar med A[3]

28 28 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4] R=[1, -, -, -, -, -, -] R=[1, 7, -, -, -, -, -] R=[1, 7, 9, -, -, -, -] R=[1, 7, 9,14, -, -, -] R=[1, 7, 9,14,14, -, -] #Bruker R[3]

29 29 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4] R=[1, -, -, -, -, -, -] R=[1, 7, -, -, -, -, -] R=[1, 7, 9, -, -, -, -] R=[1, 7, 9,14, -, -, -] R=[1, 7, 9,14,14, -, -] R=[1, 7, 9,14,14,16, -] #Tar med A[5]

30 30 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4] R=[1, -, -, -, -, -, -] R=[1, 7, -, -, -, -, -] R=[1, 7, 9, -, -, -, -] R=[1, 7, 9,14, -, -, -] R=[1, 7, 9,14,14, -, -] R=[1, 7, 9,14,14,16, -] R=[1, 7, 9,14,14,16,18] #Tar med A[6] Vi finner løsningen på den siste plassen i R

31 31 Eksempel 1 A=[1, 7, 8, 7, 1, 2, 4] R=[1, 7, 9,14,14,16,18] Finner hvilke tall som er med i løsningen på følgende måte: result = [] #Array med resultatet i = n #Siste indeks while i > 0: if R[i] != R[i-1]: result.append(A[i]) i-=2 else: i-- if i == 0:#Skjer bare hvis A[0] del av løsn. result.append(A[0])

32 32 Eksempel 2 Problem: En sekvens med tall kalles en zig-zag sequence hvis sekvensen er alternerende økende og minkende. En sekvens med færre enn to elementer er trivielt en slik sekvens. Finn den lengste subsekvensen av en sekvens heltall som oppfyller disse kravene. Som i Longest Common Subsequence er det lov å hoppe over elementer

33 33 Eksempel 2 Eksempel: 1, 7, 4, 9, 2, 5 er en zig-zag sequence, fordi sekvensen er alternerende økende og minkende. 1, 4, 7, 2, 5 og 1, 7, 4, 5, 5 er ikke slike sekvenser. Den første fordi den øker to ganger på rad, og den andre fordi den siste forskjellen er 0.

34 34 Eksempel 2 – Optimal substruktur Vi observerer at lengste zig-zag for en sekvens består av en lengste zig-zag for en mindre del av sekvensen Eksempel: [5,10,13,11,10,5,16] [5,13,5,16] er lengst for [5,10,13,11,10,5,16] [5,13,5] lengst for [5,10,13,11,10,5] [5,13] er lengst for [5,10,13] Altså optimal løsning av problemet består av optimale løsninger av delproblemer

35 35 Eksempel 2 – Greedy choice property Fungerer en grådig algoritme på dette problemet? Prøver å formulere en grådig algoritme Best å vise det som eksempel først, og beskrive med ord etterpå

36 36 Eksempel 2 Vil holde rede på følgende: Forskjellen forrige gang den endret fortegn, diff Et array med løsningen, result En teller for å komme gjennom arrayet, i Eksempel: A =[5,10,13,11,10,5,16]

37 37 Eksempel 2 A =[5,10,13,11,10,5,16] i = 0 diff = - Result = [5]

38 38 Eksempel 2 A =[5,10,13,11,10,5,16] i = 1 diff = A[1]-A[0] = 5 Result = [5,10]

39 39 Eksempel 2 A =[5,10,13,11,10,5,16] i = 2 diff = A[2]-A[1] = 3 Result = [5,13]

40 40 Eksempel 2 A =[5,10,13,11,10,5,16] i = 3 diff = A[3]-A[2] = -2 Result = [5,13,11] Endring i fortegn

41 41 Eksempel 2 A =[5,10,13,11,10,5,16] i = 4 diff = A[4]-A[3] = -1 Result = [5,13,10]

42 42 Eksempel 2 A =[5,10,13,11,10,5,16] i = 5 diff = A[5]-A[4] = -5 Result = [5,13,5]

43 43 Eksempel 2 A =[5,10,13,11,10,5,16] i = 6 diff = A[6]-A[5] = 11 Result = [5,13,5,16] Ferdig! Endring i fortegn

44 44 Eksempel 2 – Greedy choice property Finner første par med tall der forskjellen != 0 Tar alltid med det første av disse Husker hva forskjellen var For hvert av resten av tallene i lista: Hvis motsatt forskjell, legg til det nye tallet, oppdater forskjellen Hvis lik forskjell, oppdater siste element i løsningen Hvis ingen forskjell, gå videre

45 45 Eksempel 2 – Greedy choice property Fungerer dette? Vi oppdager hver gang forskjellen skifter fortegn Kan umulig ha med flere enn dette+1 Siden vi oppdaterer hvilket element vi tar med, får vi alltid med det største i en stigende rekke, og det minste i en synkende

46 46 Eksempel 3 – eksamen 06/2007 En arbeidsgruppe skal settes sammen for et bestemt prosjekt. De ulike stillingene i gruppen utgjør et hierarki som kan beskrives med en trestruktur, der rotnoden i et deltre er sjefen for deltreet. For hver av de n stillingene er det k kandidater (ingen er kandidat til mer enn én stilling). Din oppgave er å velge ut hvilke kandidater som skal tilsettes i de ulike stillingene, i henhold til de følgende retningslinjene: Hver kandidat x har en kompetanse A(x) Et hvert par kandidater x og y har en kompatibilitet B(x, y) Kvaliteten til gruppen er summen av de tilsatte kandidatenes kompetanser og kompatibiliteten mellom kandidater som er i nabo-stillinger (sjef og direkte underordnet). Maksimér kvaliteten til gruppen

47 47 Eksempel 3 – DP? Naturlig å se på hvert deltre som delproblem Disse er overlappende, da vi må sjekke hver kandidat i barnenodene for hver kandidat i rotnoden Vi kan beregne optimal kvalitet for hver av kandidatene (og dermed også hvert deltre), og bruke dette videre. Disse er uavhengige fordi hver kandidat bare kan søke på én stilling Altså optimal substruktur Begynn nederst og jobb deg oppover

48 Eksempel 3 – DP Samarbeidsevne Kompetanse og struktur 48 CDEF A0232 B5511 ABCDEF

49 Eksempel 3 – DP Vi tilegner hver kandidat en optimal kvalitet Q(k) For løvnoder er Q(k) = A(k) For en forelder vil Q(k) = A(k) + max{Q(b 11 )+B(k, b 11 ), Q(b 12 )+B(k, b 12 )} + max{Q(b 21 )+B(k, b 21 ), Q(b 22 )+B(k, b 22 )} Optimal løsning B er sjef, med C og E som underordnede 49

50 50 Eksempel 4 – eksamen 08/ lettere omskrevet Du har nå mange ansatte, organisert i et hierarki, altså har alle bortsett fra lederen én direkte overordnet, og muligens flere underordnede og indirekte overordnede. Du skal nå plukke ut personer fra avdelingen din til et prosjekt. En delmengde av personene i avdelingen er kompetente til å delta i prosjektet. Det beste ville vært om alle kompetente ansatte kunne bidratt i prosjektet, men vi har et problem med at folk misliker hverandre: Det må ikke finnes to personer i gruppen der den ene er den andres overordnede (direkte eller indirekte). Lag en så stor prosjektgruppe som mulig, der alle er kompetente, og ingen misliker hverandre

51 51 Eksempel 4 – Grådig? Vi går gjennom alle kompetente og fjerner den overordnede Hvis to kandidater ligger på samme sti fra rota i treet kan bare én av dem være med – men begge er lovlige. En som er nærmere rota vil blokkere flere kandidater enn en som er lenger ned, så det vil alltid lønne seg å velge den som er lengst ned. Greedy choice property

52 52 Øving 10 - Skumlehulen Splitt nodene, så bare én prinsesse kan gå gjennom hvert kryss Bruk vedlagte algoritme for å finne forøkende sti Oppdater flytnettverket

53 53 Øving 11 - Pengeveksling Håper hele denne forelesningen har gitt dere noen tips om hvordan dere skal angripe oppgaven Det vanskelige er å finne ut når man kan bruke grådig, og høste gevinsten av dette


Laste ned ppt "1 Algoritmer og Datastrukturer Øvingsforelesning 11 Dynamisk programmering, grådighet Vidar Kristoffer Strat Foiler av Torbjørn Morland (hovedsaklig)"

Liknende presentasjoner


Annonser fra Google