Asymptotisk komplexitetsanalys

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

Datastrukturer och algoritmer

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

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

Sökning och sortering

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

Föreläsning 5 Innehåll

Programkonstruktion och Datastrukturer

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

Föreläsning 2 Datastrukturer (DAT037)

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

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

Datastrukturer och algoritmer

Algoritmer, datastrukturer och komplexitet

Föreläsning 2 Datastrukturer (DAT037)

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

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

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

Datastrukturer D. Föreläsning 2

Datastrukturer och algoritmer

Algoritmer, datastrukturer och komplexitet

Datastrukturer. föreläsning 2

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

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

Analys av algoritmer. Beräkningsbar/hanterbar. Stora Ordo. O(definition) Datastrukturer och algoritmer. Varför analysera algoritmer?

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 1 Datastrukturer (DAT037)

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

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer D DAT 035/INN960

Algoritmer, datastrukturer och komplexitet

Föreläsning 13 Datastrukturer (DAT037)

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

Några svar till TDDC70/91 Datastrukturer och algoritmer

Tommy Färnqvist, IDA, Linköpings universitet

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

Algoritmer, datastrukturer och komplexitet

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

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

Rebecka Geijer Michaeli, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 2

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

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

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

Föreläsning 5. Rekursion

Föreläsning 5. Rekursion

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Dekomposition och dynamisk programmering

Pseudokod Analys av algoritmer Rekursiva algoritmer

Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 2

Komplexitetsklasser och repetition

Lösning av några vanliga rekurrensekvationer

Block 2: Lineära system

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

4 Fler deriveringsregler

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning Datastrukturer (DAT037)

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

Tentamen i Matematisk analys MVE045, Lösningsförslag

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning Datastrukturer (DAT036)

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

Algoritmer, datastrukturer och komplexitet

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.

Föreläsning 6 Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Matematisk kommunikation för Π Problemsamling

Tentamen Datastrukturer D DAT 036/INN960

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU

Magnus Nielsen, IDA, Linköpings universitet

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

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

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer för D2 DAT 035

Algoritmer, datastrukturer och komplexitet

Programkonstruktion och. Datastrukturer

Föreläsning 9 Innehåll

Programmering II (ID1019) :00-17:00

Lite Kommentarer om Gränsvärden

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Tentamen Matematisk grundkurs, MAGA60

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Dugga Datastrukturer (DAT036)

Sidor i boken f(x) = a x 2 +b x+c

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 4: Kombinatorisk sökning

samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV

y y 1 = k(x x 1 ) f(x) = 3 x

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lennart Rolandsson, Uppsala universitet, Ulrica Dahlberg och Ola Helenius, NCM

Algoritmer, datastrukturer och komplexitet

SF1625 Envariabelanalys Lösningsförslag till tentamen

Problemlösning och algoritmer

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

Vi ska titta närmare på några potensfunktioner och skaffa oss en idé om hur deras kurvor ser ut. Vi har tidigare sett grafen till f(x) = 1 x.

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning Datastrukturer (DAT037)

Rekursion och induktion för algoritmkonstruktion

Transkript:

1 Asymptotisk komplexitetsanalys 2 Lars Larsson 3 4 VT 2007 5 Lars Larsson Asymptotisk komplexitetsanalys 1 Lars Larsson Asymptotisk komplexitetsanalys 2 et med denna föreläsning är att studenterna skall: Förhoppningsvis har behovet av en matematisk och korrekt modell framgått i förra föreläsningen!.. ha förvärvat kunskap om hur asymptotisk analys av algoritmer går till, veta vad är (inklusive dess definition) och kunna analysera en godtycklig algoritm asymptotiskt. Lars Larsson Asymptotisk komplexitetsanalys 3 Lars Larsson Asymptotisk komplexitetsanalys 4

