Asymptotisk komplexitetsanalys (4 per sida)

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