You are on page 1of 67

Zklady algoritmizace

1. 11. 2010
4. pednka

Dleit typy problm


Tdn
Vyhledvn
Zpracovn etzc
Grafov lohy
Kombinatorick problmy
Geometrick problmy
Numerick problmy

Tdn
Uspodat poloky danho listu v rostoucm

poad
Praktick hledisko: je uiten seadit seznam
sel, znak abecedy, znakovch etzc,
zznam
Pro? Seznam student podle pjmen nebo
podle sla studenta - nutn znt kl
Rzn typy algoritm
Vlastnosti tdcch algoritm stabilita a velikost
pamti

Vyhledvn
Hledme njakou konkrtn hodnotu, kter
se nazv identifikan kl (vyhledvac
kl) a to v njak konkrtn mnoin
prvk.
Podobn situace jako u tdn (rzn typy
algoritm atp.)

Zpracovn etzc
etzec = sekvence znak abecedy
a) textov etzce (psmena, sla,
speciln znaky)
b) bitov etzce (jedniky a nuly)

String matching hledn danho slova v


textu

Grafov lohy
v4

v3

v4

v3

v1

v2

v1

v2

Orientovan

Neorientovan

Grafov lohy
Graf = mnoina bod - uzly, kdy nkter

jsou spojen rou - hrana.


Vyuit pi modelovn ady relnch
aplikac (dopravn, komunikan st,
plnovn projekt)
Jak navtvit vechny body v sti?
Jak je nejkrat cesta mezi dvma uzly?
Nkter grafov lohy: jen mal instance
jsou eiteln v rozumnm ase (TSP)

b
2

Monosti:
A-B-C-D-A
A-B-D-C-A
A-C-B-D-A

A-C-D-B-A
A-D-C-B-A
A-D-B-C-A

Poet mst 4, tedy poet monost 3!


Pro n (n-1)!
n=20 mst je to 19! monost
3.85478296 106 let

Kombinatorick problmy
Hledn takovho kombinatorickho objektu
(nap. permutace, kombinace, podmnoina),
kter vyhovuje danm podmnkm a m dan
vlastnosti (maximalizace hodnoty, minimalizace
nklad apod.)
Jedny z nejnronjch loh z teoretickho
i praktickho hlediska
(extrmn rst potu komb. objekt s rstem
velikosti problm; nejsou znmy algoritmy
ec (pesn) mnoho problm v rozumnm
ase

Geometrick problmy
Problm nejbliho pru je dno n bod v
rovin, nalzt nejbli pr mezi nimi
Problm konvexnho obalu nalzt
nejmen konvexn obal, kter bude
zahrnovat vechny body dan mnoiny

Numerick problmy
een rovnic a systm rovnic; vpoet
uritch integrl apod.

Zkladn datov struktury


Datov struktura = konkrtn schma organizace
souvisejcch datovch poloek
Vyuit v algoritmech (programech) vedle
jednoduchch promnnch (cel slo, znak) a
skldaj se z nich
V matematice: mnoina (vtinou se nemn) x
mnoiny (datov struktury) v algoritmech se
mn (zmenen, zvten, pidn prvku apod.)
Volba vhodn datov struktury zvis na typu
pouvanch operac s mnoinou

Typick operace nad mnoinami


DOTAZY
Search(S,k)
Minimum(S)
Maximum(S)
Successor(S,x)
Predecessor(S,x)

MODIF. OPERACE
Insert(S,x)
Delete(S,x)

Vyaduj
uspodanou
mnoinu

Linern datov struktury


Datov struktury:
a) linern (data jsou uloena linernm
zpsobem)
b) nelinern (grafy, stromy)
Dv nejdleitj linern datov
struktury:
Pole (Array)
Linern spojov seznam (Linked list)

POLE
Jednorozmrn pole sekvence n prvk
stejnho datovho typu
Pstup pes index prvku
Kad prvek :

a) zabr stejn msto v pamti


b) pstup k nmu: konstantn as nezle
na jak pozici se nachz
Prvek[0]

Prvek[1]

Prvek[2]

Prvek[n-1]

20

-5

Tabulka Excel

Pole
indexy
[0]

[1]

[2]

[n-1]

[2]

[3]

[n]

versus
[1]
CISLA
20

CISLA[1]:=1
1

PISMENA
B

-5
PISMENA[1]:=1

1)Nateme poet prvk pole


