You are on page 1of 50

Zklady algoritmizace

18.5.2007

Ing. Jan Panu


jan.panus@upce.cz

Obsah
Analza efektivity algoritm
Asymptotick sloitost, znaen a zkladn

tdy sloitosti
Vizualizace algoritmu
Tdc algoritmy
Pstup hrub sly
Rozdl a panuj

Zklady analzy efektivity algoritm


Vlastnosti vslednho programu:
- rychlost vpotu (vpoetn as)
- velikost operan pamti
(oproti jednoduchosti, obecnosti efektivita
se d vyjdit objektivn)
Vdeck vzkumy ukzaly, e v mnoha
problmech lze doshnout vznamnho
zlepen spe v rychlosti vpotu

Men velikosti vstupu


Vpoetn as vtiny algoritm je vt na
vtch vstupech (trv dle seadit vt
pole apod.)
Efektivita algoritm = funkce parametru n
(velikost vstupu)
(nap. velikost seznamu v problmech
tdn apod.)

Jednotky v men vpoetnho asu


Je mon pout standardn jednotky
(sekunda, milisekunda apod.) k men
vpoetnho asu programu
implementujcho dan algoritmus
!!! Ale: zvislost na rychlosti konkrtnho
potae, na kvalit dan programov
implementace, obtnost men
aktulnho vpoetnho asu

Jednotky v men vpoetnho asu


Lpe: pouvat metriku, kter nezvis na
zmiovanch faktorech

Mon pstup: spotat, kolikrt je kad


operace algoritmu vykonvna
- nepimen sloit
- obvykle to nen teba

Jednotky v men vpoetnho asu


Identifikovat nejdleitj operaci v algoritmu :
ZKLADN OPERACE
(nejvce pispv k celkovmu vpoetnmu
asu)
Spotat, kolikrt je zkladn operace
vykonvna
Nap.: tdc algoritmus porovnv prvky
zkladn operace = porovnvn prvk
Spotat, kolikrt je zkladn operace algoritmu
vykonvna na vstupu o velikosti n

Vpoetn as (running time)


Cop as trvn zkladn operace na
konkrtnm potai
C(n) poet vykonvn zkladn operace
v danm algoritmu
T(n) odhad celkovho asu bhu
programu

T(n) Cop x C(n)

Vpoetn as (running time)


Problmy:
a) C(n) dn informace o operacch, kter
nejsou zkladn
b) Cop piblin hodnota

Ale stle, pokud n nen extrmn velk

nebo mal => rozumn odhad


vpoetnho asu algoritmu
Tak umouje odpov na otzku:
Kolikrt rychlej bude tento algoritmus
na nap. 10x rychlejm potai

Vpoetn as (running time)


Nap.: C(n) = n(n-1), kolikrt pomaleji
pob algoritmus, kdy velikost vstupu
bude dvojnsobn?
C(n) = n(n-1) = n2 n n2
T(2n)
Cop C(2n)
(2n)2

=
=
4
T(n)
Cop C(n)
n2
Nen nutn znt hodnotu Cop

d rstu
Analza efektivity ignoruje multiplikativn
konstanty a zabv dovm odhadem
rstu
Pro klst draz na d rstu pi velikm
rozsahu vstupnch hodnot?
=> bh algoritmu pi malm rozsahu
vstupu pli neodliuje efektivn algoritmy
od mn efektivnch

Hodnoty (nkter piblin) nkolika funkc


dleitch v analze efektivity algoritmu
n
10

log2n
3.3

n
10

n*log2n
3.3*10

n2

n3

102

103

103

1.3*1030 9.3*10157

102 6.6

102 6.6*102

104

106

103 10

103 104

106

109

104 13

104 1.3*105

108

1012

105 17

105 1.7*106

1010 1015

106 20

106 2*107

1012 1018

2n

n!
3.6*106

Funkce s exponencilnm rstem


Exponenciln funkce 2n
Funkce faktorilu n!
Rostou tak rychle, e se jejich hodnoty

stvaj astronomicky vysok i pro malou


hodnotu vstupu n
Ob se asto nazvaj funkce s
exponencilnm rstem (nebo jen:
exponenciln funkce)

Algoritmy, kter potebuj exponenciln


