Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Algoritmer og Datastrukturer

Liknende presentasjoner


Presentasjon om: "Algoritmer og Datastrukturer"— Utskrift av presentasjonen:

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

2 Gruppeøving Sjekk hjemmesiden for tidspunkter

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 3

4 Repetisjon av DP Optimal substruktur Overlappende delproblemer
:: 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(6) f(5) f(4) f(3) f(2) f(1) f(2) f(1) f(0) f(4) f(3) f(2)

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

7 Grådighet Noen ganger trenger vi ikke sjekke alle mulige delproblemer
:: 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 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?

10 Intuitivt eksempel

11 Intuitivt eksempel 23

12 Intuitivt eksempel

13 Intuitivt eksempel = 43

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

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

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 Eksempel 1 Fungerer grådig algoritme?
Nei, fordi det er ikke gitt at et lokalt optimalt valg gir globalt optimal løsning.

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] 7+7+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 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 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 Eksempel 1 Da er det bare å fylle inn tabellen A=[1, 7, 8, 7, 1, 2, 4]
#R[0]=A[0]

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

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

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

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

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

30 Eksempel 1 Da er det bare å fylle inn tabellen
#Tar med A[6] Vi finner løsningen på den siste plassen i R

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 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 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 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 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 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 Eksempel 2 A =[5,10,13,11,10,5,16] i = 0 diff = - Result = [5]

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

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

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 Eksempel 2 A =[5,10,13,11,10,5,16] i = 4 diff = A[4]-A[3] = -1
Result = [5,13,10]

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

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 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 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 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 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 C D E F A 2 3 B
2 3 B 5 1 A B C D E F 5 6 3

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(b11)+B(k, b11), Q(b12)+B(k, b12)} + max{Q(b21)+B(k, b21), Q(b22)+B(k, b22)} Optimal løsning B er sjef, med C og E som underordnede

50 Eksempel 4 – eksamen 08/2007 - 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 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 Ø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 Ø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 "Algoritmer og Datastrukturer"

Liknende presentasjoner


Annonser fra Google