Algorimer, daarukurer och komplexie Övning Anon Grenjö grenjo@cc.kh.e okober 20 Anon Grenjö ADK Övning okober 20 / 38
Överik Kurplanering F2: Grafer: MST och Dijkra Ö4: Dynamik programmering F3: Grafer: Maximal flöde F4: Undre gräner F: Beräkninggeomeri Ö: Grafalgorimer och undre gräner F: Sorering i linjär id F7: Texökning F8: Polynom och FFT Ö: Algorimkonrukion Anon Grenjö ADK Övning okober 20 2 / 38
Mäarprov Mäarprov Mäarprov finn ue nu. Deadline idagen den 3 okober. Generella ip: Börja i id. Lä lydelerna noga. Fråga om evenuella oklarheer. Skriv fulländiga löningar. Tia på löningar ill gamla mäarprov. Lä beygkrierierna och kolla vad om förväna för vilka beyg. Kom ihåg: mäarprove ka löa rik individuell. Anon Grenjö ADK Övning okober 20 3 / 38
Idag Idag Grafalgorimer Spännande räd Flöde och machning (bra för labb 3!) Eulercykler Undre gräner Anon Grenjö ADK Övning okober 20 4 / 38
Repeiion Spännande räd Spännande räd Definiion E pännande räd ill en graf G är en delgraf G ill G, ådan a: G är e räd. G har amma hörn om G. Vad innebär dea? Lå viken för e pännande räd vara umman av de ingående kanerna viker. De minimal pännande räde (MST) ill en graf G är de pännande räd ill G om har läg vik. Anon Grenjö ADK Övning okober 20 / 38
Uppgif : Spännande räd Via hur e minimal pännande räd hia i följande graf med både Prim och Krukal algorimer. 7 9 2 3 0 8 4 Anon Grenjö ADK Övning okober 20 / 38
Uppgif : Spännande räd Prim algorim Idé: modifierad BFS. Vi väljer en nod a börja med, och lägger ucceiv ill kaner, ill de a alla noder kan nå. Spara alla uppäcka noder i en prioriekö, med aveende på konaden för a lägga ill noden. Om vi uppäcker en nod igen, uppdaera konaden om den är lägre. I varje eg: välj den nod om de är billiga a lägga ill. Vår MST kommer a växa inifrån och u. Anon Grenjö ADK Övning okober 20 7 / 38
Uppgif : Spännande räd Krukal algorim Idé: välj hela iden den billigae kanen om gör någon nya (dv ej bildar en cykel). Sorera kanerna efer igande vik. 2 För varje kan (u, v) i den ordningen: Om u och v ine ännu är ammankopplade i räde, lägg ill kanen. Annar: gör inge. Hur kan vi effekiv hålla koll på vilka noder om redan är ammankopplade? Daarukuren Union-Find! Om ni är inreerade, lä mer på. i Kleinberg-Tardo. Anon Grenjö ADK Övning okober 20 8 / 38
Lå o för e e exempel på hur man hiar maximala flöde i en graf med hjälp av Ford-Fulkeron. Anon Grenjö ADK Övning okober 20 9 / 38
0/3 0/ 0/ 0/2 0/ 0/ 0/7 3 2 7 Anon Grenjö ADK Övning okober 20 0 / 38
0/3 0/ 0/ 0/2 0/ 0/ 0/7 3 2 7 Anon Grenjö ADK Övning okober 20 0 / 38
0/3 0/ 0/ 0/2 0/ 0/ 0/7 3 2 7 Anon Grenjö ADK Övning okober 20 0 / 38
2/3 0/ 0/ 2/2 0/ 0/ 2/7 2 2 2 Anon Grenjö ADK Övning okober 20 / 38
2/3 0/ 0/ 2/2 0/ 0/ 2/7 2 2 2 Anon Grenjö ADK Övning okober 20 / 38
2/3 0/ 0/ 2/2 0/ 0/ 2/7 2 2 2 Anon Grenjö ADK Övning okober 20 / 38
2/3 0/ 0/ 2/2 0/ 0/ 2/7 2 2 2 Anon Grenjö ADK Övning okober 20 / 38
2/3 / 0/ /2 / / 2/7 2 4 2 Anon Grenjö ADK Övning okober 20 2 / 38
2/3 / 0/ /2 / / 2/7 2 4 2 Anon Grenjö ADK Övning okober 20 2 / 38
2/3 / 0/ /2 / / 2/7 2 4 2 Anon Grenjö ADK Övning okober 20 2 / 38
2/3 / 0/ /2 / / 2/7 2 4 2 Anon Grenjö ADK Övning okober 20 2 / 38
2/3 / 0/ /2 / / /7 2 Anon Grenjö ADK Övning okober 20 3 / 38
2/3 / 0/ /2 / / /7 2 Anon Grenjö ADK Övning okober 20 3 / 38
2/3 / 0/ /2 / / /7 2 Anon Grenjö ADK Övning okober 20 3 / 38
2/3 / 0/ /2 / / /7 2 Anon Grenjö ADK Övning okober 20 3 / 38
2/3 / / 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 4 / 38
2/3 / / 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 4 / 38
Anag a vi redan har hia de maximala flöde i en graf. Bekriv en algorim om hiar e ny maximal flöde om... a)...kapacieen läng en vi kan ökar med en enhe. b)...kapacieen läng en vi kan minkar med en enhe. I bägge fallen ka idkomplexieen vara linjär, dv O( V + E ). 2/3 / / 2/2 / / 7/7 Anon Grenjö ADK Övning okober 20 / 38
Vad händer om kapacieen ökar med en enhe? Om kapacieen ökar: Gör en ill ieraion i Ford-Fulkeron, dv lea efer en väg från ill i reflödegrafen. Finn de en väg å kan flöde öka läng denna väg. Finn de ingen väg å händer ingening; flöde är forfarande opimal. Anon Grenjö ADK Övning okober 20 / 38
Vad händer om kapacieen ökar med en enhe? 2/3 / /2 / 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 7 / 38
Vad händer om kapacieen ökar med en enhe? 2/3 / /2 / 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 7 / 38
Vad händer om kapacieen ökar med en enhe? 2/3 / /2 / 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 7 / 38
Vad händer om kapacieen ökar med en enhe? 2/3 / /2 / 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 7 / 38
Vad händer om kapacieen ökar med en enhe? 3/3 2/2 / 2/2 / / 7/7 3 2 2 7 Anon Grenjö ADK Övning okober 20 8 / 38
Vad händer om kapacieen ökar med en enhe? 3/3 2/2 / 2/2 / / 7/7 3 2 2 7 Anon Grenjö ADK Övning okober 20 8 / 38
Vad händer om kapacieen minkar med en enhe? Om kapacieen mellan u och v minkar å finn de re fall: Om kapacieen ej var full unyjad, å händer ingening. Annar å kapa en obalan när vi minkar kapacieen: de går in en enhe för mycke i u och de går u en enhe för mycke i v. Förök leda om en enhe flöde från u ill v på någo anna ä. Lea en ny väg från u ill v i reflödegrafen. Om dea ej går å måe flöde minka. 2/3 2/2 / / 0/0 2/2 / / 7/7 Anon Grenjö ADK Övning okober 20 20 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 / / 0/0 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 2 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 / / 0/0 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 2 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 / / 0/0 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 2 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 / / 0/0 2/2 / / 7/7 2 2 7 Anon Grenjö ADK Övning okober 20 2 / 38
Vad händer om kapacieen minkar med en enhe? 3/3 / 0/0 2/2 / / 7/7 3 2 7 Anon Grenjö ADK Övning okober 20 22 / 38
Vad händer om kapacieen minkar med en enhe? 3/3 / 0/0 2/2 / / 7/7 3 2 7 Anon Grenjö ADK Övning okober 20 22 / 38
Vad händer om kapacieen minkar med en enhe? Om kapacieen mellan u och v minkar å finn de re fall: Om kapacieen ej var full unyjad, å händer ingening. Annar å kapa en obalan när vi minkar kapacieen: de går in en enhe för mycke i u och de går u en enhe för mycke i v. Förök leda om en enhe flöde från u ill v på någo anna ä. Lea en ny väg från u ill v i reflödegrafen. Om dea ej går å måe flöde minka. 2/3 / / 2/2 / / 7/7 Anon Grenjö ADK Övning okober 20 23 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Vad händer om kapacieen minkar med en enhe? 2/3 /3 / / 2/2 / / / 7/7 /7 2 2 7 Anon Grenjö ADK Övning okober 20 24 / 38
Uppgif 3: Eulercykel Definiion En Eulercykel är en luen ig om paerar varje kan exak en gång. Sa Alla hörn i G har jämn gradal. De exierar en Eulercykel i G. Uppgif: Konruera en algorim om give en graf där alla hörn har jämn gradal hiar en Eulercykel. Algorimen ka ha idkomplexie O(n). Anon Grenjö ADK Övning okober 20 2 / 38
Uppgif 3: Eulercykel Idé: Börja i e hörn u, raverera grafen (på djupe), forä ill du öer på u igen. Beraka ökigen P du gå läng. De finn vå fall: Aningen beår P av alla kaner. I å fall är vi klara. Annar, a bor P från grafen. De åerår nu en eller flera ammanhängande komponener av grafen. Alla hörn har forfarande jämn gradal, å de måe finna en Eulercykel i varje komponen. Hia nu rekuriv en Eulercykel i varje komponen, och ammanfoga dea med P. Hur gör vi dea på linjär id? Anon Grenjö ADK Övning okober 20 2 / 38
Uppgif 3: Eulercykel Vi definierar vå ycken pelare : P och P2. Båda arar i v. P har om jobb a kapa igen P, märka varje kan om paera, och foräa ill hen kommer illbaka ill v. P2: jobb är a följa i P: pår. Konrollerar om alla kaner från hörnen är märka. Om de finn omärka kaner från e hörn u å finn de en ouforkad del av grafen där. P2 ropar då på P, om på amma ä får hia en ny ig om börjar och luar i u. P2 går denna nya ig innan hen foräer från u läng P. Till lu kommer P2 ha beök alla kaner exak en gång! Vägen P2 har gå är allå en Eulercykel. Varken P eller P2 kommer ha gå läng amma kan mer än en gång = idkomplexie O(n). Anon Grenjö ADK Övning okober 20 27 / 38
Uppgif 3: Eulercykel EulerCycle(G) = cycle {} chooe edge (, ) mark (, ) pah PahFinder(G,, ) Sraggler(pah) reurn cycle PahFinder(G, ar, cur) = append(cur, pah) while cur ar do chooe unmarked edge (cur, v) mark (cur, v) append(v, pah) cur v reurn pah Sraggler(pah) = while pah do u nex(pah) append(u, cycle) for all edge (u, v) do if unmarked (u, v) hen mark (u, v) p PahFinder(G, u, v) Sraggler(p) Anon Grenjö ADK Övning okober 20 28 / 38
Uppgif 4: Julklappfördelning Uppgif: En pappa ka ge ina n barn varin julklapp. Varje barn har krivi en önkelia. Pappan vill ge varje barn en julklapp från barne önkelia. Han vill dock ine ge amma julklapp ill flera barn. Konruera och analyera en effekiv algorim om löer dea problem. Anag a de finn hög m aker på varje önkelia. Anon Grenjö ADK Övning okober 20 29 / 38
Uppgif 4: Julklappfördelning Bipari machning. Kan löa med hjälp av en algorim för maximal flöde. Tidkomplexie: O(nm) kaner, O(n + m) hörn, å varje ökning ar O(nm) id. Machningen är av orlek hög n. Varje lyckad ökning förbärar får machning med. = hög n ökningar. Den oala idkomplexieen blir O(n 2 m). Anon Grenjö ADK Övning okober 20 30 / 38
Repeiion Tidkomplexie, övre/undre gräner Tidkomplexie Säg a vi analyerar en algorim. Lå T(n) vara iden de ar för den a löa e problem av orlek n. Om vi gör en noggrann analy av algorimen kanke vi kan via a T(n) Θ(n log n). Ofa å är de dock vår a göra en å noggrann analy a vi kan använda Θ. Iälle kan vi göra uppkaningar för a hia en övre eller undre grän för idkomplexieen. De lär.ex. vara beydlig enklare a via T(n) O(n 2 ) och T(n) Ω(n). I prakiken bryr vi o ofa me om a vi har en illräcklig låg övre grän för algorimen komplexie. Anon Grenjö ADK Övning okober 20 3 / 38
Repeiion Tidkomplexie, övre/undre gräner Tidkomplexie i vära falle Men idkomplexieen för en algorim kan bero av mer än bara indaaorleken n. Den kan ockå bero på hur indaa er u. Hiil i kuren har vi ofa analyera algorimer för vära möjliga indaa, dv för vära falle. Noera a dea ine har någo a göra med huruvida vi använder O, Ω eller Θ. De kan.ex. både vara inrean a hia en undre grän och en övre grän för idkomplexieen i vära falle för en algorim. Anon Grenjö ADK Övning okober 20 32 / 38
Repeiion Tidkomplexie, övre/undre gräner Undre gräner för problem Man kan ockå via undre gräner för problem. A e problem har den undre gränen Ω(f (n)) beyder a varje änkbar algorim om löer probleme måe ha en idkomplexie om ligger i Ω(f (n)). Om man har konruera en algorim kan man vilja underöka om undre och övre grän ammanfaller, dv om den undre gränen för probleme är amma om den övre gränen för algorimen. Om å är falle kan man konaera a algorimen har opimal idkomplexie. Anon Grenjö ADK Övning okober 20 33 / 38
Uppgif : Undre grän för ökning i orerad array Binärökning i en orerad array med n al ar om bekan iden O(log n). Bevia a Ω(log n) ockå är en undre grän för anale jämföreler om kräv för dea problem (i vära falle). Vi vill allå via a oave vilken algorim vi har (å länge den bygger på a jämföra elemenen) å kan den aldrig vara nabbare än logarimk. Anon Grenjö ADK Övning okober 20 34 / 38
Uppgif : Undre grän för ökning i orerad array Noera! Som indaa har vi en orerad array A av orlek n med elemen a, a 2,..., a n, am e al x om är de vi öker efer. Lå o bygga e beluräd för en godycklig jämförelebaerad ökningalgorim. Algorimen måe börja med a välja e al a i a jämföra x med. Om x = a i är vi klara. Annar har vi vå fall: x < a i och x > a i. Beroende på reulae ar algorimen belu om a aningen foräa med e al a j eller e al a k, ov... Hur många noder finn de i räde? n ycken. Träde ueende/rukur beror enda på algorimen, ej på indaa. Indaa avgör vilken väg i räde vi ar. Anon Grenjö ADK Övning okober 20 3 / 38
Uppgif : Undre grän för ökning i orerad array Exempel Hur er beluräde u för linjärökning? Vi vill hia en undre grän för probleme ökning i orerad array i vära falle. Dv en undre grän om varje änkbar algorim uppfyller (för i vära fall). Eferom vi öker en undre grän å berakar vi den bäa algorimen om eoreik e kulle kunna finna. (Om denna uppfyller den undre gränen å måe ju alla andra algorimer ockå göra de.) Vi vill allå analyera de beluräd där den länga vägen (movarande vära indaa) är å kor om möjlig. Anon Grenjö ADK Övning okober 20 3 / 38
Uppgif : Undre grän för ökning i orerad array Vi vill allå analyera de beluräd där den länga vägen (movarande vära indaa) är å kor om möjlig. Dea måe allå vara e balanera binärräd! Kom ihåg: i e balanera binärräd å är alla lövnoder på amma djup (å när om på en killnad, ifall anale noder ine är en våpoen). Anal noder är n. Länga vägen = höjden på räde log n. Anale jämföreler i vära falle måe allå vara log n. Den bäa änkbara algorimen för probleme har idkomplexieen Θ(log n) i vära falle. Sålede måe Ω(log n) vara en undre grän för alla algorimer om löer probleme. Anon Grenjö ADK Övning okober 20 37 / 38
Näa vecka Blanda på ema algorimkonrukion Inlämning och redovining av labbeori 3. Anon Grenjö ADK Övning okober 20 38 / 38