TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Relevanta dokument
Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 5 Innehåll

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

Sökning och sortering

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

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

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

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

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

Programkonstruktion och Datastrukturer

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

Magnus Nielsen, IDA, Linköpings universitet

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

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

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

Föreläsning 1 Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

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

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning Datastrukturer (DAT036)

Asymptotisk komplexitetsanalys

Föreläsning 11 Datastrukturer (DAT037)

Tommy Färnqvist, IDA, Linköpings universitet

Rekursion och induktion för algoritmkonstruktion

Lösning av några vanliga rekurrensekvationer

Grundläggande datalogi - Övning 4

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Föreläsning 9 Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Sökning och sortering

Exempeltenta GruDat 2002/2003

Föreläsning 4 Datastrukturer (DAT037)

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

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

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

Datastrukturer. föreläsning 2

DAI2 (TIDAL) + I2 (TKIEK)

Dugga Datastrukturer (DAT036)

Föreläsning 5: Grafer Del 1

Lösningsförslag till tentamen Datastrukturer, DAT037,

Datastrukturer D. Föreläsning 2

Problemlösning och algoritmer

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning 10 Datastrukturer (DAT037)

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

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Tentamen i Algoritmer & Datastrukturer i Java

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Dekomposition och dynamisk programmering

Föreläsning 13 Datastrukturer (DAT037)

Medan ni väntar. 2. Skriv metoden. 3. Skriv metoden. Naturligtvis rekursivt och utan användning av Javas standardmetoder.

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

Algoritmer. Två gränssnitt

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 6: Introduktion av listor

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Rekursion. Koffman & Wolfgang kapitel 5

Föreläsning Datastrukturer (DAT037)

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

Rekursion och induktion för algoritmkonstruktion

DD1361 Programmeringsparadigm. Carina Edlund

Föreläsning 9: Talteori

Ekvivalensrelationer

Lösningsförslag till exempeltenta 1

Föreläsning 5. Rekursion

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer och algoritmer

Rekursion och induktion för algoritmkonstruktion

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

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

Fredag 10 juni 2016 kl 8 12

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Föreläsning 13 Datastrukturer (DAT037)

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

Algoritmer, datastrukturer och komplexitet

Föreläsning Datastrukturer (DAT037)

Datalogi, grundkurs 1

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

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

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Algoritmer, datastrukturer och komplexitet

Prestanda och skalbarhet

Tentamen Datastrukturer (DAT036)

Föreläsning 13. Rekursion

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Transkript:

TDDI16 Datastrukturer och algoritmer Algoritmanalys

2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys

2017-08-28 3 Skäl till att analysera algoritmer Förstå teoretisk grund Förutsäga prestanda Exakta matematiska modeller (inriktningen grundades av Donald Knuth) Ge garantier Jämföra algoritmer Asymptotisk komplexitetsanalys (Cormen et al.)

TDDI16 Datastrukturer och algoritmer Matematiska modeller Vilka operationer utförs i algoritmen? Hur ofta (hur många gånger)? 2017-08-28 4

2017-08-28 5 Matematiska modeller av exekveringstid

2017-08-28 6 Asymptotisk analys Vi är intresserade av vad som händer för stora input (jfr. asymptot när n ) Räknar kostnad som inte varierar med input-storlek som konstant T.ex. operationer som utförs i en loop ger tillsammans en kostnad c varje gång loopen körs

2017-08-31 7 Exempel for i = 0; i < A.size(); i++ sum = sum + A[i]; end Kostnad för uppräkning av i c 0 Kostnad för array-access, addition, variabeltilldelning c Samma kostnad c för varje varv c " T n O n För A med n element, kommer loopen att köras n varv: T n = n, T(n) O n T(n) Θ n?

