Professional Documents
Culture Documents
57
58 4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
Moe se pomisliti da je korixee indukcije ovde
Pn (x) = an xn + Pn−1 (x).
nepotrebno: ono samo komplikuje vrlo jednostavno rexee. Opisani algori-
tam je ekvivalentan izraqunavau vrednosti polinoma redom qlan po qlan.
Ispostavie se ipak da ovaj pristup ima svoju snagu.
Opisani algoritam je taqan, ali neefikasan, jer zahteva n + (n − 1) + · · · +
1 = n(n + 1)/2 mnoea i n sabiraa. Korixeem indukcije na drugi naqin
dobija se bo e rexee.
Zapaamo da u ovom algoritmu ima mnogo ponov enih izraqunavaa: ste-
pen x izraqunava se svaki put "od poqetka". Veliki broj mnoea moe se
n
nalo x , dovo no je izvrxiti jedno mnoee. Posle toga sledi jox jedno
n
izrazom:
an xn + an−1 xn−1 + · · · + a1 x + a0 = ((· · · ((an x + an−1 )x + an−2 ) · · · )x + a1 )x + a0 ,
poznatim kao Hornerova xema. Program na pseudo paskalu koji realizuje ovaj
algoritam prikazan je na slici 1.
4.3. MAKSIMALNI INDUKOVANI PODGRAF 59
Algoritam
Ulaz:
Vrednost polinoma(a, x);
(koeficijenti polinoma) i (realni broj).
Izlaz: (vrednost polinoma u taqki ).
a = a0 , a1 , . . . , an x
P x
begin
P := an ;
for i := 1 to n do
P := x · P + an−i
end
H = (U, F )
U = {a, d, e}
kava u a. U trenutku kad vixe nema elemenata koji se mogu ukloniti, skup S
je pronaen.
Realizacija. Algoritam smo opisali kao rekurzivnu proceduru. U sva-
kom koraku pronalazimo elemenat u koga se ni jedan drugi ne preslikava,
uklaamo ga i nastav amo rekurzivno. Realizacija algoritma ipak ne mo-
ra da bude rekurzivna. Svakom elementu i, 1 ≤ i ≤ n pridruuje se brojaq
c[i], qija je poqetna vrednost jednaka broju elemenata koji se preslikavaju u i.
Vrednosti c[i] mogu se izraqunati u n koraka prolazei kroz vektor f i inkre-
mentirajui (poveavajui za jedan) pri tome odgovarajue brojaqe. Zatim se
u listu stav aju svi elementi kojima je vrednost brojaqa dobila vrednost 0.
U svakom koraku se prvi elemenat j iz liste uklaa iz liste i iz skupa,
dekrementira se c[f [j]], a ako c[f [j]] dobije vrednost 0, f [j] se stav a u listu.
Rexavae je zavrxeno u trenutku kad je lista prazna. Algoritam je prikazan
na slici 4. Nije texko proveriti da se za ulaz predstav en na slici 3 dobija
S = {1, 3, 5}.
Algoritam
Ulaz: (niz prirodnih brojeva izmeu jedan i ).
Bijekcija(f, n);
sa slike 6(b) funkcija f (x) opisuje se nizom parova (1, 4), (2, 5), (6, 3), (7, 4),
0 0 k+1
(10, 0).
4 4
3 3
2 2
1 1
(a) (b)
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
x < L ili x ≥ D
½
f (x), n−1 n n
f (x) = n .
max{fn−1 (x), Vn }, Ln ≤ x < Dn
1 2 3 4 5 6 7 8 9 10
T (n) = 2T (n/2) + cn dato sa T (n) = O(n log n). Dakle, ako podelimo problem
na dva jednaka potproblema i dobijena rexea potproblema objedinimo za lin-
earno vreme, onda je sloenost algoritma O(n log n). Tehnika dekompozicije
je vrlo korisna, u xta emo se vixe puta uveriti.
U problemu sa pravougaonicima dekompozicija se zasniva na zapaan-
ju da je za dodavae novog pravougaonika funkciji f (x) potrebno u naj-
gorem sluqaju linearno vreme, a da se za linearno vreme mogu objediniti i
n−1
2/0 c c 2/ − 2
1/1 c c 1/ − 1 c 1/1
c c c
Ili S ostaje maksimalni podniz u S, ili postoji drugi podniz koji nije
0
sufiksa, oznaqenog sa S = (x , x , . . . , x ).
0
E k k+1 n−1
Izlaz:
X n
(suma maksimalnog podniza).
Glob max
begin
Glob max := 0; { poqetna vrednost globalno maks. sume}
Suf max := 0; { poqetna vrednost sume maks. sufiksa}
for i := 1 to n do
if x[i] + Suf max > Glob max then
Suf max := Suf max + x[i];
Glob max := Suf max;
else if x[i] + Suf max > 0 then
Suf max := Suf max + x[i];
else Suf max := 0
end
podskup ne postoji.
Oznaqimo problem sa P (n, K), gde n oznaqava broj predmeta, a K veliqinu
(nosivost) ranca. Veliqine predmeta podrazumevaju se implicitno, odnosno
ihove veliqine nisu deo eksplicitne oznake problema. Na taj naqin P (i, k)
oznaqava problem sa prvih i predmeta i rancem velicine k. Zbog jednostavnos-
ti ograniqavamo sa na problem odluqivaa da li rexee postoji. Zapoqiemo
sa najjednostavnijim induktivnim pristupom.
Induktivna hipoteza (prvi pokuxaj). Umemo da reximo P (n − 1, K).
4.10. DINAMIQKO PROGRAMIRA E, PROBLEM RANCA 73
Bazni sluqaj je jednostavan: rexee postoji akko je k = K . Ako postoji
rexee problema P (n − 1, K), onda je to i rexee P (n, K): u to rexee ne
1
zak uqujemo da n-ti predmet mora biti uk uqen u zbir. Tada ostali predmeti
moraju stati u mai ranac veliqine K − k . Problem je time sveden na dva
maa problema P (n − 1, K) i P (n − 1, K − k ). Da bi se rexee kompletiralo,
n
je k − k < 0). Oba ova problema se mogu rexiti indukcijom. Poxto je svoee
n
ideja je pamtiti sva naena rexea da bi se izbeglo ponov ae rexavaa is-
tih problema. Ovaj pristup je kombinacija pojaqavaa induktivne hipoteze i
korixea potpune indukcije. Razmotriemo sada kako se ovaj pristup moe
praktiqno realizovati.
Za smextae svih izraqunatih rezultata koristi se posebna matrica di-
menzije n × K . Elemenat (i, k) matrice sadri informacije o rexeu P (i, k):
Svoee po drugoj varijanti induktivne hipoteze ekvivalentno je izraquna-
vau jedne vrste na osnovu prethodne vrste matrice. Svaki elemenat se izraqu-
nava na osnovu dva elementa iz prethodne vrste. Ako je potrebno odrediti i
podskup sa zadatim zbirom, onda uz svaki elemenat matrice treba saquvati
i informaciju o tome da li je odgovarajui elemenat skupa uk uqen u zbir
u tom koraku. Pratei ove informacije unazad od elementa (n, K), moe se
rekonstruisati podskup sa zbirom K . Algoritam je prikazan na slici 11, a
u tabeli 1 prikazan je jedan primer. Matrica P je zbog udobnosti dimenzije
(n + 1) × (k + 1) i sadri elemente P [i, k], 0 ≤ i ≤ n, 0 ≤ k ≤ K .
74 4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
Algoritam
Ulaz: (vektor duine sa veliqinama predmeta) i (veliqina ranca).
Ranac(S, K);
- - - I O - - O I - -
k2 =5 O
- - I O O - I I O - I
k3 =4 O
realni brojevi, onda je ovaj pristup neprimen iv; na ovaj problem vratiemo
se u poglav u 11). Ako je potrebno samo ustanoviti da li rexee postoji,
onda je odgovor sadran u elementu P [n, K]. Ako pak treba odrediti podskup sa
zbirom K , onda treba prei put unazad, polazei od pozicije (n, K), koristei
po e P ostoji elemenata matrice iz programa. Predmet teine k pripada
skupu akko je P [n, K].P ripada taqno; ako je P [n, K].P ripada taqno, odnosno
n
Konstruisati algoritam sloenosti O(n) za odreivae funkcije f (x) = max{f (x), f (x)}.
0 0 0 0
0
k+1
00
4.12. Za qvor binarnog stabla (koje u opxtem sluqaju ne mora da bude AVL stablo)
kazemo da je AVL qvor ako je egov faktor ravnotee iz skupa {0, ±1}. Konstruisati
algoritam koji u datom binarnom stablu T oznaqava sve kritiqne qvorove (qvorove koji
nisu AVL qvorovi, a qiji su svi potomci AVL qvorovi).
78 4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
4.13. Neka je G = (V, E) stablo sa n qvorova. Ci je formirati simetriqnu kvadratnu
matricu reda n, qiji elemenat (i, j) je jednak rastojau izmeu qvorova v i v . Konstru-
isati algoritam sloenosti O(n ) koji rexava ovaj problem ako je stablo zadato listom
2
i j
povezanosti.
4.14. Rastojae izmeu dva qvora stabla je broj grana na jedinstvenom putu koji ih
povezuje. Dijametar stabla T = (V, E) je najvee meu rastojaima neka dva egova qvora.
Konstruisati efikasan algoritam za odreivae dijametra datog stabla, i odrediti egovu
vremensku sloenost.
4.15. Kako se moe pobo xati korixee memorijskog prostora u algoritmu Ranac
sa slike 11? Kolika je prostorna sloenost usavrxenog algoritma?
4.16. Varijanta problema ranca. Dati su brojevi x , x , . . . , x i K; potrebno je pred-
staviti K u obliku zbira nekih brojeva x , 1 ≤ i ≤ n, pri qemu se sabirci mogu ponav ati
1 2 n
4.17. Varijanta problema ranca. Pretpostavke su iste kao i u zadatku 4.16 (n tipova
predmeta teina x , x , . . . , x ; zalihe tih predmeta su neograniqene, i zadata je suma K
teina predmeta u rancu), ali je sada predmetima tipa i pridruena vrednost v , i =
1 2 n
4.18.
i=1 i i i=1 i i
struisati algoritam sloenosti O(nS) koji razlae ovaj skup u dva disjunktna podskupa
1 2 n i=1 i
eg ili najveeg meu ima i sliqno. Ideja je prepoloviti prostor koji se
pretrauje tako xto se najpre proveri sredi qlan niza. Pretpostavimo zbog
jednostavnosti da je n paran broj. Ako je z mae od x , onda z moe biti
samo u prvoj polovini niza; u protivnom, z moe biti samo u drugoj polovini
n/2+1
ako je x > x , onda i mora biti u intervalu k < i ≤ m, jer je tada monotonost
i m k k m
niza prekinuta negde u intervalu indeksa [k, m], videti sliku 2. Prema tome,
k m
algoritma je O(m + n). Za zadati niz B, neka B oznaqava niz u kome se re-
i
dom svaki znak niza B ponav a i puta. Na primer, ako je B = xyzzx, onda je
B = xxxyyyzzzzzzxxx.
3
eliminixui doi, odnosno gori podinterval ako je odgovor da, odnosno ne.
Posle dlog (n/m)e testova bie pronaeno maksimalno i. Vremenska sloenost
algoritma je O((n + m) log(n/m)) = O(n log(n/m)). Problemi sa uporeivaem
2
z b b
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
takvih da je x ≤ x ≤ · · · ≤ x .
i1 i2 in
1 2 n
Broj premextaa podataka je takoe O(n log n), xto je vixe nego kod sortiraa
izborom.
Iako je sortirae objediavaem bo e od sortiraa umetaem za velike
n, ipak ima i neke ozbi ne nedostatke. Pored toga xto se ne realizuje lako,
korak objediavaa zahteva dopunsku memoriju, tj. ovo nije sortirae u mes-
tu. Kopirae se radi pri svakom objediavau maih skupova, xto qini
proceduru sporijom.
5.3.4. Sortirae razdvajaem. Sortirae objediavaem primer je
efikasnosti dekompozicije. Ako nam poe za rukom da podelimo problem na
6 2 8 5 10 9 12 1 15 7 3 13 4 11 16 14
2 6
5 8
2 5 6 8
9 10
1 12
1 9 10 12
1 2 5 6 8 9 10 12
7 15
3 13
3 7 13 15
4 11
14 16
4 11 14 16
3 4 7 11 13 14 15 16
Algoritam
Ulaz: (niz od brojeva).
Quicksort(X, n);
Na primer, ako je pivot najmai elemenat u nizu, onda prvo razdvajae za-
hteva n − 1 uporeivaa i smexta samo pivot na pravo mesto. Ako je niz ve
5.3. SORTIRA E 95
ureen rastue i za pivot se uvek bira prvi elemenat, onda je broj koraka algo-
ritma O(n ). Kvadratna sloenost u najgorem sluqaju za sortirane ili skoro
2
jaa treba rekurzivno sortirati dva dela niza duina redom i − 1, odnos-
no n − i. Ako brojimo samo uporeivaa, sloenost razdvajaa je n − 1 (pod
pretpostavkom da se posle zamene X[L] sa X[D] u algoritmu Razdvajanje sa
slike 8 indeksi L i D najpre bez uporeivaa pomeraju za po jedno mesto).
Prema tome, sloenost sortiraa razdvajaem zadovo ava jednakost T (n) =
n − 1 + T (i − 1) + T (n − i). Ako pretpostavimo da pozicija pivota posle razdva-
jaa moe biti svako i = 1, 2, . . . , n sa jednakom verovatnoom 1/n, proseqan
broj koraka je n
1X
T (n) = n−1+ (T (i − 1) + T (n − i)) =
n i=1
n n n−1
1X 1X 2X
= n−1+ T (i − 1) + T (n − i) = n − 1 + T (i).
n i=1 n i=1 n i=0
Ovo je potpuna rekurzija, i to upravo ona koja je razmatrana u ode ku 2.5.5.
eno rexee je T (n) = O(n log n). Dakle, sortirae razdvajaem je zaista
efikasno u proseku.
U praksi je sortirae razdvajaem veoma brzo, pa zasluuje svoje drugo
ime (kviksort, tj. brzo sortirae). Osnovni razlog za egovu brzinu, osim
elegantne primene dekompozicije, je u tome xto se mnogo elemenata uporeu-
je sa jednim istim elementom, pivotom. Pivot se zbog toga moe smetiti u
registar, xto ubrzava uporeivaa.
Jedan od naqina da se sortirae razdvajaem ubrza je dobar izbor baze
indukcije . Ideja je da se sa indukcijom ne poqie uvek od jedinice. Sorti-
rae razdvajaem, kao xto je reqeno, poziva se rekurzivno do baznog sluqaja,
koji obuhvata nizove duine 1. Meutim, jednostavni algoritmi, kao xto su
sortirae umetaem ili sortirae izborom, rade sasvim dobro za kratke ni-
zove. Prema tome, moe se izabrati da bazni sluqaj za sortirae razdvajaem
budu nizovi duine vee od jedan (npr. izmeu 10 i 20, xto zavisi od konkretne
realizacije), a da se bazni sluqaj obrauje sortiraem umetaem. Drugim
reqima, uslov "if Levi < Desni" zameuje se uslovom "if Levi < Desni − P rag"
(gde P rag ima vrednost izmeu 10 i 20), i dodaje se deo "else ", koji izvrxa-
va sortirae umetaem). Efekat ove promene je popravka brzine sortiraa
razdvajaem za mali konstantni faktor.
96 5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
5.3.5. Hipsort. Hipsort je jox jedan primer brzog algoritma za sorti-
rae. U praksi on, za velike n, obiqno nije tako brz kao sortirae razdva-
jaem, ali nije ni mnogo sporiji. S druge strane, za razliku od sortiraa
razdvajaem, egova efikasnost je garantovana. Kao kod sortiraa objedi-
avaem, sloenost hipsorta u najgorem sluqaju je O(n log n). Za razliku od
sortiraa objediavaem, hipsort je algoritam sortiraa u mestu. U vezi
sa hipsortom obratiemo posebno pau na poqetni deo algoritma | formi-
rae hipa. Algoritam za formirae hipa ilustruje naqin na koji treba kom-
binovati konstrukciju i analizu algoritma.
Hip kao struktura podataka razmatran je u poglav u 3. Pretpostav a se
da se hip predstav a implicitno; egovi elementi smexteni su u vektor A
duine n, koji stablu odgovara na sledei naqin: koren je smexten u A[1], a
sinovi qvora zapisanog u A[i] smexteni su u A[2i] i A[2i + 1]. Stablo zadovo-
ava uslov hipa ako je vrednost svakog qvora vea ili jednaka od vrednosti
egovih sinova.
Algoritam hipsort izvrxava se na isti naqin kao i sortirae izborom;
razlika je u upotreb enoj strukturi podataka za smextae niza. Najpre se
elementi niza preureuju tako da qine hip; formirae hipa razmotriemo
nexto kasnije. Ako je hip u vektoru A, onda je A[1] najvei elemenat hipa.
Zamenom A[1] sa A[n] postie se da A[n] sadri najvei elemenat niza. Zatim
se razmatra niz A[1], A[2], . . . , A[n − 1]; preureuje se, tako da i da e zadovo-
ava uslov hipa (problem je jedino novi elemenat A[1]). Posle toga se sa tim
nizom rekurzivno ponav a postupak primeen na niz A[1], A[2], . . . , A[n]. Sve
u svemu, algoritam se sastoji od poqetnog formiraa hipa i n − 1 koraka,
u kojima se vrxi po jedna zamena i preureivae hipa. Preureivae hipa
je u osnovi isti postupak kao algoritam za uklaae najveeg elementa iz
hipa, ode ak 3.3. Formirae hipa je samo po sebi interesantan problem, pa
e biti posebno razmatran. Vremenska sloenost algoritma je dakle O(n log n)
(O(log n) po zameni) plus sloenost formiraa hipa. Jasno je da je hipsort
sortirae u mestu; algoritam je prikazan na slici 10.
Algoritam
Ulaz: (niz od brojeva).
Hipsort(X, n);
odozdo nagore. Voleli bismo da kaemo da je niz A[i+1], A[i+2], . . . , A[n] hip, u
koji treba ubaciti elemenat A[i]. Ali niz A[i + 1], A[i + 2], . . . , A[n] ne odgovara
jednom, nego kolekciji hipova (niz A[i + 1], A[i + 2], . . . , A[n] posmatramo kao
deo stabla predstav enog nizom A[1], A[2], . . . , A[n]). Zbog toga je induktivna
hipoteza nexto komplikovanija.
Induktivna hipoteza (odozdo nagore). Sva stabla predstav ena nizom
A[i + 1], A[i + 2], . . . , A[n] zadovo avaju uslov hipa.
98 5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
Indukcija je po i, ali obrnutim redosledom, i = n, n − 1, . . . , 1. Elemenat
oqigledno predstav a hip, xto predstav a bazu indukcije. Moe se za-
k uqiti i nexto vixe. Elementi vektora A sa indeksima od bn/2c + 1 do n
A[n]
su listovi stabla. Zbog toga se stabla koja odgovaraju tom nizu sastoje samo
od korena, pa trivijalno zadovo avaju uslov hipa. Dovo no je dakle da sa
indukcijom krenemo od i = bn/2c. To ve ukazuje da bi pristup odozdo nagore
mogao biti efikasniji: polovina posla je trivijalna; ovo je jox jedan primer
vanosti pa ivog izbora baze indukcije.
Razmotrimo sada elemenat A[i]. On ima najvixe dva sina A[2i + 1] i A[2i],
koji su, prema induktivnoj hipotezi, koreni ispravnih hipova. Zbog toga je
jasan naqin uk uqivaa A[i] u hip: A[i] se uporeuje sa veim od sinova, i
zameuje se sa im ako je potrebno. Ovo je sliqno brisau iz hipa, videti
poglav e 3. Sa zamenama se nastav a nanie niz stablo, dok prethodna vred-
nost elementa A[i] ne doe do mesta na kome je vea od oba sina. Konstrukcija
hipa odozdo nagore ilustrovana je primerom u tabeli 4.
Sloenost (odozgo nadole). Korak sa rednim brojem i zahteva najvixe
blog ic ≤ blog nc uporeivaa, pa je vremenska sloenost O(n log n). Ocena
sloenosti O(n log n) nije gruba, jer je
2 2
n
X n
X
blog2 ic ≥ blog2 ic ≥ (n/2)blog2 (n/2)c = Ω(n log n).
i=1