Algoritmer, datastrukturer och komplexitet

Relevanta dokument
Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Dekomposition och dynamisk programmering

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

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

Magnus Nielsen, IDA, Linköpings universitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

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

Tommy Färnqvist, IDA, Linköpings universitet

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

Sökning och sortering

Algoritmer, datastrukturer och komplexitet

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

Föreläsning 11: Beräkningsgeometri

Föreläsning Datastrukturer (DAT037)

Föreläsning 5 Innehåll

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 8 Datastrukturer (DAT037)

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Föreläsning 8 Datastrukturer (DAT037)

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

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

Programmering för språkteknologer II, HT2014. Rum

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

Algoritmer, datastrukturer och komplexitet

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

Föreläsning 3: Dekomposition. Dekomposition

Programkonstruktion och Datastrukturer

Föreläsning 11 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

Föreläsning 5: Grafer Del 1

Dugga Datastrukturer (DAT036)

Föreläsningsanteckningar F6

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

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

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

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

Algoritmer, datastrukturer och komplexitet

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

Komplexitetsklasser och repetition

Asymptotisk komplexitetsanalys

Tentamen TEN1 HI

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

Tentamen Datastrukturer, DAT037 (DAT036)

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

Lösningar Datastrukturer TDA

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Föreläsning Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 5: Dynamisk programmering

Några svar till TDDC70/91 Datastrukturer och algoritmer

Rekursion och induktion för algoritmkonstruktion

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

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

Tentamen Datastrukturer (DAT036)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 12+13: Approximationsalgoritmer

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

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

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

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

Fredag 10 juni 2016 kl 8 12

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Tentamen Datastrukturer (DAT036)

Föreläsning 13 Datastrukturer (DAT037)

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

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

Föreläsning 4 Datastrukturer (DAT037)

Tildatenta Lösningsskiss

Datastrukturer. föreläsning 2

Föreläsning 13. Rekursion

Föreläsning 13 Innehåll

Föreläsning 13. Träd

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Datastrukturer D. Föreläsning 2

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

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

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

Föreläsning 11 Innehåll

Föreläsning 7 Datastrukturer (DAT037)

Problemlösning och algoritmer

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Rekursion och induktion för algoritmkonstruktion

Transkript:

Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23

Översikt Kursplanering Ö5: Grafalgoritmer och undre gränser F16: Sortering i linjär tid F17: Textsökning F18: Polynom och FFT Ö6: Algoritmkonstruktion F19: Probabilistiska algoritmer Deadline Mästarprov 1 F20: Reduktioner Ö7: Probabilistiska algoritmer, reduktioner Anton Grensjö ADK Övning 6 9 oktober 2015 2 / 23

Idag Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 Anton Grensjö ADK Övning 6 9 oktober 2015 3 / 23

Uppgift 1: Inuti eller utanför? P är en konvex n-hörnig polygon. Beskrivs som en array av hörnen p 1, p 2,..., p n i medurs ordning. Konstruera en algoritm som talar om ifall en given punkt q ligger inuti P. Algoritmen ska gå i tid O(log n) i värsta fallet. Anton Grensjö ADK Övning 6 9 oktober 2015 4 / 23

Uppgift 1: Inuti eller utanför? Lösning 1 En idé: Dra en stråle från punkten q. Räkna antalet gånger som den skär polygonen. Udda antal = q ligger inuti P. Jämnt antal = q ligger utanför P. Fungerar även för icke-konvexa polygoner! Finns ett problem. Vad? Tidskomplexitet O(n). 2 En annan idé: Genom att utnyttja att P är konvex kan vi hitta en snabbare algoritm. Konvexa polygoner kan delas in i trianglar. Kanske kan vi använda dekomposition? Anton Grensjö ADK Övning 6 9 oktober 2015 5 / 23

Uppgift 1: Inuti eller utanför? Lösning Idé: dela polygonen på mitten, kolla på vilken sida av snittet q ligger, rekursera. (Binärsökning/intervallhalvering.) Hur tar vi reda på vilken sida av en linje som en punkt ligger på? Linjär algebra. Låt v vara en vektor längs med linjen, och u vara en vektor från linjen till punkten. Betrakta kryssprodukten v u. Både v och u ligger i tavlans plan (säg xy-planet), så produkten måste peka antingen in i eller ut ur tavlan (den har endast z-komponent). Tecknet på z-komponenten avgör vilken sida av linjen som q ligger på. Hur beräknar vi kryssprodukten? Anton Grensjö ADK Övning 6 9 oktober 2015 6 / 23