poet operac jsou praktick pro een
problm jen malch instanc.
Jin nhled (rozdly mezi funkcemi):
nap.: jak reaguj na nap.
dvojnsobn naven hodnoty v
argumentu n
log2n log22n = log22 + log2n =
1 + log2n

Linern funkce se zv dvojnsobn

n * log2n se zv nepatrn vce ne


dvakrt
Kvadratick funkce n2
(2n)2 = 4n2
Kubick funkce n3
(2n)3 = 8n3

tyikrt

osmkrt

Hodnota 2n je umocnna na druhou


22n = (2n)2
n! je naven mnohem vce

Efektivita nejhorho, nejlepho a


prmrnho ppadu
Existuje mnoho algoritm, kdy as vpotu
nezle jen na velikosti vstupu, ale tak
na pesnch vlastnostech konkrtnho
vstupu

Pklad: sekvenn vyhledvn


vpoetn as se me liit v rmci vstup
stejn velikosti

Algoritmus: sekvenn hledn (A[0..n-1,k])


// Hled poadovanou hodnotu v danm poli
sekvennm zpsobem
// Vstup: Pole A[0..n-1] a hledan kl K
// Vstup: Index prvku pole A prvnho vskytu
hledan hodnoty kle K nebo hodnota -1,
jestlie nebyla poadovan hodnota nalezena
i0
while i<n and A[i] K do
ii+1
if i < n return i
else return -1

Nejhor ppad
(sekvenn vyhledvn)
V posloupnosti nen nalezen prvek, jeho
hodnota by se rovnala hodnot kle
=> nejvt poet porovnn s klem
Cworst(n) = n

Efektivita algoritmu je v nejhorm ppad


rovna efektivit pi nejhorm vstupu
velikosti n

Nejhor ppad
Nejhor ppad vstupu velikosti n: vstup
velikosti n, pro kter algoritmus b
nejpomaleji ze vech monch vstup
Analza nejhorho ppadu poskytuje
velmi dleitou informaci o efektivit
algoritmu ohranienm jeho vpoetnho
asu seshora
vpoetn as nepekro Cworst(n)

Efektivita v nejlepm ppad


Nejlep mon vstup velikosti n
=> vstup velikosti n, kdy algoritmus b
nejrychleji ze vech monch vstup
velikosti n
Cbest(n) = 1
(pro sekvenn
vyhledvn)
Nen tak dleit jako efektivita nejhorho
ppadu, ale nen pln nedleit

Efektivita v nejlepm ppad


Umouje uvaovat o uitench typech
vstup blzkch nejlepmu z nich

Jestlie nen efektivita nejlepho ppadu


uspokojiv, je mon algoritmus ihned
zamtnout bez dal analzy

Efektivita v prmrnm ppad


Dv informaci a chovn algoritmu na typickm
nebo nhodnm vstupu
Urit pedpoklady o monm vstupu velikosti n
je teba vytvoit:
(je stle uvaovno sekvenn vyhledvn)
a) pravdpodobnost spnho nalezen je
rovna p (0 p 1)
b) pravdpodobnost prvnho vskytu hledan
hodnoty na i-t pozici seznamu je stejn pro
vechny hodnoty i.

Efektivita v prmrnm ppad


Cavg(n) nsledovn:
- V ppad spnho hledn:
pravdpodobnost prvnho vskytu hledan
hodnoty na i-t pozici je p/n pro kad i
a poet porovnn v algoritmu je v
takovto situaci rovno i
- V ppad nespnho hledn :
poet porovnvn je rovno n s
pravdpodobnost takov situace (1-p)

Efektivita v prmrnm ppad


Jestlie p = 1 (tzn., e hledn mus bt

spn) prmrn poet porovnn s


hodnotou kle sekvennm vyhledvnm
je (n+1)/2
(v prmru polovina prvk seznamu
bude prohledna)
Jestlie = 0 (tzn., hledn mus bt
nespn) prmrn poet porovnn
s hodnotou kle je n

Efektivita v prmrnm ppad


Zkoumn efektivity prmrnho ppadu
je vce obtn ne zkoumn efektivity
nejhorho a nejlepho ppadu

Pm pstup vyaduje rozdlen vech


instanc velikosti n do nkolika td tak, e
pro kadou instanci bude poet opakovn
zkladn operace algoritmem stejn