2017-08-28 8 Fall att analysera Bästa fall T.ex. alla if-satser faller igenom med ett nej minst arbete igenom algoritmen T.ex. indata råkar redan vara sorterad Värsta fall T.ex. Elementet finns inte (fick söka igenom hela listan) Genomsnittsfall Amorterat

2017-08-30 9 Metoder Algebraiskt Räkna varv (iterationer) Lös rekurrens-ekvationer För rekursiva algoritmer Probabilistisk analys För randomiserade (icke-deterministiska) algoritmer Lista ut beteendet i förväntade fallet

Analysmetod 1: Algebraisk analys

2017-08-28 11 Exempel: Värstafallsanalys Beskriv resursförbrukningen (tid/minne) som en icke avtagande funktion av indatastorlek, n Ignorera konstanta faktorer Resulterar i T(n), M(n) Studera asymptotiskt beteende för stora indata Ignorera lägre ordningens termer Kan då bestämma vilken O kategori T(n) tillhör

2017-08-28 12 Värstafallsanalys Räkna operationer som upprepas i algoritmen Aritmetisk operation Jämföra tva tal Följa en objektreferens Anropa en funktion/metod/procedur Total kostnad för dessa: c n upprepningar n c

2017-08-28 13 Värstafallsanalys Loop (for... och while... ): tiden för villkoret plus kroppen ga nger antalet iterationer n t while = n (t cond + t body ) Notera att villkoret behöver utföras n ggr Försöka lägga tyngre beräkningar före, och sedan hålla resultat i en var som används i villkoret

2017-08-28 14 Värstafallsanalys Villkorssats (if...then...else): tiden för att evaluera villkoret plus den maximala tiden av de tva grenarna t if = t cond + max(t then, t else ) Hur skulle bästafallsanalysen se ut?

2017-08-28 15 Exempel: for-loop function FIND(A[1,...,n], t) for i 1 to n do if A[i] == t then return true return false probleminstans Hur ser värstafallsinstansen ut? Hur mycket tid ga r a t i värsta fallet? Vad är tidskomplexiteten i värsta fallet?

2017-08-28 16 Exempel: Två loopar function FIND(A[1,...,n], B[1,...,n], t) for i 1 to n do if A[i] == t then return true for i 1 to n do if B[i] == t then return true return false Hur ser värstafallsinstansen ut? Hur mycket tid ga r a t i värsta fallet? Vad är tidskomplexiteten?

2017-08-28 17 Exempel: Två nästlade loopar function COMMON(A[1,...,n], B[1,...,n]) for i 1 to n do for j 1 to n do if A[i] == B[ j] then return true return false Hur ser värstafallsinstansen ut? Hur mycket tid ga r a t i värsta fallet? Vad är tidskomplexiteten?

Binär sökning

2017-08-29 19 Linjär sökning Enkel genomsökning av en sekvens, t.ex.en array eller en lista Letar efter t Börja jämföra med första elementet Om match klar Annars fortsätt jämföra nästa element

2017-08-28 20 Binär sökning Förutsätter sorterad sekvens (Men samma strategi kan även användas på osorterade data inte för att söka, utan för att sampla ) Jämför med mitten-elementet Om mindre: sök till vänster Annars sök till höger Kan bortse ifrån halva datamängden efter varje varv

2017-08-28 21 Värstafallstid för binärsökning Värstafallsinstans när vi aldrig träffar på sökta elementet Max antal varv = antal ggr som input kan halveras T(n) O(log n)

2017-08-28 22 Bästafallstid för binärsökning Min antal varv = direktträff i mitten av input = 1 varv T(n) O(1), dvs. kontsant tid

2017-08-28 23 Medelfallstid för binärsökning Medel av max antal varv och minsta tänkbara antal varv, dvs. T(n) = ((log n) + 1) / 2 O(log n)

2017-08-29 24 Binär sökning Trivialt att implementera? Första algoritmen publicerad 1946 Första buggfria publicerad 1962 Java-bugg i Arrays.binarysearch() upptäckt 2006

