Agenda 1 Sortering, heap og select Oppsummering Ola Natvig IDI - NTNU 23. november 2007 2 Binære trær 3 Grafer, BFS og DFS 4 Spenntrær og Korteste vei 5 Maks flyt 6 Dynamisk programmering 7 Grådighet 8 Lineærprogrammering 9 P, NP, NPC og deres medlemmer 10 Eksamenstips Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 1 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 2 / 33 Sortering, heaper og select O(n lg n) algoritmer for sortering: Quicksort, Mergesort og Heapsort Kjenne kjøretider, best, worst, avg - case. O(n) algoritmer for sortering: Counting-sort, Radix-sort og Bucket-sort Kjenne kjøretider krav til data, (heltall, uniform fordeling) Binære heaper: Kjenne kjøretider, kjenne anvendelser Heapsort, prioritetskøer... Select: Select, Randomized-Select og Median-of-medians Huske å bruke når sortering blir overkill. Sortering, heaper og select - fra en eksamen Tabell A med n Boolske verdier (true eller false). Finn en lineær (O(n)) algoritme som sorterer verdiene (f alse < true), med kun konstant (O(1)) ekstra minnebruk, dvs. det er ikke mulig å telle antallet true og false siden dette hadde tatt O(n) ekstra minne. Svar: Partition - O(n), hvorfor? Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 3 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 4 / 33
Sortering, heaper og select - fra en eksamen Binære trær Gitt heltallsvektor: V [1...n], finn en mest mulig effektiv algoritme for å avgjøre om det finnes en undermengde av k elementer i V med sum en oppgitt verdi T. Svar: Sorter alle tallene og velg ut de k minste. Θ(n lg n) Bedre svar: Bruk en Min-Heap og trekk ut de k minste. Θ(n) for å lage heap. Θ(k lg n) for å hente ut k minste. Beste svar: Bruk en Select for å finne kte minste tall. Siden Select bruker partisjonering vil de k minste tallene befinne seg til venstre for det kte minste taller. Θ(n). (Randomized-Select og Median-of-Medians er selvfølgelig også minst like riktig.) Binære søketrær som datastruktur. Kjenne forskjell på balanserte og ubalanserte søketrær Kjenne infix (inorder), prefix (preorder) og postfix (postorder) Kjenne framgangsmåte for å finne maksimum, minimum og etterfølger i binære trær. Rød-svart trær som datastruktur. Kjenne motivasjonen bak rød-svart-trær Ha en viss forståelse om hvorfor rød-svart-trær er ganske balanserte. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 5 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 6 / 33 Binære trær - fra en eksamen Binære trær - fra en eksamen Anta at du har et balansert binært søketre med n elementer. Du ønsker å skrive ut alle elementene i verdiområdet fra x til y. Anta at det finnes k elementer i dette verdiområdet. Algoritmen din må finne alle disse elementene og skrive dem ut. Hva blir kjøretiden? Svar: T (n, k) = Θ(k + lg n), hvorfor? Vi må finne x, dette gjøres i Θ(lg n) tid i et ballansert søketre. Vi må skrive ut de k neste verdiene, siden treet er ballansert kan vi skrive ut de k etterfølgende tallene i Θ(k) tid. Hva er hensikten med heap-strukturen? Hvorfor kan man ikke like gjerne bruke binære søketrær? Man kan bruke binærtrær til å finne største og minste element, og den gjennomsnittlige asymptotiske kostnaden for å sette inn og ta ut elementer er jo den samme. Hvilken fordel er det da heaper (hauger) har (for sitt anvendelsesområde)? Svar: En heap er alltid ballansert, best-case = avg-case = worst-case Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 7 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 8 / 33
Grafer, DFS, BFS +++ Grafer, DFS, BFS +++ (1/2) Grafer Kjenne forskjellige typer: rettede, urettede, vektede,... Kjenne ulike strukturer: lenket liste, tre, skog, n-regulært-tre, DAG,... Kjenne ulike måter å representere grafer: naboliste, nabomatrise,... DFS, BFS: Kjenne forskjell på DFS og BFS Kjenne egenskaper ved DFS - oppdager sykler (grå kant), parentessetting,... Kjenne egenskaper ved BFS - korteste vei ved uniform kostnad,... Forstå at DFS og BFS i tilegg til å være grafsøkealgoritmer også er paradigmer som benyttes av mange andre algoritmer. (2/2) Topologisk sortering Kjenne krav (DAG) Kjenne inplementasjon. Sterkt sammenknyttede komponenter Vite hva en sterkt sammenknyttet komponent er. Kjenne inplementasjon. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 9 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 10 / 33 Grafer, DFS, BFS +++ - fra en eksamen Urettet asyklisk graf G = (V, E), alle kantene i E har vekt 1. Eksentrisiteten til noden v er den den lengste stien i mengden S v der S v inneholder alle de korteste stiene fra node v til de andre nodene i V. Finn en algoritme som finner en eller flere noder med minimal eksentrisitet. Oppgi kjøretid. Svar: urettet, asyklisk -> skog. Hvis vi har en skog (usammenhengende) har alle nodene eksentrisitet lik. Antar derfor et tre. Har man interne noder, kan ikke løvnodene være de nodene med lavest eksentrisitet. Vi kan fjerne løvnodene gjentatte ganger intill vi ikke lenger har interne noder. Kan finne løvnoder i Θ(V ) tid, fjerning av løvnoder kan holde rede på nye løvnoder i Θ(1) tid. Vi kan ikke fjerne mer enn V noder. Kjøretiden blir derfor Θ(n). Spenntrær og korteste vei Minimale-spenntrær algoritmer: Prim og Kruskal Kjenne problemstillingen, minimalt-spenntre. Forstå begrepet sikker kant., Prim bygger spenntre, Kruskal bygger skog. Korteste vei en til alle algoritmer: DAG-Shortest-Path, Dijkstra og Bellman-Ford Kunne velge riktig algoritme på grunnlag av probleminstans (DAG, negative kanter) er. Kunne velge mellom heap eller tabell i Dijkstra. Korteste vei alle-til-alle: Floyd-Warshall Kjenne til implementasjonen. Forstå at FW er DP. Kjenne likhet til transitiv tilukkning Kjenne til likheten mellom korteste vei alle-alle og matrisemultiplikasjon. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 11 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 12 / 33
Spenntrær og korteste vei - fra en eksamen Kommunikasjonsnettverk med n stasjoner. En potensiell kobling mellom to noder har en gitt oppgitt båndbredde. Dette danner en vektet graf G = (V, E) med vektfunksjon w(e). Vi ønsker å finne den mengden med det minste antallet kanter som skal være med i nettverket slik at alle nodene kommuniserer med hverandre. I tillegg ønsker vi ha maksimal total båndbredde. Svar: vi ønsker et maksimalt spenntre, negger alle kantvektene og kjør Prim, kjøretid Θ( E lg V ). Spenntrær og korteste vei - fra en eksamen Lag en skisse til en prosedyre SHORTEST-PATH(G,w,s)...som selv tar beslutning om hvilken (klassisk) algoritme som bør velges avhengig av G s egenskaper. Løsning def SHORTEST-PATH(G, w, s): if G is a DAG: return DAG-Shortest-Path(G, w, s) else: if G has negative edges: B = Bellman-Ford(G,w,s); if not B: fail "Negative cycles found!!!" return B else: return Dijsktra(G, w, s) Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 13 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 14 / 33 Maks-flyt Maks-flyt - fra en eksamen Maks-flyt: Ford-Fulkerson-Metoden, Edmonds-Karp Kunne formulere problemer som flytproblemer Maksimal bipartite matching Kjenne til problemstillingen Kunne formulere som flytproblem Finn en best mulig algoritme som kan finne den maksimale flyten fra alle løvnodene og opp til rotnoden i et binærtre. Anta at alle barnebekerne i binærtreet er merket med en kapasitet fra barnet og opp til foreldrenoden. Oppgi tidskompleksiteten. Svar: Hver interne node i treet (untatt rota) har tre kanter, en kant til en foreldrenode, og to kanter til barnenoder. F p = min(p, F l + F r ): flyten opp til foreldrenoden er lik den minste av kapasiteten opp til foreldrenoden og den total flyt inn i noden. Dersom vi har en løvnode, eller en node uten venstre eller høyre barn er flyten derfra uendelig. Traverser treet med postfiks traversering, dette gir kjøretid O(n). Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 15 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 16 / 33
Maks-flyt - utbredt på eksamen Dynamisk programmering Vanlige oppgaver Finn maks-flyt i denne grafen. Er flyten i denne grafen lovlig. Finn et minimalt kutt i denne grafen. Beherske DP som konstruksjonsteknikk Kjenne til krav: Optimal substruktur, uavhengige delproblemer og overlappende delproblemer. Memoisering Kjenne til problemer vi løser med DP Matrise-kjede-multiplikasjon Korteste vei alle-til-alle LCS, LIS og editerings-distanse... Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 17 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 18 / 33 Dynamisk programmering - fra en eksamen Tabell Studenten Gro tar 3 fag, der sannsynligheten for å stryke i alle fag, i følgeegenvurdering (tabell), er 0.8 0.75 0.9 = 0.54, altså 54%, uten ekstra studietimer pr.uke. Gro synes ikke dette er helt bra og setter opp en tabell som viser hvordan ekstra lese innsats kan redusere sjansene for å stryke i de enkelte fagene. studietimer Fransk Matte 4 AlgDat 0 0.8 0.75 0.9 1 0.7 0.7 0.7 2 0.65 0.67 0.6 3 0.62 0.65 0.55 4 0.6 0.62 0.5 Dynamisk programmering - fra en eksamen Tabellen er p(t, f) der t {0, 1, 2, 3, 4} svarer til ekstra timer lesing og f {1, 2, 3} svarer til fag nummer f (f = 1 svarer til fransk osv..). Tabellen P min (t, f) er definert som følgende: minimal sansynlighet for å stryke i fag f og fag med høyere nummer dersom t timer per uke er tilgjengelig. Oppgave a) Hva blir den rekrusive formelen for beregning av P min (t, f)? Svar: P min (t, f) = min i=0...t (p(i, f) p min(t i, f + 1)) Vi bruker noen av de t tildelte timene på fag f og fordelere resten optimalt på de fagene med høyere nummer. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 19 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 20 / 33
Dynamisk programmering - fra en eksamen Oppgave b) Beskriv en algroitme som finner den den laveste mulig sansynligheten for å stryke i alle fag gitt en hvis mengde ekstra lesetimer, og en tilstrekkelig utfyllt tabell p(t, f). Løsning def LES-BEST(p, t): Pmin = [0...t, 0...f] Pmin[0...t, f] = P[0...t, f] for i = 0... t: for j = (f-1) down to 1: Pmin[i, j] = 1 for c = 0... i: Pmin[i, j] = min(pmin[i, j], p(c, j) * Pmin[j-c, j+1]) return Pmin[t, 1] Dynamisk programmering - fra en eksamen Du har n resturanter som ligger etterhverandre i samme gate. Resturantene skal slås sammen til en stor resturant, men du kan bare slå sammen to om gangen, og disse to må ligge ved siden av hverandre. Størrelsen på den nye resturantent er lik summen av de to sammenslåtte. Kostnaden ved sammenslåing er lik resultatstørrelsen. Du ønsker minst mulig total kostnad på de n 1 sammenslåingene. Du har en tabell L[1...n, 1...n]. L[i, j] inneholder den totale størrelsen på resturanten som er sammenslått f.o.m. i, t.o.m. j. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 21 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 22 / 33 Dynamisk programmering - fra en eksamen Finn en så effektiv algoritme som mulig som finner den minimale kostnaden ved å slå sammen alle resturantene. Løsning C = [1...n, 1...n] C[i, i] = 0 for all i in 1...n for l = 2...n: for i = 1...(n-l+1): j = i + l - 1 C[i, j] = Inf for k = i...(j-1): C[i, j] = min(c[i, j], C[i, k] + C[k + 1, j] + L[i, j]) return C[n, 1] Grådighet Kjenne prinsipper. (optimal delstruktur, greedy choice property ) Kunne rellatere til DP. Kjenne til noen problemer vi kan løse grådig: Fractional-Knapsack, Activity-Selecton-Problem, Huffmankoder Husk hva huffmankode-algoritmen gjør: min( f(c)d(c)) c C Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 23 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 24 / 33
Grådighet - fra en eksamen Lineærprogrammering Du skal summere n positive flyttall, x[1]...x[n] slik at avrundigsfeilen blir minst mulig. Avhengig av hvordan dette gjøres kan de ulike tallene delta i et ulikt antall summasjoner. (((x[1] + x[3]) + (x[2] + x[5])) + x[6]). x[1] er med i tre, x[6] er med i en. Jo større en sum er, jo større blir feilen. p(i) er parentesdybden til flyttall x[i]. Feilen er derfor proposjonal med: p(1)x[1] + p(2)x[2] +... + p(n)x[n] Hvordan kan vi få feilen så liten som mulig? Svar: huffmankoding Kjenne prinsipper, bruksområder og begrensninger. Kunne formulere problemer som LP Kjenne standard og slakk form, samt kunne oversette LP problemer mellom generell form og standard/slakk from. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 25 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 26 / 33 Lineærprogrammering - fra en eksamen Lineærprogrammering - fra en eksamen Det er invitert N gutter og N jenter til en fest, arangøren ønsker at så få som mulig får en ikke spesielt ønsket bordkavaler/dame til bords. Det er derfor gjennomført en spørreundersøkelse blandt deltakerne, data er samlet i to matriser G og P. G(i, j) = 0 dersom gutt nr.i ikke spesielt ønsker jente nr.j, ellers er G(i, j) = 1. Tilsvarende er P (i, j) en eller null. Ønskene trenger ikke å være gjensidige. Formuler problemet som et LP problem. Løsning N Maksimer: (G(i, j) + P (i, j)) f(i, j) i,j=1 f(i, j) er 0 der gutt i og jente j ikke sitter sammen og 1 ellers. N f(i, j) = 1 for alle 1 i N, siden alle gutter må sitte med j=1 akkurat en jente. N f(i, j) = 1 for alle 1 j N, siden også alle jenter må sitte i=1 med akkurat en gutt. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 27 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 28 / 33
P, NP, NPC og deres medlemmer P, NP, NPC og deres medlemmer - fra en eksamen Kjenne de ulike kompleksitetsklassene. Kjenne noen NP-komplette problemer. CIRCUIT-SAT, SAT, 3-CNF-SAT, SUBSET-SUM, CLIQUE, VERTEX-COVER, HAM-CYCLE, TSP. Kjenne igjenn de samme NP-komplette problemene om de viser seg på eksamen. Kjenne til reduksjoner. Du har observert at dataspillet Slurm Invaders ligner svært på det NP-komplette problemet VERTEX-COVER, og du akter å bruke denne likheten til å vise at Slurm Invaders er NP-komplett. Hvordan vil du gå frem? Du kan anta at du alt har vist at Slurm Invaders er i mengden NP. Svar: Finne en reduksjon fra VERTEX-COVER til Slurm Invaders, dvs. vise at en polynomisk løsning på Slurm Invaders gir oss en polynomisk løsning på VERTEX-COVER. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 29 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 30 / 33 P, NP, NPC og deres medlemmer - fra en eksamen På en tidligere eksamen har følgende oppgave blitt gitt: Mengden S består av N reelle tall, du får oppgitt et reelt tall T og et heltall K N. Finnes det en delmengde Q S med K elementer slik at q Q q T? Det finnes en algoritme som løser dette problemet i Θ(n) tid. Er det rimelig å tro at vi kan finne en like effektiv løsning på følgende problem: S, N, Q og T som det forrige problemet, men q Q q=t. Svar: nei, når K = N kan vi løse SUBSET-SUM, dermed er problemet NP-komplett, det er ikke rimelig å tro at et NP-komplett problem kan løses i lineær tid. Eksamenstips Gjør Husk å ta med boka. Les alle oppgaven før du starter. Svar på alle oppgavene, en algoritme med eksponensiell kjøretid er bedre enn ingen algoritme (marginalt). Ikke Få panikk Gjør feil på kjør n iterasjoner med algoritme X fyll inn resultatet i disse rutene.... Dere har boka, dere har god tid (besvarelsen i algdat er ofte bare 2-3 sider). Åpne boka for første gang på eksamen. Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 31 / 33 Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 32 / 33
Lykke til!! P = {personer i fagstaben TDT4120 høsten 2007} P = P union {Dijkstra, Knuth, Hoare, Turing, Euler} for p in FS: print p, "ønsker dere lykke til!" Ola Natvig (IDI - NTNU) Oppsummering 23. november 2007 33 / 33