Algoritmer, datastrukturer och komplexitet

Relevanta dokument
Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Föreläsning 9: NP-fullständighet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Föreläsning 12+13: Approximationsalgoritmer

Övningsmästarprov 2 + några NP-reduktioner. Algoritmer, datastrukturer och komplexitet

Föreläsning 5: Dynamisk programmering

Föreläsning 7+8: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 8+9: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning 5: Grafer Del 1

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Magnus Nielsen, IDA, Linköpings universitet

Komplexitetsklasser och repetition

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Tentamen Datastrukturer D DAT 035/INN960

n (log n) Division Analysera skolboksalgoritmen för division (trappdivision). Använd bitkostnad.

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering.

Dekomposition och dynamisk programmering

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Föreläsning 1. Introduktion. Vad är en algoritm?

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsningsanteckningar F6

Föreläsning 5 Innehåll

Dynamisk programmering

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

Tentamen Datastrukturer för D2 DAT 035

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Algoritmer, datastrukturer och komplexitet

Programkonstruktion och Datastrukturer

Asymptotisk komplexitetsanalys

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Dugga Datastrukturer (DAT036)

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

Föreläsning 12. Söndra och härska

Dynamisk programmering

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Tentamen Datastrukturer (DAT036)

N = {i}: noder (hörn) Graf: G = (N, B) Definitioner. Väg: Sekvens av angränsande bågar. Cykel: Väg som startar och slutar i samma nod.

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 4: Kombinatorisk sökning

Föreläsning 11. Giriga algoritmer

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Föreläsning 8 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/INN960

Tentamen Datastrukturer (DAT037)

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Föreläsning 13 Innehåll

Föreläsning 8: Intro till Komplexitetsteori

Datastrukturer. föreläsning 8. Lecture 6 1

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Föreläsning 11. Giriga algoritmer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Sökning och sortering

1 Duala problem vid linjär optimering

Föreläsning Datastrukturer (DAT037)

Lösningsförslag till övningsuppgifter, del V

Föreläsning 12. Söndra och härska

Tentamen Datastrukturer (DAT036)

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Datastrukturer och algoritmer

Några svar till TDDC70/91 Datastrukturer och algoritmer

Datastrukturer och algoritmer

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Flöde i nätverk. Flöde i nätverk. Specialfall av minkostnadsflödesproblemet

Föreläsning Datastrukturer (DAT036)

Datastrukturer. föreläsning 3. Stacks 1

Datastrukturer och algoritmer

Beräkningsvetenskap föreläsning 2

Flöde i nätverk. Flöde i nätverk. Specialfall av minkostnadsflödesproblemet

Transkript:

Algoritmer, datastrukturer och komplexitet Övning 7 Anton Grensjö grensjo@csc.kth.se 14 oktober 2015 Anton Grensjö ADK Övning 7 14 oktober 2015 1 / 28

Översikt Kursplanering Ö6: Algoritmkonstruktion F19: Probabilistiska algoritmer Inlämning Mästarprov 1 F20: Reduktioner Ö7: Probabilistiska algoritmer, reduktioner F21: Introduktion till komplexitet Redovisningar Mästarprov 1 ADK del 2: Komplexitet... Anton Grensjö ADK Övning 7 14 oktober 2015 2 / 28

Idag Idag Probabilistiska algoritmer Reduktioner Anton Grensjö ADK Övning 7 14 oktober 2015 3 / 28

Probabilistiska algoritmer Probabilistiska algoritmer Probabilistiska algoritmer: använder slump Las Vegas-algoritm: svarar alltid rätt, kan ta olika lång tid Monte Carlo-algoritm: går alltid snabbt, kan ge olika bra resultat Anton Grensjö ADK Övning 7 14 oktober 2015 4 / 28