Uppgift 1: Inuti eller utanför? Lösning Algoritmen: Välj ett hörn v 1. Dra en linje från v 1 till motsatt hörn, låt den dela polygonen i två delar. Kolla på vilken sida av snittet q ligger. Rekursera på den delen av polygonen. Fungerar ungefär som binärsökning. Basfall? Polygonen är endast en triangel! Lös med vår första idé på konstant tid. Tidskomplexitet: Varje steg går på konstant tid. Delen av polygonen vi tittar på halveras vid varje rekursivt anrop. ( n T(n) = T + O(1) = T(n) O(log n) 2) Anton Grensjö ADK Övning 6 9 oktober 2015 7 / 23

Uppgift 1: Inuti eller utanför? Pseudokod InsideConvex(P, q, l, u) = if u = l + 1 then / en triangel / välj en punkt q utanför triangeln p 1 p l p u if linjen q q skär exakt en av kanterna i triangeln then return inuti else return utanför else mid l+u 2 if q är på samma sida om linjen p 1 p mid som p mid+1 then return InsideConvex(P, q, mid, u) else return InsideConvex(P, q, l, mid) Algoritmen anropas med InsideConvex(P, q, 2, n). Anton Grensjö ADK Övning 6 9 oktober 2015 8 / 23

Uppgift 2: Sortering av små heltal Uppgift Konstruera en algoritm som sorterar n heltal som alla ligger i intervallet [1..n 3 ] i tid O(n) med enhetskostnad. Tid O(n)? Hur är det möjligt? Är inte Ω(n log n) en undre gräns till sorteringsproblemet? Undre gränsen Ω(n log n) gäller enbart för jämförelsebaserade sorteringsalgoritmer. Här vet vi dels att det är tal vi ska sortera, samt något om hur stora de är. Detta kan utnyttjas för att lösa problemet på linjär tid. Hint: tänk på räknesortering och radixsortering. Anton Grensjö ADK Övning 6 9 oktober 2015 9 / 23

Uppgift 2: Sortering av små heltal Lösning Representera talen som strängar i basen n. Varje tal kan skrivas med högst 3 siffror, och det finns n olika siffror. Lägg till inledande nollor så alla får längd 3. (Notera att specialfallet n 3 har fyra siffror (skrivs 1000). Behandla detta specialfall separat.) Tresiffriga tal = tre omgångar i radixsorteringen. Varje omgång sorterar talen efter en av dess tre siffror. Varje steg utförs med hjälp av räknesortering (stabil, se föreläsning 16). Börja med minst signifikanta siffran och fortsätt åt vänster. Se exempel på tavlan. Anton Grensjö ADK Övning 6 9 oktober 2015 10 / 23

Uppgift 2: Sortering av små heltal Tidskomplexitet Varje omgång räknesortering går på tiden O(n). Vi gör tre omgångar. = tidskomplexiteten är O(n) Anton Grensjö ADK Övning 6 9 oktober 2015 11 / 23

Uppgift 3: Hitta det saknade talet Uppgift På en fil ligger 999 999 999 tal, nämligen alla tal mellan 1 och 1 000 000 000, förutom ett av dem. Konstruera en algoritm som tar reda på vilket tal som saknas. Krav (låt n vara antalet tal): Minnesanvändning: O(1). Tidskomplexitet: O(n). Beräkningsmodell med 32-bitarsaritmetik. Anton Grensjö ADK Övning 6 9 oktober 2015 12 / 23

Uppgift 3: Hitta det saknade talet Vi betraktar först några enklare varianter av problemet. Om vi tillåter linjär minnesanvändning: Skapa en bitarray med ett element för varje tal mellan 1 och n. Iterera över alla tal i filen och sätt dess bit till 1. Vilket tal har ej fått sin bit satt? Om vi tillåter godtyckligt stora tal: Beräkna summan S av alla tal mellan 1 och n: S = n(n + 1) 2 Beräkna summan S av alla tal i filen. Det saknade talet är x = S S. Notera: Detta behöver analyseras med bitkostnad. Kräver mycket minne. Anton Grensjö ADK Övning 6 9 oktober 2015 13 / 23

Uppgift 3: Hitta det saknade talet Lösning Så hur löser vi problemet med alla givna krav (linjär tid, konstant minne, 32-bitarsaritmetik)? Ledning: Vi kan inspireras av den senast nämnda lösningen. Beräkna summan S av talen 1,..., n, modulo n (vi antar n jämnt). n(n + 1) S = = n2 2 2 + n 2 n (mod n) 2 Beräkna summan S av alla tal i filen, modulo n. Låt x vara det saknade talet. Vi måste då ha: S S + x (mod n) x S S n 2 S (mod n) Vi kan alltså nu enkelt beräkna x med hjälp av formeln ovan. I fallet n = 10 9 : ( ) 3n x 2 S %10 9 Anton Grensjö ADK Övning 6 9 oktober 2015 14 / 23