2)Vyprzdnme hodnotu i
3)Pokud plat, e i<n,
natme do pole prvky
4)K i piteme hodnotu 1
5)Konec

1)Vyprzdnit promnnou
poet
2)Od 1 do n opakuj
A.Jestlie a[i] se rovn
nule
i. Poet:=poet+1
ii. Dal i
B.Jinak dal i
3)Poet nul je poet
4)Konec

Spojov seznam
Sekvence prvk zvanch uzly, kde kad

obsahuje dva druhy informac:


a) data
b) jeden nebo vce odkaz na dal uzly
zvan ukazatel (pointers)
jestlie ukazatel = null, znamen
absenci nsledovnka uzlu
Jednosmrn / obousmrn spojov
seznam

Jednosmrn spojov seznam


Kad uzel mimo poslednho obsahuje
jeden ukazatel na dal prvek
Pstup k prvku: zane se na prvnm prvku
a postupuje se pes nsledovnky a do
poadovanho prvku
Prvek[0]

Prvek[1]

Prvek[n-1]

null

Jednosmrn spojov seznam


Rozdl oproti struktue pole:
a) nevhoda:
- as pro pstup k prvku zle na tom, kde
se prvek v seznamu nachz
b) vhody:
- nen poteba dopedu rezervovat msto v
pamti
- vkldn a odstraovn prvk pepojenm
nkolika pslunch ukazatel

Obousmrn spojov seznam


Kad uzel, mimo prvnho a poslednho,
obsahuje ukazatele na svho pedchdce
a na svho nsledovnka

null

Prvek[0]

Prvek[1]

Prvek[n-1]

null

Seznam
Pole a spojov seznam dv zkladn

monosti pro reprezentaci vce abstraktn


datov struktury nazvan Seznam
Seznam konen posloupnost datovch
poloek; zkladn operace: vyhledvn,
vkldn, mazn prvku
Rozdl oproti mnoin: monost vskytu
stejnch hodnot
2 speciln typy seznam: zsobnk a
fronta

Zsobnk
Seznam, ve kterm vkldn a
odstraovn prvk je mon jen na
konci (na vrcholu)
LIFO last in first out
Pouit: nap. pi een loh metodou
rozdl a panuj k odloen informac
o tom, kter dl lohy je teba jet
vykonat
Kdy programujeme zsobnk pomoc
pole: prvn prvek pole = dno;
pomocn promnn = vrchol;

VRCHOL

DNO

Fronta
Seznam, ve kterm jsou prvky
odstraovny z jednoho konce struktury
(odchod) a nov jsou pidvny na druh
konec (pchod)
FIFO first in first out
Pouit: pokud potebujeme doasn
odloit data a zachovat pro dal
zpracovn jejich poad
ODCHOD

PCHOD

Grafy
Graf G je uspodan dvojice prvk ve
tvaru G = (V, H), kde V je konen
mnoina vrchol nebo uzl a H je mnoina
hran, kde kad hran h z mnoiny H je
piazena bu:
dvouprvkov mnoina rznch uzl (u, v),
uspodan dvojice rznch uzl (u, v),

Grafy
v4

v3

v4

v3

v1

v2

v1

v2

Orientovan
Neorientovan
V={v1,v2,v3,v4};
V={v1,v2,v3,v4};
E={(v1,v2),(v1,v3),(v1,v4),
E={(v1,v2),(v1,v3),(v1,v4),
(v2,v3),(v4,v1),(v4,v3)}
(v2,v3),(v3,v4)}

Grafy
0 |E| |V|*(|V|-1)/2
Poet hran v neorientovanm grafu, kter
neobsahuje smyky a vce hran mezi
stejnmi uzly.
Reprezentace grafu, nap.:
a) matice sousednosti
b) matice incidence

Matice sousednosti
Jde o matici A typu n x n, kde n je poet uzl

st. Jej prvky vyjaduj sousednost dvojice uzl


u a v st:
A (auv)=1 pokud existuje hrana (u,v), jinak 0.
Je vhodn pro popis hustch st, kde se poet
sek bl potu hran plnho grafu. Je vhodn
pro svj pehledn zpis, ale obsahuje urit
mnostv nulovch prvk v dcch i sloupcch.

Matice incidence
incidence zde oznauje vztah uzlu a seku, kdy

jeden obsahuje druh nebo m s druhm