Efektivita v prmrnm ppad


Pak pravdpodobnost rozdlen vstup do td
mus bt uvaovna, aby bylo mon odvodit
poet opakovn zkladn operace
Je efektivita prmrnho ppadu dleit?
Ano: existuje mnoho dleitch algoritm, pro
kter je efektivita prmrnho ppadu vhodnj
ne pesimistick odhad efektivity v nejhorm
ppad
Efektivita v prmrnm ppad nelze spotat
jako prmr efektivit v nejlepm a nejhorm
ppad!

Efektivita nerekurzivnch algoritm


Problm: najt hodnotu nejvtho prvku v
seznamu n sel.
Pseudokd:
// Vstup: Pole A [0..n-1] relnch sel
// Vstup: Hodnota nejvtho prvku
max A[0]
for i 1 to n-1 do
if A[i]>max
max A[i]
return max

Efektivita nerekurzivnch algoritm


Uvnit cyklu: nejastji vykonvan

operace:
A[i]>max
porovnn
max A[i]
piazen
Kter je zkladn: porovnn je vykonno
v kadm opakovn cyklu poet je
roven rozsahu vstupu n nen teba
rozliovat nejhor, nejlep, prmrn
ppad

Empirick analza algoritm


1) Porozumn dvodu experimentu
(kontrola sprvnosti algoritmu, porovnn
efektivity nkolika algoritm, nvrh hypotzy o
td sloitosti algoritmu, efektivita na
konkrtnm potai)
2) Rozhodnut o mtku efektivity a o jednotkch
(poet operac nebo asov jednotky apod.)
3) Rozhodnut o vlastnostech vstupnch dat
(rozsah, velikost, typick, nhodn)

Empirick analza algoritm


4) Implementace algoritmu v programu
urenm k experimentovn
5) Vygenerovn vzork vstupnch dat
6) Sputn programu na vygenerovanch
vstupnch datech a zaznamenan
zskanch vsledk
7) Analza zskanch dat (tabulka, graf)

Vizualizace algoritmu
Vyuit grafickch prvk (body, ry atd.) k
reprezentaci njakch zajmavch
udlost vzniklch v dob bhu algoritmu
Dv monosti:
a) statick vizualizace algoritmu
(nap. srie snmk prbhu algoritmu)
b) dynamick vizualizace (animace)
(pehlednj, ale nronj volba)

Tdn
Motivace
Tdn proces peuspodn prvk
urit mnoiny reprezentovan
posloupnost
Historie

Tdc problm
Je dan mnoina A = {a1, a2,....an}.
Je poteba najt permutaci tchto n prvk,
kter zobrazuje danou posloupnost do
neklesajc posloupnosti prvk.
Kl prvek cel mnoiny U (univerzum), ze
kter vybrme prvky
Zznam informace vzan na kl

Klasifikace tdcch algoritm


Adresn tdn jednoznan vztah mezi
absolutnmi hodnotami prvk z U
Asociativn tdn pro uren pozice
prvku se pouv jen relativn hodnota
prvk, kter se uruj vzjemnm
porovnnm tchto prvk
Hybridn tdn kombinace pedelch
metod.

Klasifikace tdcch algoritm


Podle vbru datovch struktur
Vnitn tdn (intern) pole, seznam,
stromy
Vnj tdn pouze sekvenn pstup k
prvkm (pouze jednotliv promnn).

Adresn tdc algoritmy


Pihrdkov tdn
mme uritou posloupnost m sel
1.krok vytvo m przdnch seznam
(pihrdek) pro kad slo i se vytvo jeden
seznam
2. krok distribuce:ten posloupnosti zleva
doprava a prvek ai se umst do ai-tho
seznamu, na jeho konec (jako fronta)
3. krok zetz se vechny seznamy tak, e
zatek (i-1)-nho seznamu se pipoj na
konec i-tho

Pklad
Funkce kter nate jednotliv znaky z
njakho souboru a vype je setdn do
jinho souboru. Vytvome pole uritho
potu prvk a piadme do nj jednotliv
znaky. Nakonec do vstupnho souboru
seazen znaky.
S E AD I TZ NAK Y
vsledek
AAD E I K N S TYZ

Asociativn tdc algoritmy