Uppgift 3: Hitta det saknade talet Alternativ variant Alternativ variant av problemet: Vi betraktar nu alla möjliga n-bitarsheltal, dvs 0, 1,..., 2 n 1. Alla dessa tal utom ett står nedskrivet i en fil. Lista ut vilket med linjär tid och konstant minne. Lösning: Vad händer om vi tar xor av alla tal? Svar: 0. Varför? Vad händer om vi tar xor av alla tal utom ett? Svar: Vi får det saknade talet! Varför? Testa med n = 3! Anton Grensjö ADK Övning 6 9 oktober 2015 15 / 23

Uppgift 4: Komplex multiplikation Hur multiplicerar man vanligen komplexa tal? z = (a + bi)(c + di) = ab + adi + bci bd = (ac bd) + i(ad + bc) Dvs: Re(z) = ac bd, Im(z) = ad + bc. Fyra multiplikationer och två additioner. Uppgift Multiplikationer är dyrare än additioner, så det lönar sig att minimera antalet multiplikationer. Hitta en algoritm som bara använder tre multiplikationer för att multiplicera två komplexa tal. Anton Grensjö ADK Övning 6 9 oktober 2015 16 / 23

Uppgift 4: Komplex multiplikation z = (a + bi)(c + di) = (ac bd) + i(ad + bc) Knep: definiera och beräkna följande: A 1 = (a + b)(c d) = ac ad + bc bd Vi får att A 2 = ad, A 3 = bc Re(z) = A 1 + A 2 A 3 Im(z) = A 2 + A 3 Totalt: 3 multiplikationer och 5 additioner. Anton Grensjö ADK Övning 6 9 oktober 2015 17 / 23

Uppgift 5: Binärträd med speglad struktur Två binärträd har speglad struktur om det ena är en spegelbild av det andra. Med andra ord, om man byter höger mot vänster i det ena trädet så blir de strukturekvivalenta. Konstruera en dekompositionsalgoritm som avgör ifall två binärträd har speglad struktur. Anton Grensjö ADK Övning 6 9 oktober 2015 18 / 23

Uppgift 5: Binärträd med speglad struktur Lösning Rekursiv idé: Subträden rotade i u resp. v är speglade omm det vänstra subträdet till u är en spegelbild av det högra subträdet till v, och vice versa. Basfall: antingen u eller v är det tomma subträdet. Då är de spegelbilder om och endast om båda är tomma. Vi anropar alltså vår rekursiva algoritm på roten i respektive träd, och den kommer traversera båda träden samtidigt (fast spegelvänt) och jämföra strukturen. SpegladeTräd(T 1, T 2 )= if T 1 =NIL or T 2 =NIL then return T 1 =NIL and T 2 =NIL return SpegladeTräd(T 1.left,T 2.right) and SpegladeTräd(T 1.right,T 2.left) Tidskomplexitet: O(n). Anton Grensjö ADK Övning 6 9 oktober 2015 19 / 23

Uppgift 6: Partyproblemet! Du vill hålla party. Till din hjälp har du en lista med n personer, ett heltal k och en lista över vilka av personerna på listan som känner varandra. Du vill bjuda så många av personerna som möjligt, men för att alla ska trivas så bestämmer du att varje inbjuden gäst måste känna minst k av de övriga gästerna. Vilka personer ska du bjuda? Konstruera och analysera en algoritm som löser detta problem i linjär tid i indatas storlek. Anton Grensjö ADK Övning 6 9 oktober 2015 20 / 23

Uppgift 6: Partyproblemet! Lösning Vad är en lämplig representation av problemet? Se det som en graf! Personerna är hörnen, och det går kanter mellan de personer som känner varandra. Lösningen är den största delgrafen där varje hörn har minst gradtal k. Se exempel. Allmän strategi: Om det finns något hörn med gradtal lägre än k så kan det ej vara med i lösningen. Ta bort det hörnet. (Detta kan leda till att ett annat hörn nu har för lågt gradtal). Upprepa tills det bara finns hörn med lägst grad k kvar. Anton Grensjö ADK Övning 6 9 oktober 2015 21 / 23

Uppgift 5: Partyproblemet! Pseudokod foreach x V do if d x < k then Q.Put(x) while not Q.Empty() do x Q.Get() foreach (x, v) x.kantlista do if d v k then d v d v 1 if d v < k then Q.Put(v) write Lösningen består av: foreach x V do if d x k then write x Tidskomplexitet: O(n + m). Korrekthet Varje hörn som skrivs ut har minst k grannar kvar i grafen. Inget hörn som inte har färre än k grannar kvar i grafen har plockats bort = lösningen måste vara maximal. Anton Grensjö ADK Övning 6 9 oktober 2015 22 / 23

Nästa vecka Nästa vecka Probabilistiska algoritmer Reduktioner Anton Grensjö ADK Övning 6 9 oktober 2015 23 / 23