Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk komplexitetsanalys Lars Larsson VT 2007 Lars Larsson Asymptotisk komplexitetsanalys 1 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning 1 Bakgrund och motivation 2 Mål 3 Asymptotisk analys 4 Allmänt om komplexitet 5 Sammanfattning Lars Larsson Asymptotisk komplexitetsanalys 2 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Målet med denna föreläsning är att studenterna skall: ha förvärvat kunskap om hur asymptotisk analys av algoritmer går till, Förhoppningsvis har behovet av en matematisk och korrekt modell .. ⌣ framgått i förra föreläsningen! veta vad O-begreppet är (inklusive dess definition) och kunna analysera en godtycklig algoritm asymptotiskt. Lars Larsson Asymptotisk komplexitetsanalys 3 Lars Larsson Asymptotisk komplexitetsanalys 4 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk analys är ett matematiskt sätt att analysera en algoritms komplexitet. Stegen är: 1 Asymptotisk analys är ett matematiskt sätt att analysera en algoritms komplexitet. Stegen är: Med utgångspunkt i pseudokoden räkna primitiva operationer. Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk komplexitetsanalys ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 1 Med utgångspunkt i pseudokoden räkna primitiva operationer. 2 Ställa upp ett tidsuttryck T (n) för hur många primitiva operationer som behövs relativt storleken på indatan (n) i värsta fall (även bästa och medelfallet kan vara intressanta). Observera att vi i begreppet indata också räknar in mängden data vi har i vår datastruktur för tillfället. 5 Lars Larsson ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk analys är ett matematiskt sätt att analysera en algoritms komplexitet. Stegen är: Asymptotisk komplexitetsanalys ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Asymptotisk analys är ett matematiskt sätt att analysera en algoritms komplexitet. Stegen är: 1 Med utgångspunkt i pseudokoden räkna primitiva operationer. 1 Med utgångspunkt i pseudokoden räkna primitiva operationer. 2 Ställa upp ett tidsuttryck T (n) för hur många primitiva operationer som behövs relativt storleken på indatan (n) i värsta fall (även bästa och medelfallet kan vara intressanta). Observera att vi i begreppet indata också räknar in mängden data vi har i vår datastruktur för tillfället. 2 Ställa upp ett tidsuttryck T (n) för hur många primitiva operationer som behövs relativt storleken på indatan (n) i värsta fall (även bästa och medelfallet kan vara intressanta). Observera att vi i begreppet indata också räknar in mängden data vi har i vår datastruktur för tillfället. 3 Förenkla tidsuttrycket. 3 Förenkla tidsuttrycket. 4 Ta fram en funktion som begränsar tidsuttrycket ovanifrån. Lars Larsson Asymptotisk komplexitetsanalys 5 5 Lars Larsson Asymptotisk komplexitetsanalys 5 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Vi associerar en kostnad till varje operation i pseudokoden. Följande operationer har kostnaden 1: Primitiva operationer är en grov förenkling – i vanliga datorer tar operationerna olika lång tid, beroende på hårdvara och andra faktorer. Vad vi dock får är en maskinoberoende analys – alltså en analys som är giltig även i framtiden. Funktions-/metodanrop. Returnera från en funktion/metod. Utföra aritmetiska operationer (+, −, ×, /). Jämförelse mellan tal. Referera till ett objekt eller en variabel. Indexera i en array. Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk komplexitetsanalys 6 ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk komplexitetsanalys ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 function arrayMax(A, n): input: an array A of n integer values output: the maximum integer in A function arrayMax(A, n): input: an array A of n integer values output: the maximum integer in A currentMax := A[0] currentMax := A[0] 1+1+1 for (i = 1 to n - 1) do if (currentMax < A[i]) then currentMax := A[i] for (i = 1 to n - 1) do if (currentMax < A[i]) then currentMax := A[i] return currentMax return currentMax Lars Larsson Asymptotisk komplexitetsanalys 8 Lars Larsson 7 Asymptotisk komplexitetsanalys 8 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 function arrayMax(A, n): input: an array A of n integer values output: the maximum integer in A function arrayMax(A, n): input: an array A of n integer values output: the maximum integer in A currentMax := A[0] 1+1+1 currentMax := A[0] 1+1+1 for (i = 1 to n - 1) do 1+n(1+1)+(n-1)*([]+1+1+1) if (currentMax < A[i]) then currentMax := A[i] for (i = 1 to n - 1) do 1+n(1+1)+(n-1)*([]+1+1+1) if (currentMax < A[i]) then 1+1+1+1+1 currentMax := A[i] 1+1+1 return currentMax return currentMax 1+1 Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk komplexitetsanalys 8 ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk komplexitetsanalys 8 ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 function arrayMax(A, n): input: an array A of n integer values output: the maximum integer in A Att jämföra kurvor av T (n) är både svårt och ger massor data att titta på. Vi gör en asymptotisk analys av funktionen. Detta gör vi genom förenkling och avrundning av T (n). currentMax := A[0] 1+1+1 for (i = 1 to n - 1) do 1+n(1+1)+(n-1)*([]+1+1+1) if (currentMax < A[i]) then 1+1+1+1+1 currentMax := A[i] 1+1+1 Vi avrundar helt enkelt 3n2 till n2 och 5000 till 1. return currentMax 1+1 T (n) = 3 + 1 + 2 × n + (n − 1) × 11 + 2 = 13n − 3 Lars Larsson Asymptotisk komplexitetsanalys 8 Lars Larsson Asymptotisk komplexitetsanalys 9 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Vi använder oss av O-begreppet (uttalas ”stora ordo”), som kan förstås intuitivt med hjälp av figuren där vi ser att f (n) begränsas av c × g (n), då n ≥ n0 (punkten där de skär varandra). Vi säger att f (n) är O(g (n)). Definition Givet funktionerna f (n) och g (n) säger vi att f (n) är O(g (n)) om och endast om f (n) ≤ c × g (n) för n ≥ n0 och c > 0 och n0 ≥ 1. 250 f(x) c * g(x) 200 Denna definition är viktig! 150 100 50 0 0 1 2 3 Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning 4 5 6 7 Asymptotisk komplexitetsanalys 10 ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning En viktig poäng att beakta är att O(g (n)) är en mängd funktioner, som alla har egenskapen definitionen handlar om. Asymptotisk komplexitetsanalys 11 ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Några exempel på förenklingen: Låt oss återgå till vår funktion T (n) = 13n − 3. Vi ska hitta en funktion som begränsar (alltså alltid är större än, efter ett visst värde på n) T (n). De är uppenbarligen oändligt många – så vi är intresserad av den ”minsta”. 10n5 + 3n2 + 10000 är O(n5 ), 7n3 + 50n2 + 4 × log(n) är O(n3 ) och 13n − 3 är O(n). Skippa allting utom den snabbast växande termen i funktionen. Mycket enklare! Men vi måste ta hänsyn till c och n0 också! Ta bort konstanta faktorer. Lars Larsson Asymptotisk komplexitetsanalys 12 Lars Larsson Asymptotisk komplexitetsanalys 13 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning T (n) = 13n − 3 är O(n) omm vi hittar värden på c och n0 som uppfyller kraven från definitionen. c = lim n→∞ ”Algoritm” för asymptotisk analys Primitiva operationer Ta fram ett uttryck T (n) Behandla T (n) O-begreppet Förenkling av T (n) c och n0 T (n) = 13n − 3 är O(n) omm vi hittar värden på c och n0 som uppfyller kraven från definitionen. 13n − 3 3 f (n) + 1 = 14 + 1 = lim + 1 = lim 13 − n→∞ n→∞ g (n) n n c = lim n→∞ 13n − 3 3 f (n) + 1 = 14 + 1 = lim + 1 = lim 13 − n→∞ n→∞ g (n) n n För n ≥ n0 ska det alltså gälla att 13n − 3 ≤ 14n. Ett lämpligt värde på n0 är således exempelvis 1. Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Asymptotisk komplexitetsanalys 14 Lars Larsson Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Speciella klasser av problem Begränsningar i O-analys Genvägen till O Vi har vissa namngivna klasser av problem. Dessa är i stigande komplexitet: Asymptotisk komplexitetsanalys 14 Speciella klasser av problem Begränsningar i O-analys Genvägen till O Generellt gäller att vi vill ha en så låg komplexitet som möjligt, och O-begreppet hjälper oss jämföra algoritmer. Men det finns ett problem! Konstanta O(1) Logaritmiska O(log(n)) Linjära O(n) Kvadratiska O(n2 ) Polynoma O(nk ), k ≥ 1 Exponentiella O(an ), a ≥ 1 Lars Larsson Asymptotisk komplexitetsanalys 15 Lars Larsson Asymptotisk komplexitetsanalys 16 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Speciella klasser av problem Begränsningar i O-analys Genvägen till O Generellt gäller att vi vill ha en så låg komplexitet som möjligt, och O-begreppet hjälper oss jämföra algoritmer. Men det finns ett problem! Ofta kan vi bara titta på en algoritm för att få en grov bild av dess komplexitet: Att initiera en array eller gå igenom en lista elementvis är O(n). Stora konstanter döljs av förenklingen: exempelvis är 10000n en linjär algoritm. Den är ju dock knappast bättre (för små värden på n) än en algoritm som kräver 7n2 steg, trots att den senare ju är kvadratisk. Lars Larsson Asymptotisk komplexitetsanalys Nästlade slingor i k nivåer som alla är beroende av indatans storlek är O(nk ). 16 Dagens föreläsning Bakgrund och motivation Mål Asymptotisk analys Allmänt om komplexitet Sammanfattning Vi har sett hur man räknar ut och jämför komplexiteten av algoritmer. O är en övre gräns för tillväxten av funktionen T (n) som visar hur många primitiva operationer en viss algoritm kräver, relativt storleken n på indatan. Lars Larsson Asymptotisk komplexitetsanalys Speciella klasser av problem Begränsningar i O-analys Genvägen till O 18 Lars Larsson Asymptotisk komplexitetsanalys 17