Uppgifter Uppgift 1: Skipplistor Kom ihåg skipplistor från föreläsning 3. Sannolikheten att ett element som finns på nivå i också finns på nivå i + 1 kallas för p. En närmare analys ger att skipplistan för så kort sökstig som möjligt om p = 1/e 0,3679. Uppgift Trots detta resultat kan det vara bättre att välja p = 1/2 eller p = 1/4. Varför? Svar Slump är dyrt. För p = 1/2 eller p = 1/4 räcker det med 1 eller 2 slumpmässiga bitar för att avgöra om en ny nivå ska läggas till eller inte, med rätt sannolikhet. Anton Grensjö ADK Övning 7 14 oktober 2015 5 / 28

Uppgifter Uppgift 2: Verifikation av matrismultiplikation Snabbaste kända metoden för att multiplicera två n n matriser är O(n 2,376 ). Visa att det går att probabilistiskt verifiera en matrismultiplikation i kvadratisk tid. Närmare bestämt: Konstruera en Monte Carlo-algoritm som verifierar att AB = C. Tidskomplexiteten ska vara O(kn 2 ) och algoritmen ska ha en felsannolikhet på högst 2 k. Hint: multiplikation av n n-matris med n 1-vektor har tidskomplexitet O(n 2 ). Anton Grensjö ADK Övning 7 14 oktober 2015 6 / 28

Uppgifter Uppgift 2: Verifikation av matrismultiplikation Lösningsidé Insikt: Antag att vi har en vektor v. Då gäller C = AB = C v = A(B v) Om det skulle vara så att C v A(B v) så vet vi att C AB. Algoritmen: 1 Slumpa fram en vektor r {0, 1} n. 2 Beräkna a = C r och b = A(B r). 3 Kolla om a = b. Kör steg 1-3 k stycken gånger. Om testet lyckas (dvs a = b) varje gång säger vi att multiplikationen C = AB är korrekt, annars säger vi att den är felaktig. Anton Grensjö ADK Övning 7 14 oktober 2015 7 / 28

Uppgifter Uppgift 2: Verifikation av matrismultiplikation Pseudokod VerifyMult(n, A, B, C, k) = for i 1 to k do r slumpvektor {0, 1} n a C r b A (B r) if a b then return false return true Tidskomplexitet: O(kn 2 ) Anton Grensjö ADK Övning 7 14 oktober 2015 8 / 28

Uppgifter Uppgift 2: Verifikation av matrismultiplikation Analys Om AB = C Algoritmen ger alltid korrekt svar. Om AB C Algoritmen kommer ibland ge false positive, dvs säga att multiplikationen är korrekt, fast så inte är fallet. Vi vill analysera hur ofta detta sker. Antag att AB C. AB C D = AB C 0 Vår algoritm kommer upptäcka felet om D r 0 (då har den upptäckt att D = AB C 0), och missa det om D r = 0. Anton Grensjö ADK Övning 7 14 oktober 2015 9 / 28

Uppgifter Uppgift 2: Verifikation av matrismultiplikation Analys Vi vill undersöka hur ofta vår algoritm upptäcker att AB C. Vi vet att D = AB C 0. Algoritmen upptäcker felet om och endast om D r 0. Insikt: det måste finnas en position k i r, sådan att D r ändras om den biten flippas. Varför? Betrakta ett nollskilt element d ik i D (måste finnas, ty D 0). Låt v = D r. Utför matris-vektor-multiplikation: v i = n d ij r j =... + d ik r k +... j=1 Om vi flippar biten r k så ändras v i! Anton Grensjö ADK Övning 7 14 oktober 2015 10 / 28

Uppgifter Uppgift 2: Verifikation av matrismultiplikation Analys Vi vill undersöka hur ofta vår algoritm upptäcker att AB C. Vi vet att D = AB C 0. Algoritmen upptäcker felet om och endast om D r 0. Produkten D r ändras om biten r k flippas. Partitionera in alla vektorer i {0, 1} n i två mängder, en där r k = 0 och en där r k = 1. V 0 = { r {0, 1} n : r k = 0 } V 1 = { r {0, 1} n : r k = 1 } Låt f : V 0 V 1 vara funktionen som flippar bit k. Detta är en bijektion, dvs funktionen parar ihop varje vektor r V 0 med exakt en vektor r V 1. Låt r V 0, r = f ( r) V 1 vara ett sådant par. Om D r = 0 så är D r 0. Om D r = 0 så är D r 0. Minst en vektor i varje par måste avslöja bluffen! Anton Grensjö ADK Övning 7 14 oktober 2015 11 / 28