2017-08-29 25 Java-implementationen med bugg public static int binarysearch(int[] a, int key) { int low = 0; int high = a.length - 1; while (low <= high) { int mid = (low + high) / 2; int midval = a[mid]; Funkar koden för riktigt stora data? } if (midval < key) low = mid + 1 else if (midval > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found

2017-08-29 26 Java-implementationen rätt public static int binarysearch(int[] a, int key) { int low = 0; int high = a.length - 1; while (low <= high) { int mid = low + ((high - low) / 2); int midval = a[mid]; } if (midval < key) low = mid + 1 else if (midval > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found

Analysmetod 2: Lös rekurrensekvationer

2017-08-28 28 Rekursiva algoritmer Anropar sig själva med en delmängd av input data Efterbearbetning av delresultat från retur från de rekursiva anropen ger också kostnad att ta hänsyn till T.ex. kostnad för att sammanfoga två dellistor som har sorterats var för sig i två rekursiva anrop Brukar behöva skriva ut en serie av summor, och sedan förenkla summan

2017-08-28 29 Binärsökning rekursiv form function BINSEARCH(v[a,...,b], x) if a < b then m (a+b)/2 if v[m].key < x then return BINSEARCH(v[m+1,...,b], x) else return BINSEARCH(v[a,...,m], x) if v[a].key = x then return a else return not found Svansrekursivt: delsvar vidarebefordras utan efterbearbetning Basfall: ett element i vektorn

2017-08-28 30 Värstafallsanalys av rekursiv binärsökning Test för basfallet sker vid varje varv (if-satsen): konstant kostnad c 0 Rekursiva fallet: konstant kostnad för uppdelning c T n = T / 0 + c om n > 1 rekursion uppdelning (inkl c 0 ) c 0 om n = 1 T n = 3 T n + c om n > 1 2

2017-08-28 31 Värstafallsanalys av rekursiv binärsökning Sätt in def av T(n) gång på gång, anta n 2 m T n = T n 2 + c = T n 2 " 2 + 2c = = T n + mc 2m = T 1 + mc = c 0 + mc = c 0 + log n c Eftersom analysen är exakt kan vi använda Θ T n Θ(log n)

2017-08-28 32 Master theorem Om a 1, b > 1, d > 0 och T(n) är monotont ökande T n = 3 at n b + f n, där f n Θ nk, n > 1 d n = 1 T n = Θ(n log b a ), om a > b k T n = Θ(n k log n ), om a = b k T n = Θ(n k ), om a > b k Uppdelning, och efterbearbetning, t.ex. kombinering av delsvar

Probabilistisk analys

2017-08-28 34 Medelfallsanalys Vanligt att man antar jämn sannolikhetsfördelning mellan värstafallsbeteende och bästa fall Medel blir då mittemellan Om annan fördelning: gör probabilistisk analys Anta en viss sannolikhetsfördelning för input Beräkna tidskomplexitet för förväntade fallet

Amorterad analys

2017-08-28 36 Amorterat Tar hänsyn till att viss kostsam operation utförs sällan (var x:te gång) Extra kostnaden kan fördelas över x körningar Ger mer realistisk uppskattning vid ojämnt overhead i algoritmen

2017-08-28 37 Exempel på amorterad (fördelad) analys Problem: Vill ha automatisk utökning av array när den har blivit full Algoritm: Sätt in och ta bort som vanligt Ifall array:en blivit full skapa en dubbelt så stor array och kopiera över gamla innehållet

2017-08-28 38 Exempel på amorterad (fördelad) analys Del av algoritmen Kopiera över gammalt till dubbelt så stor array Kostnad för att kopiera: O(n) Behöver bara göras vid fåtal tillfällen Fördela extra kostnaden på de n tidigare operationerna Amorterad kostnad för att skriva/läsa element: n + c = (1 + c) O(1) n

Nästa gång:.. www.liu.se