Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

1 Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet Torbjørn Morland

Liknende presentasjoner


Presentasjon om: "1 Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet Torbjørn Morland"— Utskrift av presentasjonen:

1 1 Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet Torbjørn Morland

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

3 3 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 Vil gå gjennom hvordan vi bruker dette på eksempler senere i forelesningen ::

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

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

6 6 Grådighet - 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

7 7 Huffmankoding Prefikskoding Ingen gyldig kodestreng er et prefiks i en annen gyldig kodestreng Eksempel: {0,10,110,1110,11110,…} Et optimalt prefikstre er et fullt binærtre, men ikke nødvendigvis et balansert tre

8 8 Huffmankoding Har en mengde av strenger og frekvenser. Lager en node for hver streng 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

9 9 Noen eksempler på grådig/DP Hvordan angripe oppgaven? Hvordan finne ut om det er grådig eller DP?

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

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

12 12 Eksempel 1 – Optimal substruktur Vi observerer at maks for en liste består av en maks 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

13 13 Eksempel 1 – overlappende delproblemer Prøver å sette opp en rekursiv formel for løsning av problemet 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 Hvordan går vi frem?

14 14 Eksempel 1 Det er trivielt å finne løsning for liste med 1 eller 2 element. For større delproblem må vi bruke den rekursive formelen, tilpasset Nå er formelen M(i, A) = max(A[i]+M(i-2, A), M(i-1, A)) R er tabellen vi vil lagre resultatet i Da får vi R[i] = max(R[i-1], A[i] + R[i-2])

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

16 16 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])

17 17 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]

18 18 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]

19 19 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]

20 20 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]

21 21 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

22 22 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])

23 23 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

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

25 25 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,15,10,5,16] [5,15,5,16] er lengst for [5,10,13,15,10,5,16] [5,15,5] er lengst for [5,10,13,15,10,5] [5,15] er lengst for [5,10,13,15] Altså optimal løsning av problemet består av optimale løsninger av delproblemer

26 26 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å

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

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

29 29 Eksempel 2 A =[5,10,13,15,10,5,16] i = 2 diff = 5 Result = [5,13]

30 30 Eksempel 2 A =[5,10,13,15,10,5,16] i = 3 diff = 5 Result = [5,15]

31 31 Eksempel 2 A =[5,10,13,15,10,5,16] i = 4 diff = A[4]-A[3] = -5 Result = [5,15,10]

32 32 Eksempel 2 A =[5,10,13,15,10,5,16] i = 5 diff = -5 Result = [5,15,5]

33 33 Eksempel 2 A =[5,10,13,15,10,5,16] i = 6 diff = A[6]-A[5] = 11 Result = [5,15,5,16]

34 34 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

35 35 Eksempel 2 – Greedy choice property Fungerer dette? Vi oppdager det 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

36 36 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

37 37 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 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

38 38 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

39 39 Eksempel 4 – Grådig? Også her kan vi finne optimale løsninger for hvert deltre, og kombinere disse til en optimal løsning Altså optimal substruktur 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

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

41 41 Ø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 Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet Torbjørn Morland"

Liknende presentasjoner


Annonser fra Google