Uppgifter Uppgift 2: Verifikation av matrismultiplikation Analys Vi vill undersöka hur ofta vår algoritm upptäcker att AB C. Vi vet att D = AB C 0. Algoritmen upptäcker felet om och endast om D r 0. Vektorerna i {0, 1} n kan delas in i par, sådana att D r 0 åtminstone för en av vektorerna i paret. Därför måste åtminstone hälften av alla möjliga vektorer r {0, 1} n avslöja bluffen (dvs leda till att algoritmen upptäcker att AB C). Sannolikheten att ett fel inte upptäcks vid ett varv av algoritmen är högst 1/2. = Efter k körningar är sannolikheten att ett fel missats högst 2 k. Detta var den felsannolikhet vi var ute efter! (Och det är en bra sådan, minskar exponentiellt med k.) Anton Grensjö ADK Övning 7 14 oktober 2015 12 / 28

Reduktioner Reduktioner kan användas till att Visa positiva resultat (hitta algoritmer) Visa negativa resultat (undre gränser) Visa att ett problem är svårare än ett annat Visa att två problem är lika svåra Om P kan reduceras till Q och P är svårt, så är Q också svårt. Turingreduktion av P till Q: en algoritm som löser P genom att anropa Q en eller flera gånger. Karpreduktion av P till Q: specialfall av Turingreduktion, där Q anropas exakt en gång och resultatet returneras direkt. Anton Grensjö ADK Övning 7 14 oktober 2015 13 / 28

Reduktioner Olika typer av problem: Beslutsproblem (utdata är sant/falskt) Optimeringsproblem (maximera/minimera en målfunktion) Konstruktionsproblem Anton Grensjö ADK Övning 7 14 oktober 2015 14 / 28

Uppgift 3: Reduktion som ger negativt resultat Att hitta medianelementet (det n 2 :e minsta elementet) av n positiva heltal kräver minst 2n jämförelser i värsta fallet. Utnyttja detta resultat för att bestämma en undre gräns för antalet jämförelser som krävs för att hitta det n/2 + 10:e minsta elementet. Låt oss reducera medianproblemet till det nya problemet. Dvs givet en algoritm som löser det nya problemet, lös medianproblemet med hjälp av ett eller flera anrop till denna (Turing-reduktion). Eftersom vi har en undre gräns till medianproblemet (ingen algoritm kan göra bättre än så) så kommer detta även ge en undre gräns till vårt nya problem. Anton Grensjö ADK Övning 7 14 oktober 2015 15 / 28

Uppgift 3: Reduktion som ger negativt resultat Givet: En algoritm MED10 som hittar det n/2 + 10:e minsta elementet i en array. Vi vill hitta medianen med hjälp av denna. Idé: Lägg till 20 stycken ettor till vår array. Den ursprungliga medianen ligger nu på plats n/2 + 10. Anropa den givna algoritmen! function MEDIAN(L, n) Lägg till 20 ettor till L. return MED10(L, n + 20) Anton Grensjö ADK Övning 7 14 oktober 2015 16 / 28

Uppgift 3: Reduktion som ger negativt resultat function MEDIAN(L, n) Lägg till 20 ettor till L. return MED10(L, n + 20) Säg att vår reduktion MEDIAN(L, n) använder f (n) jämförelser, och att MED10(L, m) använder g(m) jämförelser. Notera: f (n) = g(n + 20). Den givna undre gränsen ger: f (n) 2n. Således: Substituera m = n + 20: g(n + 20) 2n g(m) 2m 40 Slutsats: att hitta det n/2 + 10:e minsta elementet i en array kräver minst 2n 40 jämförelser, oavsett algoritm. Anton Grensjö ADK Övning 7 14 oktober 2015 17 / 28