spolenou st nebo prvek
Matice B je typu n x m, kde n je poet uzl st a
m poet sek st
B (bvh)=1 pokud uzel v inciduje s sekem h ;
jinak 0.
vhodn v ppad, kdy potebujeme znt
obousmrn informace, tzn. se ktermi seky je
kter uzel incidentn (nenulov prvky
v pslunm dku) a se ktermi uzly je
incidentn urit sek (nenulov prvky
v pslunm sloupci). Nepli sporn.

Cesty a cykly v grafech


Cesta z uzlu u do uzlu v je posloupnost

sousednch uzl (spojench hranou), kter


zan v uzlu u a kon v uzlu v.
Dlka cesty celkov poet uzl v
posloupnosti (stejn jako poet hran v
posloupnosti mnus 1)
Souvisl graf pro kad pr uzl u a v
plat, e existuje cesta z u do v
Cyklus cesta zanajc a konc ve
stejnm uzlu (graf bez cykl = acyklick
graf)

Stromy
Souvisl acyklick
grafy

|E| = |V| - 1
(nutn, ale ne
postaujc podmnka)
Koenov stromy
- Voln strom, kter obsahuje jeden odlin uzel
koen

Stromy
Pedchdce uzlu x libovoln uzel v na
jednoznan cest od koene do uzlu x
Jestlie y je pedchdce x, potom x se
nazv nsledovnk uzlu y
Jestlie posledn hrana na cest z koene
do uzlu x je hrana (y,x), potom se uzel y
nazv rodi uzlu x a uzel x potomek uzlu
y

Stromy
Dva uzly majcho stejnho rodie se

nazvaj sourozenci.
Uzel bez potomk = list.
Hloubka uzlu x = dlka cesty od koene k
do uzlu x.
Vka stromu nejvt hloubka
libovolnho uzlu.
Seazen strom koenov strom, ve
kterm jsou potomci kadho uzlu
seazeni.

b
c

d
g

f
Hloubka uzlu c - 2

Vka stromu - 3

Binrn strom
Seazen strom, ve kterm m kad uzel
nejvce dva potomky a kad potomek je
uren jako bu lev nebo prav potomek
svho rodie.
Binrn vyhledvac strom slo
piazen kadmu rodiovskmu uzlu je
vt ne vechny sla v jeho levm
podstromu a men ne vechna sla v
pravm podstromu

9
5

12

10

Binrn
vyhledvac
strom

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.)

Efektivita vpotu
S jakou efektivitou lze dan kol vyeit?
Men doby:
typ potae
poet mst

Zkladn kon (souet, nsoben...)


Souet dvou N-cifernch sel trv 3N
zkladnch kon tedy 3x4 pro tycifern
sla

Efektivita vpotu
Nsoben N-cifernch sel N2+N
Zpesnn N2 + N2 tedy 2N2
Proces linern v ase nap. k soutu
dvou sel je zapoteb nejve CxN
zkladnch operac (C=3)
Graf zvislosti potu krok je pmka
S=CN, kde S je poet krok
Nsoben je kvadratick

Velikost vpotu
Data o velikosti N se provedou 2N krt
achovnice oslujeme vechna polka
od 1 do 64
Na kad polko polome dvojnsobek
minc, kter jsme poloili na pedchoz
polko na prvn dme dv mince, na
dal 4, 8, 16 atd.
Jak vysok bude sloupeek na poslednm
polku? 15 m? Vc?

Exponenciln

Porovnn asov sloitosti


n

n2

n3

2n

3n

10

0,00001s 0,0001s 0,001s 0,001s

0,059 s

20

0,00002s 0,0004s 0,008s 1,0 s

58 min

30

0,00003s 0,0009s 0,027s 17,19 min 6,5 roku

40

0,00004s 0,0016s 0,064s 12 dn

3855 stol.

50

0,00005s 0,0036s 0,125s 35,7 let

200 mil.
stol.

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

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

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)

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
2
T(n)
Cop C(n)
n
Nen nutn znt hodnotu Cop

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 tyikrt
(2n)2 = 4n2
Kubick funkce n3 osmkrt
(2n)3 = 8n3

Hodnota 2n je umocnna na druhou


n 2

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

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


Cavg(n) =
p
p
p
p
[1* 2 * ... i * ... n * ] n * (1 p )
n
n
n
n
p
[1 2 ... i ... n] n(1 p )
n
p n( n 1)
p ( n 1)

n(1 p )
n(1 p )
n
2
2

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!

You might also like