Algoritmit 2 - Luento 1 – Ti 15.3.2016

Algoritmit 2
Luento 1 – Ti 15.3.2016
Timo Männikkö
Luento 1
• Algoritmi
• Algoritmin valinta
• Algoritmin analysointi
• Algoritmin suoritusaika
• Peruskertaluokkia
• Kertaluokkamerkinnät
• Kertaluokkien ominaisuuksia
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
2/24
Algoritmi
• Askel askeleelta suoritettava menetelmä, tekniikka tai
ohje jonkin tehtävän suorittamiseksi tai jonkin
ongelman ratkaisemiseksi
Algoritmin vaatimuksia:
• Askelmäärä äärellinen
• Antaa oikean vastauksen
• Riittävän tehokas
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
3/24
Ongelman ratkaiseminen
Ongelman esiintymä:
• Ongelma tietyillä lähtötiedoilla
• Samalla ongelmalla eri esiintymiä
Voidaan haluta:
• Paras ratkaisu useiden mahdollisten ratkaisujen
joukosta
• Hyvä ratkaisu, vaikka ei välttämättä paras
• Parempi kuin tunnetut ratkaisut
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
4/24
Algoritmin tehokkuus
Algoritmin tarvitsemat resurssit:
• Muistitila, kaistanleveys jne.
• Erityisesti suoritusaika
Algoritmin analysointi:
• Tehokkuuden selvittäminen
• Muutama pieni esiintymä
⇒ Resursseilla ei suurta merkitystä
• Suuri tai vaikea ongelma, useita esiintymiä
⇒ Algoritmi valittava huolella
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
5/24
Algoritmin valinta
• Halutaan valita paras tai riittävän hyvä algoritmi
• Empiirisesti:
Toteutetaan (ohjelmoidaan) algoritmit
• Mitataan suoritusaikaa tai jonkin muun resurssin
käyttöä
• Teoreettisesti:
• Määritellään matemaattisesti suoritusaika tai
jonkin muun resurssin käyttö
• Resurssin käyttö esitetään syöttötiedon koon
funktiona
•
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
6/24
Algoritmin valinta
Empiirinen tapa:
• Voidaan tehdä tarkkoja mittauksia
• Käytännössä hankalaa/työlästä/mahdotonta
Teoreettinen tapa:
• Riippumaton käytetystä tietokoneesta,
ohjelmointikielestä, toteutusympäristöstä,
ohjelmointitaidosta jne.
• Tehokkuutta ei kuitenkaan voida mitata esim.
sekunneissa
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
7/24
Algoritmin analysointi
Suoritusajan vaativuus:
• Lasketaan/arvioidaan algoritmin
askelien/operaatioiden lukumääriä
• Perusoperaationa useimmin suoritettava operaatio,
aikaa vievin operaatio tms.
• Esimerkiksi sijoitus, vertailu jne.
• Määrätään perusoperaatioiden lukumäärät
syöttötiedon koon funktiona
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
8/24
Algoritmin suoritusaika
Paras mahdollinen suoritusaika:
• Ei yleensä kiinnostava
Huonoin mahdollinen suoritusaika:
• Tarpeellinen, usein helposti laskettavissa
Keskimääräinen suoritusaika:
• Usein kiinnostavin, voi olla vaikea laskea
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
9/24
Algoritmin suoritusaika
• Invarianssiperiaate: Saman algoritmin eri toteutukset
eroavat tehokkuudeltaan toisistaan korkeintaan
vakiokertoimisen tekijän verran
• Algoritmin suoritusajan kertaluokka on t(n), jos on
olemassa vakio c > 0 ja algoritmin toteutus, joka
kykenee ratkaisemaan jokaisen kokoa n olevan
tehtävän esiintymän ajassa ct(n) aikayksikköä
• Kertaluokka t(n) kuvaa suoritusajan kasvunopeutta
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
10/24
Algoritmin suoritusaika
• Suoritusajan kasvunopeuden mukaan voidaan verrata
algoritmien suhteellisia tehokkuuksia
• Kun syöttötiedon koko kasvaa tarpeeksi suureksi,
kasvunopeus tulee merkittäväksi
• Puhutaan algoritmin suoritusajan asymptoottisesta
tehokkuudesta
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
11/24
Peruskertaluokkia
log n n n log n n2
n3
2n
0
1
0
1
1
2
1
2
2
4
8
4
2
4
8
16
64
16
3
8
24
64
512
256
4
16
64
256
4096
65536
5
32 160 1024 32768 4294967296
6
64 384 4096 262144 ≈ 1.8 · 1019
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
12/24
Ongelman ratkeavuus
• Käyttökelpoisia vain algoritmit, joiden suoritusaika
ongelman koon n suhteen kasvaa korkeintaan yhtä
nopeasti kuin jokin n:n polynomi
• Jos algoritmin suoritusaika kasvaa eksponentiaalisesti,
se soveltuu vain pienten ongelmien ratkaisuun
• Ratkeava ongelma: Löytyy algoritmi, jonka pahimman
tapauksen suoritusaika polynominen
• Ratkeamaton tai huonosti ratkeava ongelma:
Tunnetaan vain algoritmeja, joiden suoritusaika
eksponentiaalinen
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
13/24
Kertaluokkamerkintöjä
Asymptoottinen yläraja:
+
O(f (n)) = {t(n) : N → R | ∃c, n0 > 0 :
0 ≤ t(n) ≤ cf (n) ∀n ≥ n0 }
Asymptoottinen alaraja:
Ω(f (n)) = {t(n) : N → R + | ∃c, n0 > 0 :
0 ≤ cf (n) ≤ t(n) ∀n ≥ n0 }
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
14/24
Kertaluokkamerkintöjä
Asymptoottinen aito yläraja:
+
o(f (n)) = {t(n) : N → R | ∀c > 0 ∃n0 > 0 :
0 ≤ t(n) < cf (n) ∀n ≥ n0 }
Asymptoottinen aito alaraja:
ω(f (n)) = {t(n) : N → R + | ∀c > 0 ∃n0 > 0 :
0 ≤ cf (n) < t(n) ∀n ≥ n0 }
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
15/24
Kertaluokkamerkintöjä
Asymptoottinen tarkka raja:
+
Θ(f (n)) = {t(n) : N → R | ∃c1 , c2 , n0 > 0 :
0 ≤ c1 f (n) ≤ t(n) ≤ c2 f (n) ∀n ≥ n0 }
• Usein merkitään t(n) = Θ(f (n)) oikean merkinnän
t(n) ∈ Θ(f (n)) sijaan
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
16/24
Esimerkki
2n2 ∈ O(n3 )
• ∃c, n0 > 0 : 0 ≤ 2n2 ≤ cn3 ∀n ≥ n0
• 2n2 ≤ cn3 ⇔ 2 ≤ cn
• Tosi kun valitaan esimerkiksi c = 2 ja n0 = 1
2n2 ∈ o(n3 )
• ∀c > 0 ∃n0 > 0 : 0 ≤ 2n2 < cn3 ∀n ≥ n0
• 2n2 < cn3 ⇔ 2 < cn ⇔ n > 2/c
• Tosi kun n0 valitaan siten että n0 > 2/c
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
17/24
Esimerkki jatkuu
2n2 ∈ Θ(n2 )
• ∃c1 , c2 , n0 > 0 : 0 ≤ c1 n2 ≤ 2n2 ≤ c2 n2 ∀n ≥ n0
• c1 n2 ≤ 2n2 ≤ c2 n2 ⇔ c1 ≤ 2 ≤ c2
• Tosi kun valitaan esimerkiksi c1 = c2 = 2 ja n0 = 1
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
18/24
Kertaluokkamerkinnät
• f ∈ O(g ) ⇔
f
• f
f
• f
f
on samaa tai alempaa kertaluokkaa kuin g
∈ Ω(g ) ⇔
on samaa tai ylempää kertaluokkaa kuin g
∈ Θ(g ) ⇔
on samaa kertaluokkaa kuin g
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
19/24
Kertaluokkien ominaisuuksia
• f (n) ∈ Θ(g (n))
⇔ f (n) ∈ O(g (n)) ja g (n) ∈ O(f (n))
⇔ f (n) ∈ Ω(g (n)) ja g (n) ∈ Ω(f (n))
• f (n) ∈ Θ(g (n)) ja g (n) ∈ Θ(h(n))
⇒ f (n) ∈ Θ(h(n))
• f (n) ∈ Θ(g (n)) ⇔ g (n) ∈ Θ(f (n))
• f (n) ∈ O(g (n)) ⇔ g (n) ∈ Ω(f (n))
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
20/24
Kertaluokkien ominaisuuksia
f (n)
• lim
=c >0 ⇒
n→∞ g (n)
(
f (n)
• lim
=0 ⇒
n→∞ g (n)
(
f (n)
• lim
=∞ ⇒
n→∞ g (n)
f (n) ∈ Θ(g (n))
f (n) ∈ O(g (n))
f (n) ∈
/ Θ(g (n))
f (n) ∈ Ω(g (n))
f (n) ∈
/ Θ(g (n))
• Jos raja-arvoa ei ole määritelty, kertaluokkapäätelmiä
ei voi tehdä
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
21/24
Esimerkki
f (n) = 50n2 + 25n + 10
50n2 + 25n + 10
2
lim
=
50
⇒
f
(n)
∈
Θ(n
)
2
n→∞
n
50n2 + 25n + 10
3
lim
=
0
⇒
f
(n)
∈
O(n
)
3
n→∞
n
50n2 + 25n + 10
lim
= ∞ ⇒ f (n) ∈ Ω(n)
n→∞
n
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
22/24
Raja-arvojen laskeminen
Määrittelemätön raja-arvo muotoa ” 00 ” tai ” ∞
∞”
⇒
L’Hôpitalin sääntö:
• Jos lim f (n) = lim g (n) = 0 tai ∞, mutta f 0 (n) ja
g 0 (n) ovat olemassa ja g 0 (n) 6= 0 kaikilla riittävän
suurilla n, niin
f (n)
f 0 (n)
lim
= lim 0
n→∞ g (n)
n→∞ g (n)
jos jälkimmäinen raja-arvo on olemassa
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
23/24
Esimerkki
n2
lim n = ?
n→∞ 2
• f (n) = n2 , g (n) = 2n
• lim f (n) = lim g (n) = ∞
• f 0 (n) = 2n, g 0 (n) = 2n ln 2
• lim f 0 (n) = lim g 0 (n) = ∞
• f 00 (n) = 2, g 00 (n) = 2n (ln 2)2
n2
2
lim n = lim n
=0
2
n→∞ 2
n→∞ 2 (ln 2)
⇒ n2 ∈ O(2n ), n2 ∈
/ Θ(2n )
Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016
24/24