Uppgift 4: Reduktion som ger positivt resultat Ett ofta användbart sätt att lösa problem på är att hitta en reduktion till ett problem som man redan vet hur man ska lösa. Du ska nu använda denna metod för att lösa kantsammanhängandegradsproblemet som definieras på följande sätt. INMATNING: En sammanhängande oriktad graf G = (V, E) och ett positivt heltal K mellan 1 och V. PROBLEM: Är det tillräckligt att ta bort K kanter från grafen G för att göra den osammanhängande (dvs uppdelad i flera sammanhängande komponenter)? Anton Grensjö ADK Övning 7 14 oktober 2015 18 / 28

Uppgift 4: Reduktion som ger positivt resultat Kom ihåg: Ett snitt i en graf är en indelning av den i två delar. Snittets storlek är summan av vikterna på de kanter som går mellan delarna. Känt resultat: Minsta snittet som placerar noderna s och t i olika delar är lika med det maximala flödet från s till t. Minsta snittet kan tolkas som hur mycket kapacitet vi måste blockera för att helt stoppa flödet från s till t. 2/3 1/1 s 1/1 2/2 t 6/6 5/5 Om alla vikter är 1 kan minsta snittet tolkas som hur många kanter som måste tas bort för att lägga s och t i olika komponenter. Anton Grensjö ADK Övning 7 14 oktober 2015 19 / 28 7/7

Uppgift 4: Reduktion som ger positivt resultat Lösning: Gör om G till en flödesgraf G, ge dubbelriktad kapacitet 1. För varje par av noder s, t, beräkna minsta snittet (=maximala flödet). Det minsta av alla dessa resultat är antalet kanter som måste tas bort för att dela upp G i två komponener. Måste vi anropa maxflow för varje par av noder (O( V 2 ) gånger), eller kan vi göra det bättre? Räcker med att fixera s och testa för alla möjliga t. Varför? Låt λ(g) vara det minsta resultatet av alla dessa anrop till maxflow. λ(g) = min t V {s} ( MAXFLOW(G, s, t) ) Uppgiften var att avgöra om K λ(g). Vi svarar alltså JA om K λ(g) och NEJ annars. Anton Grensjö ADK Övning 7 14 oktober 2015 20 / 28

Uppgift 4: Reduktion som ger positivt resultat Tidskomplexitet: Vi anropar maxflow V 1 gånger. Varje flödesberäkning tar tid O( V 3 ). = vår algoritm har komplexitet O( V 4 ). Anton Grensjö ADK Övning 7 14 oktober 2015 21 / 28

Uppgift 5: Formulera optimeringsproblem som beslutsproblem Jobbmaskningsproblemet definieras som ett optimeringsproblem på följande sätt: Indata: Arbetsdagens längd T och n arbetsuppgifter. Uppgift i tar tiden t i och kräver arbetsinsatsen w i. Alla tal är positiva heltal. Lösning: Ett urval av arbetsuppgifterna D [1..n] som tillsammans fyller ut en arbetsdag, det vill säga i D ti T. Målfunktion: Den arbetsinsats som krävs för att utföra dagsverket D, alltså i D wi. Mål: Minimera målfunktionen, alltså hitta det dagsverke som kräver minst arbetsinsats. a) Formulera optimeringsproblemet som ett beslutsproblem. Utvidga indata med ett målvärde I för arbetsinsatsen och formulera en fråga som har svaret ja eller nej. b) Turingreducera optimeringsproblemet till beslutsproblemet, det vill säga visa hur man kan lösa optimeringsproblemet med hjälp av en algoritm som löser beslutsproblemet. Anton Grensjö ADK Övning 7 14 oktober 2015 22 / 28