O prvcch tdn mnoiny se
nepedpokld nic jinho ne e jsou
vybran z uspodanho univerza
Sloitost se m potem porovnn a tak
potem pesun prvk

Pstup hrub sly

Nejjednodu z metod nvrhu algoritmu


Sla vpoetnho vkonu
I pes nzkou dmyslnost i efektivitu:
- je aplikovateln na irokou tdu loh
- zkladn lohy: souet n sel, hledn
nejvtho prvku v seznamu atd.
- dleit problmy: tdn, vyhledvn,
nsoben matic, pstup hrub sly nen
omezen velikost instance
- i na sloitj problmy, kdy je levnj pout
tento pstup na mal instance problmu

Tdn vbrem
Najdeme minimum z prvnch N sel a dme ho
na prvn msto, najdeme minimum ze zbylch
N-1 sel a dme ho na druh msto, atd.

| 89
17
17
17
17
17
17

45 68 90 29 34 17
| 45 68 90 29 34 89
29 | 68 90 45 34 89
29 34 | 90 45 68 89
29 34 45 | 90 68 89
29 34 45 68 | 90 89
29 34 45 68 89 | 90

Tdn vbrem
Algoritmus:
// Vstup: Pole A[0..n-1]
// Vstup: Pole A[0..n-1] seazench prvk
for i 0 to n-2 do
min i
for j i +1 to n-1 do
if A[j] < A[min] min j
proho A[i] a A[min]

Tdn zamovnm (bublinkov)


Jedna z nejznmjch a

nejpouvanjch metod
Srovnn dvojice sousednch prvk, pokud
nejsou v poadovanm poad vmna
Prvn prchod: probubln nejvtho
prvku na posledn msto
Dal prchod: ukonen o jedno msto
dve, druh nejvt prvek probubl na
pedposledn msto atd.

Tdn zamovnm (bublinkov)


Algoritmus:
// Vstup: Pole A[0..n-1]
// Vstup: Pole A[0..n-1] seazench prvk
for i 0 to n-2 do
for j 0 to n-2-i do
if A[j+1] < A[j] proho A[j] a A[j+1]

Rozdl a panuj
Pravdpodobn nejlep znm technika

nvrhu algoritmu
Algoritmus pracuje nsledovn:
1) Instance problmu je rozdlena na
nkolik mench instanc
2) Dl problmy jsou vyeeny nezvisle
na sob
3) Pokud je teba, een dlch problm
jsou kombinovny k vslednmu een

Rozdl a panuj
Hod se na okruh loh, kdy je mon
rozdlen na men nezvisl podlohy
stejnho charakteru
Cel strategie m rekurzivn charakter, lze
ale naprogramovat i bez pouit rekurze,
pokud je mechanismus rekurze nahrazen
v programu vlastnm zsobnkem pro
odkldn informac o podlohch

Tdn sluovnm (Mergesort)


Rekurzivn tdn, nezvisle setdme dv sti,
kter potom sloume
Algoritmus Mergesort (A[0..n-1])
// Vstup: Pole A[0..n-1]
// Vstup: Pole A[0..n-1] seazench prvk
if n>1
kopruj A[0.. n/2 -1] do B[0.. n/2 -1]
kopruj A[ n/2 ..n-1] do C[0.. n/2 -1]
Mergesort(B[0.. n/2 -1])
Mergesort(C[0.. n/2 -1])
Merge(B,C,A)

Tdn sluovnm (Mergesort)


Algoritmus Merge(B[0..p-1], C[0..q-1], A[0.. p+q -1])
// Vstup: setdn pole B[0..p-1], C[0..q-1]
// Vstup: setdn pole A[0..p+q-1]
i 0; j 0; k 0
while i < p and j<q do
if B[i]C[j]
A[k] B[i]; i i +1
else A[k] C[j]; j j +1
k k+1
if i=p
kopruj C[j..q-1] do A[k..p+q-1]
else kopruj B[i..p-1] do A[k..p+q-1]

8 3 2 9 7 1 5 4
8 3 2 9

8 3

7 1 5 4

2 9

3 8

7 1

2 9

5 4

1 7

2 3 8 9

4 5

1 4 5 7

1 2 3 4 5 7 8 9

I:=0

I:=I+1

PI I

i>3

1
2
3
4

You might also like