är ett matematiskt sätt att analysera en är ett matematiskt sätt att analysera en 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. är ett matematiskt sätt att analysera en 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. är ett matematiskt sätt att analysera en 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. 4 Ta fram en funktion som begränsar tidsuttrycket ovanifrån.

Vi associerar en kostnad till varje operation i pseudokoden. Följande operationer har kostnaden 1: 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. ä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. Lars Larsson Asymptotisk komplexitetsanalys 6 Lars Larsson Asymptotisk komplexitetsanalys 7 currentmax := A[0] for (i = 1 to n - 1) do if (currentmax < A[i]) then currentmax := A[i] return currentmax for (i = 1 to n - 1) do if (currentmax < A[i]) then currentmax := A[i] return currentmax

for (i = 1 to n - 1) do 1+n(1+1)+(n-1)*([]+1+1+1) if (currentmax < A[i]) then currentmax := A[i] return currentmax 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 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 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). Vi avrundar helt enkelt 3n 2 till n 2 och 5000 till 1. return currentmax 1+1 T(n) = 3 + 1 + 2 n + (n 1) 11 + 2 = 13n 3 Lars Larsson Asymptotisk komplexitetsanalys 9

Vi använder oss av (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 n 0 (punkten där de skär varandra). Vi säger att f (n) är O(g(n)). 250 200 f(x) c * g(x) 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 n 0 och c > 0 och n 0 1. 150 Denna definition är viktig! 100 50 0 0 1 2 3 4 5 6 7 Lars Larsson Asymptotisk komplexitetsanalys 10 Lars Larsson Asymptotisk komplexitetsanalys 11 En viktig poäng att beakta är att O(g(n)) är en mängd funktioner, som alla har egenskapen definitionen handlar om. 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. Skippa allting utom den snabbast växande termen i funktionen. Ta bort konstanta faktorer. Några exempel på förenklingen: 10n 5 + 3n 2 + 10000 är O(n 5 ), 7n 3 + 50n 2 + 4 log(n) är O(n 3 ) och 13n 3 är O(n). Mycket enklare! Men vi måste ta hänsyn till c och n 0 också! Lars Larsson Asymptotisk komplexitetsanalys 12 Lars Larsson Asymptotisk komplexitetsanalys 13

T(n) = 13n 3 är O(n) omm vi hittar värden på c och n 0 som uppfyller kraven från definitionen. T(n) = 13n 3 är O(n) omm vi hittar värden på c och n 0 som uppfyller kraven från definitionen. c = lim f (n) g(n) + 1 = lim 13n 3 n + 1 = lim ( 3) 13 + 1 = 14 n c = lim f (n) g(n) + 1 = lim 13n 3 n + 1 = lim ( 3) 13 + 1 = 14 n För n n 0 ska det alltså gälla att 13n 3 14n. Ett lämpligt värde på n 0 är således exempelvis 1. Lars Larsson Asymptotisk komplexitetsanalys 14 Lars Larsson Asymptotisk komplexitetsanalys 14 Vi har vissa namngivna klasser av problem. Dessa är i stigande komplexitet: Konstanta O(1) Logaritmiska O(log(n)) Linjära O(n) Kvadratiska O(n 2 ) Polynoma O(n k ),k 1 Exponentiella O(a n ),a 1 Generellt gäller att vi vill ha en så låg komplexitet som möjligt, och hjälper oss jämföra algoritmer. Men det finns ett problem! Lars Larsson Asymptotisk komplexitetsanalys 15 Lars Larsson Asymptotisk komplexitetsanalys 16

Generellt gäller att vi vill ha en så låg komplexitet som möjligt, och hjälper oss jämföra algoritmer. Men det finns ett problem! 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 7n 2 steg, trots att den senare ju är kvadratisk. 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). Nästlade slingor i k nivåer som alla är beroende av indatans storlek är O(n k ). Lars Larsson Asymptotisk komplexitetsanalys 16 Lars Larsson Asymptotisk komplexitetsanalys 17 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 18