Uppgift 5: Formulera optimeringsproblem som beslutsproblem a) Inför ett mål I som också ges som indata. Beslutsproblemet svarar på frågan om problemet är lösbart med en total arbetsinsats som är högst I. Indata: Arbetsdagens längd T, målet I och n arbetsuppgifter. Uppgift i tar tiden t i och kräver arbetsinsatsen w i. Fråga: Finns det en delmängd D [1..n] så att i D t i T och i D w i I? b) Antag att vi har en algoritm som löser beslutsproblemet. Den optimala totala arbetsinsatsen måste vara ett heltal mellan 0 och 1 i n w i. Binärsök mellan dessa extremvärden för det minsta värde I för vilket den givna algoritmen för beslutsproblemet svarar ja. Anton Grensjö ADK Övning 7 14 oktober 2015 23 / 28

Uppgift 6: Reduktioner mellan besluts-, optimerings och konstruktionsproblem Anta att algoritmen GraphColouring(G,k) på tid T(n) (där n är antalet hörn i G) svarar 1 omm hörnen i G kan färgas med k färger utan att någon kant har likfärgade ändpunkter. a) Konstruera en algoritm som givet en graf G med n hörn bestämmer det minimala antalet färger som behövs för att färga G. Tiden ska vara O(log n T(n)). b) Konstruera en algoritm som givet en graf G med n hörn färgar hörnen med minimalt antal färger i tid O(P(n)T(n)) där P(n) är ett polynom. Anton Grensjö ADK Övning 7 14 oktober 2015 24 / 28

Uppgift 6: Reduktioner mellan besluts-, optimerings och konstruktionsproblem a) Det minimala antalet färger måste vara mellan 1 och n. Binärsök i detta intervall efter det minsta k sådant att GraphColouring(G, k) = 1. Intervallet halveras log n gånger = komplexitet O(log n T(n)). b) Använd först algoritmen ovan för att hitta minimala antalet färger k som behövs. Vi vill nu färga hörnen i G med färger 1 till k. Idé: Vi kan använda algoritmen för beslutsproblemet för att avgöra vilka val vi får/inte får göra. Anton Grensjö ADK Övning 7 14 oktober 2015 25 / 28

Uppgift 6: Reduktioner mellan besluts-, optimerings och konstruktionsproblem Algoritm: 1 Välj ett hörn u. Ge det färg k. 2 Iterera över alla andra noder v, som inte är granne med u. Vi undrar: måste u och v ha samma färg? Testa lägga till kanten (u, v) och anropa beslutsproblemet. Finns det fortfarande en lösning? Om nej: u och v måste vara samma färg. Ta bort kanten och ge v färgen k. Om ja: vi drar slutsatsen att u och v inte behöver ha samma färg. Låt v vara färglös och lämna kvar den nya kanten. 3 Varje nod har nu antingen färg k eller en granne med färg k. Vi vet att det fortfarande finns en lösning. Kvarvarande ofärgade hörn måste ha färg < k. De färgade hörnen påverkar inte längre lösningen. Anropa rekursivt utan de färgade hörnen och med en färg mindre. Anton Grensjö ADK Övning 7 14 oktober 2015 26 / 28

Uppgift 6: Reduktioner mellan besluts-, optimerings och konstruktionsproblem CreateColouring(G = (V, E), k)= u första hörnet i V C {u}; u.colour k foreach v V {u} do if (u, v) E then if GraphColouring((V, E {(u, v)}), k) = 1 then E E {(u, v)} else C C {v}; v.colour k if k > 1 then CreateColouring((V C, E), k 1) Tidskomplexitet: GraphColoring anropas högst en gång för varje par av hörn i grafen. Således blir komplexiteten O(log n T(n) + n 2 T(n)) = O(n 2 T(n)) Anton Grensjö ADK Övning 7 14 oktober 2015 27 / 28

Vad händer framöver? Framtiden Nu blir det mästarprovsredovisningar och tentaperiodsuppehåll. Efter tentaperioden börjar vi om med del 2 av kursen! Nästa övning handlar om oavgörbarhet, dvs problem som inte går att lösa! Anton Grensjö ADK Övning 7 14 oktober 2015 28 / 28