Algoritmi Miodrag ivkovi
Matematiqki fakultet, Beograd
E-mail address:
[email protected].
Predgovor Kiga sadri uvodni kurs u konstrukciju i analizu algoritama. Nameena je studentima smera Raqunarstvo i informatika na Matematiqkom fakultetu u Beogradu, za izborni predmet Primena raqunara. Kiga takoe moe da poslui sredoxkolcima za pripremu za takmiqea iz informatike. Za razumevae i izvoee analize algoritama potrebno je osnovno predznae iz analize i verovatnoe. Naravno, kiga e sigurno koristiti i svima onima koji se bave programiraem. Materijal se uglavnom zasniva na kizi [1], odakle potiqe i najvei deo zadataka. Redukovan je deo o grafovima, a deo o algebarskim algoritmima proxiren je pojmovima iz kriptologije (prema [6]). Korixeni su takoe neki delovi iz kiga [2, 3, 4, 5, 7, 8, 9]. Za qitaoca koga zanima ova oblast, mogu biti interesantne i kige [10, 11, 12, 13, 14, 15]. Poxto je ovo jedna od prvih kiga o algoritmima na naxem jeziku, terminologija se jox nije ustalila. Prilikom prevoda engleskih termina teilo se da prevod bude blizak originalu. Neki engleski termini koji su praktiqno prihvaeni u naxem jeziku, nisu prevoeni. Na kraju kige su dati reqnici termina u oba smera. Tako se na jednom mestu moe stei uvid u predloenu terminologiju. Namena ove kige je da qitalac ne samo upozna efikasne algoritme za rexavae nekih konkretnih problema, nego i da savlada "vextinu" konstrukcije efikasnih algoritama za rexavae novih problema. Umesto da se izlau gotovi, zavrxeni algoritmi, prikazuje se ihov razvoj, polazei od najjednostavnije varijante (pristup preuzet iz [1]). Konaqni oblik algoritama prilagoen je pre svega razumevau principa na kojima se oni zasnivaju, a tek onda jednostavnosti programiraa. Pri konstrukciji algoritama najvixe se koristi pristup zasnovan na dokazivau tvrea matematiqkom indukcijom. Iako su ci evi konstrukcije algoritma i dokazivaa teoreme razliqiti, sliqnost ove dve aktivnosti je neoqekivano velika. Efikasni nenumeriqki algoritmi vani su u mnogim oblastima, kao xto su matematika, statistika, molekularna biologija, tehnika, ...Mnogi struqaci smatraju bav ee algoritmima za dosadan, neinventivan posao (xto on ponekad i jeste). Ali takav pristup problemu qesto kao rezultat daje trivijalna i neefikasna rexea | qak i tamo gde postoje elegantna, efikasnija iii
iv
PREDGOVOR
rexea. Ova kiga trebalo bi da prui argumente da su algoritmi elegantna i vana disciplina. U prvom delu kige, u poglav ima 1-4, dat je uvodni materijal o matematiqkoj indukciji, analizi algoritama, strukturama podataka, kao i primeri konstrukcije algoritama pomou matematiqke indukcije. Narednih qetiri poglav a 5-8 bave se algoritmima za rexavae problema u pojedinim oblastima: u vezi sa nizovima i skupovima, grafovima, iz algebre i geometrije. Poglav e 9 daje osnovne pojmove iz kriptografije, oblasti veoma znaqajne kroz celu udsku istoriju, u kojoj algoritmi imaju veliku primenu. Redukcijama, odnosno meusobnim svoeima algoritama, posveeno je poglav e 10, a NP-kompletni problemi analizirani su u poglav u 11. Poslede poglav e sadri uvod u paralelne algoritme. Preliminarna verzija kige je isprav ena i dopuena zadacima sa rexeima. Veliki broj grexaka otkrili su studenti, na qemu im se autor zahva uje. Autor je unapred zahvalan i za sve budue primedbe i sugestije na sadraj kige. Poruke se mogu slati na adresu
[email protected].. Tei zadaci oznaqeni su zvezdicom. U rexavau zadataka uqestvovali su i studenti, xto je nastavu qinilo interesantnijom. Autor je zahvalan naroqito postdiplomcima A. Samar iu i M. Vugdeliji, koji su rexili vei broj zadataka. Za korisne primedbe i sugestije autor posebnu zahvalnost duguje recenzentima. Miodrag ivkovi
Sadraj Predgovor Poglav e 1. Matematiqka indukcija 1.1. Uvod 1.2. Dva jednostavna primera 1.3. Brojae oblasti na koje je pode ena ravan 1.4. Problem sa bojeem ravni 1.5. Primer sa sumiraem 1.6. Ojlerova formula 1.7. Grejovi kodovi 1.8. Nalaee disjunktnih puteva u grafu 1.9. Nejednakost izmeu aritmetiqke i geometrijske sredine 1.10. Invarijanta pet e | dokaz ispravnosti algoritma 1.11. Najqexe grexke 1.12. Rezime Zadaci Glava 2. Analiza algoritama 2.1. Uvod 2.2. Asimptotska oznaka O 2.3. Vremenska i prostorna sloenost 2.4. Sumirae 2.5. Diferencne jednaqine 2.6. Rezime Zadaci Glava 3. Strukture podataka 3.1. Elementarne strukture podataka 3.2. Stabla 3.3. Hip 3.4. Binarno stablo pretrage 3.5. AVL stabla 3.6. Hex tabele 3.7. Problem formiraa unija 3.8. Grafovi 3.9. Rezime v
iii
1 1 2 2 3 4 4 5 7 9 10 11 12 12 15 15 16 18 18 20 27 27 31 32 34 36 38 44 47 50 52 53
vi
SADRAJ
Zadaci Glava 4. Konstrukcija algoritama indukcijom 4.1. Uvod 4.2. Izraqunavae vrednosti polinoma 4.3. Maksimalni indukovani podgraf 4.4. Nalaee bijekcije 4.5. Problem pronalaea zvezde 4.6. Primer primene dekompozicije: maksimum skupa pravougaonika 4.7. Izraqunavae faktora ravnotee binarnog stabla 4.8. Nalaee maksimalnog uzastopnog podniza 4.9. Pojaqavae induktivne hipoteze 4.10. Dinamiqko programirae, problem ranca 4.11. Uobiqajene grexke 4.12. Rezime Zadaci Glava 5. Algoritmi za rad sa nizovima i skupovima 5.1. Uvod 5.2. Binarna pretraga i varijacije 5.3. Sortirae 5.4. Rangovske statistike 5.5. Kompresija podataka 5.6. Traee uzorka u tekstu 5.7. Uporeivae nizova 5.8. Probabilistiqki algoritmi 5.9. Rezime Zadaci Glava 6. Grafovski algoritmi 6.1. Uvod 6.2. Ojlerovi grafovi 6.3. Obilasci grafova 6.4. Topoloxko sortirae 6.5. Najkrai putevi iz zadatog qvora 6.6. Minimalno povezujue stablo 6.7. Svi najkrai putevi 6.8. Tranzitivno zatvoree 6.9. Uparivae 6.10. Transportne mree 6.11. Hamiltonovi ciklusi 6.12. Rezime Zadaci Glava 7. Geometrijski algoritmi
54 57 57 57 59 61 64 66 69 70 72 72 75 76 77 79 79 79 85 102 104 108 115 119 122 123 127 127 129 130 142 145 152 156 158 160 164 170 172 173 181
SADRAJ
7.1. Uvod 7.2. Utvrivae da li zadata taqka pripada mnogouglu 7.3. Konstrukcija prostog mnogougla 7.4. Konveksni omotaq 7.5. Najblii par taqaka 7.6. Preseci horizontalnih i vertikalnih dui 7.7. Rezime Zadaci Glava 8. Algebarski algoritmi 8.1. Uvod 8.2. Stepenovae 8.3. Euklidov algoritam 8.4. Mnoee polinoma 8.5. Mnoee matrica 8.6. Brza Furijeova transformacija 8.7. Rezime Zadaci Glava 9. Primene u kriptografiji 9.1. Uvod 9.2. Klasiqna kriptografija 9.3. Sluqajna xifra 9.4. DES 9.5. RSA 9.6. Rezime Zadaci Glava 10. Redukcije 10.1. Uvod 10.2. Primeri redukcija 10.3. Redukcije na problem linearnog programiraa 10.4. Primena redukcija na nalaee doih granica 10.5. Uobiqajene grexke 10.6. Rezime Zadaci Glava 11. NP-kompletnost 11.1. Uvod 11.2. Redukcije polinomijalne vremenske sloenosti 11.3. Nedeterminizam i Kukova teorema 11.4. Primeri dokaza NP-kompletnosti 11.5. Tehnike za rad sa NP-kompletnim problemima 11.6. Rezime Zadaci
vii
181 182 185 186 192 196 200 201 205 205 206 207 210 211 214 219 220 223 223 227 229 230 240 243 243 245 245 246 249 253 256 258 258 261 261 262 264 272 282 293 293
viii
SADRAJ
Glava 12. Paralelni algoritmi 12.1. Uvod 12.2. Modeli paralelnog izraqunavaa 12.3. Algoritmi za raqunare sa zajedniqkom memorijom 12.4. Algoritmi za mree raqunara 12.5. Sistoliqki algoritmi 12.6. Rezime Zadaci Glava 13. Uputstva i rexea zadataka 13.1. Matematiqka indukcija 13.2. Analiza algoritama 13.3. Strukture podataka 13.4. Konstrukcija algoritama indukcijom 13.5. Algoritmi za rad sa nizovima i skupovima 13.6. Grafovski algoritmi 13.7. Geometrijski algoritmi 13.8. Algebarski algoritmi 13.9. Primene u kriptografiji 13.10. Redukcije 13.11. NP-kompletnost 13.12. Paralelni algoritmi Srpsko-engleski i englesko-srpski terminoloxki reqnik Srpsko-engleski reqnik Englesko-srpski reqnik Literatura
295 295 296 298 309 321 323 324 327 327 332 336 340 344 351 362 368 372 374 377 380 385 385 390 397
POGLAVE 1
Matematiqka indukcija 1.1. Uvod
Matematiqka indukcija igra znaqajnu ulogu pri konstrukciji mnogih algoritama. Zbog toga se u ovom uvodnom poglav u analizira nekoliko karakteristiqnih primera primene indukcije. Neka je N = {1, 2, . . .} skup prirodnih brojeva. Princip matematiqke indukcije moe se formulisati na sledei naqin. Pretpostavimo da treba dokazati da je tvree T (n) taqno za svaki prirodan broj n ∈ N . Umesto da se ovo tvree "napada" direktno, dovo no je dokazati sledea dva tvrea: • T (n) je taqno za n = 1, i • za svako n > 1 vai: ako je taqno T (n − 1), onda je taqno i T (n). Ova qienica je takozvani princip indukcije, i predstav a ustvari aksiomu, koja definixe skup prirodnih brojeva. U praksi se obiqno prvo tvree (baza indukcije) lako dokazuje. Dokaz drugog tvrea olakxan je pretpostavkom da je taqno T (n − 1), takozvanom induktivnom hipotezom. Drugim reqima, dovo no je tvree svesti na sluqaj kad je n umaeno za jedan. Ilustrovaemo to jednim jednostavnim primerom. Teorema 1.1. Za svaka dva broja x, n ∈ N vai x − 1|x − 1. Dokaz. Dokaz se izvodi indukcijom po n. Za n = 1 tvree glasi x−1|x−1 i oqigledno je taqno. Svoee sluqaja n na sluqaj n − 1 zasniva se na izrazu x − 1 = (x − 1)x + (x − 1), jer on pokazuje da iz induktivne hipoteze x − 1|x − 1 sledi da je taqno x − 1|x − 1. ¤ Princip matematiqke indukcije qesto se koristi u nexto promeenim oblicima, koji su neposredna posledica osnovnog. Teorema 1.2. Ako je taqno tvree P (1) i za svako n > 1 iz pretpostavke da je P (k) taqno za svako k < n sledi taqnost P (n), onda je P (n) taqno za svako n ∈ N . Ovo je tzv. potpuna indukcija, a dobija se od osnovne varijante primenom na tvree T (n) = V P (k). Teorema 1.3 (Regresivna indukcija). Neka je a , a , . . . rastui niz prirodnih brojeva. Ako je tvree P (n) taqno za n = a , k = 1, 2, . . . i za svako n
n
n−1
n−1
n
n k=1
1
1
2
k
2
1. MATEMATIQKA INDUKCIJA
iz pretpostavke da je taqno P (n) sledi da je taqno P (n − 1), tada je taqno za svako n ∈ N . Prvi deo pretpostavke, da je P (a ) taqno za k ≥ 1 dokazuje se indukcijom (P (1), i ako P (a ) onda P (a ), k ≥ 1). Dakle, najpre se dokazuje da postoje proizvo no veliki brojevi n takvi da je P (n) taqno, a onda da je P (n) taqno i za sve "izostav ene" brojeve. Ovo je tzv. regresivna indukcija. n≥2 P (n)
k
k
k+1
1.2. Dva jednostavna primera
Potrebno je izraqunati sumu S(n) = 1 + 2 + . . . + n. Odgovor na ovo pitae daje sledea teorema. Teorema 1.4. Neka je S(n) = P i. Za svako n ∈ N je S(n) = n(n + 1). Dokaz. Kako je 1 = · 1 · 2, tvree je taqno za n = 1. Ako se pretpostavi da je ono taqno za neko n, onda je n i=1
1 2
1 2
S(n+1) = 1+2+. . .+n+(n+1) = S(n)+n+1 =
1 1 n(n+1)+(n+1) = (n+1)(n+2), 2 2
odnosno zak uqujemo da je tvree taqno i za n + 1. ¤ Teorema 1.5. Ako je n ∈ N i 1 + x > 0 onda je (1 + x) ≥ 1 + nx. Dokaz. Za n = 1 tvree je oqigledno taqno. Ako je tvree teoreme taqno za neko n (induktivna hipoteza), onda je n
(1 + x)n+1 = (1 + x)(1 + x)n ≥ (1 + x)(1 + nx) = 1 + (n + 1)x + nx2 ≥ 1 + (n + 1)x,
odnosno tvree teoreme je taqno i ako se u emu n zameni sa n + 1.
1.3. Brojae oblasti na koje je pode ena ravan
¤
Za nekoliko pravih u ravni kae se da su u opxtem poloaju ako nikoje dve nisu paralelne, a nikoje tri se ne seku u istoj taqki. Treba odrediti broj oblasti na koje ravan deli n ≥ 1 pravih u opxtem poloaju (pretpostavka da su prave u opxtem poloaju uvedena je da pojednostavi problem, jer tada nema potrebe za analizom raznih moguih specijalnih sluqajeva). Neposredno se vidi da jedna, dve, odnosno tri prave u opxtem poloaju dele ravan redom na dve, qetiri, odnosno sedam oblasti. Nasluuje se da uk uqivae n-te prave poveava za n broj oblasti na koje je ravan pode ena. Ako se pretpostavi da je to taqno, onda je broj oblasti na koje n pravih u opxtem poloaju deli ravan 2 + 2 + 3 + 4 + . . . + n = n(n + 1) + 1. Dakle, ostaje da se dokae Hipoteza 1.6. Dodavae n-te prave u ravni (pri qemu su svih n pravih u opxtem poloaju) poveava broj oblasti na koje je ravan pode ena za n. 1 2
1.4. PROBLEM SA BOJE EM RAVNI
3
Dokaz. Dokazaemo ovo tvree indukcijom po n. Tvree je oqigledno taqno za n = 1, 2, 3. Pretpostavimo da je ono taqno za neko n; neka je dato n + 1 pravih u ravni u opxtem poloaju, i neka je p jedna od tih pravih. Zbog toga xto su prave u opxtem poloaju, prava p sa proizvo nom oblaxu, od onih na koju ravan dele ostalih n pravih, nema zajedniqkih taqaka, ili je seqe. Prava p seqe svih ostalih n pravih, tj. seqe n + 1 oblast, xto znaqi da se enim dodavaem broj oblasti poveava za n + 1. ¤ Primedba. Ovde je indukcija primeena dva puta: poveae broja oblasti dodavaem n-te prave, a zatim ukupan broj oblasti na koje ravan deli n pravih. Ovakav postupak, ponekad i sa vixe nivoa, qesto se primeuje.
1.4. Problem sa bojeem ravni
Proizvo nih n pravih u ravni, deli ravan na oblasti; za prave se ne pretpostav a da su u opxtem poloaju. Kaemo da je ravan obojena sa dve boje (na primer crnom i belom) ako je svaka oblast obojena jednom od te dve boje, a svake dve susedne oblasti (one koje imaju deo prave ili celu pravu kao granicu) su obojene razliqitim bojama. Teorema 1.7. Ravan pode ena sa proizvo nih n pravih moe se obojiti sa dve boje. Dokaz. Tvree teoreme dokazuje se indukcijom po broju pravih n. Za n = 1 tvree je oqigledno taqno (ravan je pode ena na dve oblasti, jedna od ih boji se crno, druga belo). Pretpostavimo da se ravan, izde ena sa proizvo nih n − 1 pravih, moe obojiti sa dve boje. Dodavae n-te prave na proizvo an naqin deli neke oblasti na dva susedna dela obojena istom bojom. Meutim, ako se svim oblastima sa jedne strane n-te prave boja promeni u suprotnu, dobija se ispravno bojee ravni. Zaista, granice izmeu susednih oblasti mogu se podeliti na tri vrste: granice sa jedne, odnosno druge strane n-te prave, i granice na n-toj pravoj. Granice sve tri vrste odvajaju oblasti obojene razliqitim bojama. Dakle, polazei od induktivne hipoteze da se moe obojiti ravan pode ena se n − 1 pravih, pokazano je kako se dobija bojee ravni pode ene sa n proizvo nih pravih. ¤
Primedba. Ovaj primer je ilustracija maksimalnog, elastiqnog korixea induktivne hipoteze: od bojea oblasti u jednoj poluravni naprav eno je drugo ispravno bojee zamenom bele i crne boje.
4
1. MATEMATIQKA INDUKCIJA
1.5. Primer sa sumiraem
Pretpostavimo da su svi neparni brojevi ispisani u oviru xeme u obliku trougla, tako da u i-toj vrsti ima i brojeva, i = 1, 2, . . .: i suma 1 2 3 4
1
3 7 13
1 8 27 64
5 9
15
11 17
19
...
Potrebno je izraqunati sumu brojeva u i-toj vrsti. Izraqunavxi sume u prvih nekoliko vrsta, zapaamo da je suma jednaka kubu rednog broja vrste. Da se ovo tvree dokae indukcijom, dovo no je dokazati da je razlika zbirova u (i+1)-oj i i-toj vrsti jednaka (i+1) −i = 3i + 3i + 1. Da e, ako sa a oznaqimo posledi broj u i-toj vrsti, razlika zbirova u (i + 1)-oj i i-toj vrsti jednaka je i · 2i + a jer je svaki od prvih i brojeva u (i + 1)-oj vrsti vei od odgovarajueg u i-toj vrsti za 2i (poxto u i-toj vrsti ima i uzastopnih neparnih brojeva, razlika prvog u (i + 1)-oj vrsti i prvog u i-toj vrsti je 2i). Dakle, da bi se dokazalo drugo tvree, dovo no je dokazati da je 2i + a = 3i + 3i + 1, odnosno a = i + 3i + 1 = (i + 1) + (i + 1) − 1, ili a = i + i − 1. Ovo poslede tvree emo naravno dokazati indukcijom. Za i = 1 je a = 1 = 1 + 1 − 1, tj. tvree je taqno. Iz pretpostavke da je za neko i a = i + i − 1 sledi (jer u (i + 1)-oj vrsti ima i + 1 uzastopnih neparnih brojeva) da je a = a + 2(i + 1) = i + 3i − 1 = (i + 1) + (i + 1) − 1, qime je dokazano poslede pomono tvree, a samim tim i polazno tvree. U sledeem primeru videemo da se u dokazu induktivna hipoteza mora koristiti elastiqno, a ne onako kako bi na prvi pogled izgledalo da treba uqiniti. Teorema 1.8. Za svaki prirodan broj n je + + . . . + < 1. Dokaz. Za n = 1 je ovo oqigledno taqno. Nejednakost 3
3
2
i
i+1
2
2
i
i
2
i+1
i+1
2
2
2
1 2
i+1
i
2
2
1 2
1 4
1 2n
1 1 1 1 ( + + . . . + n ) + n+1 < 1 2 4 2 2
ne sledi iz prethodne, jer ako je zbir u zagradi mai od 1, on posle poveavaa za ne mora da ostane mai od 1. Problemi se izbegavaju ako se induktivna hipoteza primeni na posledih n sabiraka u ovoj nejednakosti: 1 2n+1
1 1 1 1 1 1 1 1 1 1 1 + ( + . . . + n + n+1 ) = + ( + + . . . + n ) < + · 1 = 1. 2 4 2 2 2 2 2 4 2 2 2
1.6. Ojlerova formula
¤
Sada emo dokazati tvree poznato kao Ojlerova formula (L. Euler , 1707-1783.). Posmatrajmo povezanu planarnu mapu sa V qvorova (temena), E
1.7. GREJOVI KODOVI
5
grana (ivica) i F broj oblasti na koje je ravan pode ena ivicama; jedna od oblasti je i spo axa, neograniqena oblast. Intuitivno, mapa je povezana ako se sastoji od jednog dela. Specijalno, povezana planarna mapa sa jednom oblaxu (F = 1) zove se stablo Na slici 1 prikazani su primeri mape (sa V = 4 qvora, E = 5 grana i F = 3 oblasti), odnosno stabla. h @
h @
@
@
@
h
h h Q
@ @h
QQ h ¡ ¡ ¡ h
h
h
h
h
h
Ris. 1. Primer planarne mape, odnosno stabla.
Teorema 1.9 (Ojlerova formula). Za povezanu planarnu mapu vai jednakost V + F = E + 2. Dokazatel~stvo. Dokaz e biti izveden dvostrukom indukcijom: najpre po broju oblasti F , a u okviru toga po broju qvorova V . Posmatrajmo najpre sluqaj F = 1. Tada mapa (u ovom sluqaju stablo) ne sadri ni jednu zatvorenu oblast, jer bi u protivnom zbog postojaa spo axe beskonaqne oblasti bilo F ≥ 2. Treba dokazati da tada vai V = E + 1. Ovo tvree dokazaemo indukcijom po broju qvorova V = n. Ako je n = 1 onda nema grana i tvree je taqno. Neka je tvree taqno za V = n. Posmatrajmo proizvo no stablo sa n + 1 qvorova. To stablo mora da ima bar jedan qvor v sa samo jednim susednim qvorom, jer bi u protivnom mapa sadrala zatvorenu oblast. Mapa, koja se od ove dobija uklaaem qvora v i grane e koja ga povezuje sa susednim qvorom, povezana je i nema zatvorenih oblasti, a broj qvorova u oj je n. Za tu mapu vai induktivna hipoteza: (V − 1) = (E − 1) + 1, pa je V = E + 1, qime je zavrxen dokaz teoreme za sluqaj F = 1. Pretpostavimo da je tvree teoreme taqno za planarne mape sa n oblasti, V + n = E + 2. Proizvo na mapa sa n + 1 oblasti ima bar jednu oblast koja je susedna sa spo axom oblaxu. Izbacivaem iz mape neke od grana koje odvajaju tu oblast od spo axe, dobija se mapa koja je i da e povezana i planarna, pri qemu su broj oblasti F i grana E smaene u odnosu na polazne vrednosti za po jedan. Na osnovu induktivne hipoteze za novu mapu vai V + (F − 1) = (E − 1) + 2, iz qega neposredno sledi da za polaznu mapu vai tvree teoreme. ¤
1.7. Grejovi kodovi
Grejov kod duine n > 1 je niz k-torki bita (k ≥ 1) s , s , . . . , s takvih da se u tom nizu svaka dva uzastopna qlana, kao i s , s , razlikuju na taqno 1
1
n
2
n
6
1. MATEMATIQKA INDUKCIJA
jednoj poziciji. Na primer, 00, 01, 11, 10 je Grejov kod duine 4. Zbog ove svoje osobine Grejovi kodovi imaju xiroku primenu. Lako je videti da ne postoje Grejovi kodovi neparne duine. Zaista, s i s se za i > 1 razlikuju na parnom, odnosno neparnom broju pozicija ako je i neparno, odnosno parno. Zbog toga se s i s za neparno n razlikuju na parnom, (dakle razliqitom od jedan) broju pozicija. Teorema 1.10. Za svaki paran broj n postoji Grejov kod duine n. Dokazatel~stvo. Grejov kod duine dva je, na primer, niz 0, 1. Ako postoji Grejov kod s , s , . . . , s duine n = 2k za neko k ∈ N (odnosno s , s , i = 1, 2, . . . , n − 1, kao i s , s , razlikuju se na taqno jednoj poziciji), onda se neposredno proverava da je 0s , 1s , 1s , 0s , 0s , . . . , 0s Grejov kod duine n+2, videti sliku 2. Ovde su sa 0s odnosno 1s oznaqeni blokovi bita dobijeni od s dodavaem nule, odnosno jedinice sa leve strane. ¤ 1
1
i
n
1
2
n
n
i
i+1
1
1
1
2
2
i
3
n
i
i
0s d 2k 0s d 1
1s1 d
XX » »X » X X » »X » d 0s2
d 1s2
d 0s3
Ris. 2. Produavae Grejovog koda za dva
Opisana konstrukcija Grejovih kodova parne duine ima vaan nedostatak: za kod duine 2k koriste se k-torke bita, tj. duine blokova bita poveavaju se za jedan svaki put kad se duina koda povea za dva. S druge strane, ako ne bi postojao zahtev o odnosu susednih qlanova niza, niz duine n mogao bi se kodirati k -torkama bita, gde je k = dlog ne; sa dxe oznaqen najmai ceo broj vei ili jednak od realnog broja x. Neracionalnost opisane konstrukcije moe se ispraviti tako xto bi se poveavaem duine blokova za jedan konstruisao dva puta dui, a ne Grejov kod dui za dva: (1.1) 0s , 0s , . . . , 0s , 1s , 1s , . . . , 1s , videti sliku 3. Nazovimo niz blokova bita s , s , . . . , s | kod koga se susedni blokovi bita s , s za svako i = 1, 2, . . . , n − 1 razlikuju na taqno jednoj poziciji | zatvorenim, odnosno otvorenim Grejovim kodom ako jeste, odnosno nije ispuen uslov da se blokovi s , s razlikuju na taqno jednoj poziciji. Dokaz sledee teoreme daje konstrukciju Grejovog koda sa minimalnom duinom blokova bita. 2
1
2
n
1
i
i+1
1
n
n
2
n−1
n
1
1.8. NALAE E DISJUNKTNIH PUTEVA U GRAFU 1s2
0s d 2 0s d 1 XX » »X » X X X » »» d 0sn d 0sn−1
7
d
d 1s1 »» » X X » »X » X X X d 1sn d 1sn−1
Ris. 3. Udvostruqavae duine Grejovog koda
Teorema 1.11. Za svako n > 1 postoji Grejov kod duine n sa dlog ne bita, i to zatvoren ako je n parno, odnosno otvoren ako je n neparno. Dokazatel~stvo. Oqigledno je da postoje Grejovi kodovi duine jedan i dva sa blokovima duine jedan. Pretpostavimo da postoje otvoreni, odnosno zatvoreni Grejovi kodovi svih duina k < n, sa veliqinom bloka blog kc. Ako je n parno, onda se primenom konstrukcije (1.1) (slika 3) na kod duine n/2 sa dlog (n/2)e bita (koji po induktivnoj hipotezi postoji), dobija kod duine n sa 1 + dlog (n/2)e = dlog ne bita. Neka je sad n = 2m + 1 neparno. Prema induktivnoj hipotezi postoji Grejov kod duine m sa dlog me bita. Od ega se na isti naqin dobija kod duine 2m sa d = 1 + dlog me = dlog (2m)e bita. Ako 2m nije stepen dvojke, onda postoje neiskorixeni blokovi (tj. blokovi koji ne pripadaju kodu) od d bita. Bar jedan od ih (neka je to kod s ) susedan je nekom od blokova 1s (odnosno razlikuje se od ega na taqno jednoj poziciji). Zbog toga se moe (videti sliku 4) konstruisati otvoreni kod duine 2
2
2
2
2
2
2
2
0
i
d = dlog2 (2m)e = dlog2 (2m + 1)e = dlog2 ne.
U protivnom, ako 2k jeste stepen dvojke, onda su svi kodovi duine d iskorixeni, pa se mogu najpre sve kodne reqi produiti dopisivaem nule spreda. Tako se pojav uju neiskorixeni kodovi (oni koji poqiu jedinicom), i sluqaj je sveden na prethodni, pri qemu je broj bita u kodnim reqima dlog2 (2m)e + 1 = log2 (2m) + 1 = dlog2 (2m + 1)e = dlog2 ne. ¤
1.8. Nalaee disjunktnih puteva u grafu
Neka je G = (V, E) neusmereni (graf za koga kod grana kao parova qvorova nije bitan redosled) povezan graf. Stepen qvora je broj grana koje su mu susedne. Ovi pojmovi objaxeni su u uvodnom ode ku poglav a 6 o grafovima, a koriste se u ovom interesantnom primeru. Neka je O skup qvorova neparnog
8
1. MATEMATIQKA INDUKCIJA 1s2
0s d 2 0s d 1 XX » »X » X X » »X » d 0sn
1si à d s0 à dÃà ¾
d
1s1
´ ´ d 1si+1 6
d »» » X X » »X » X X X d 1sn
d 0sn−1
d 1sn−1
Ris. 4. Konstrukcija otvorenog Grejovog koda
stepena; lako je videti da je broj takvih qvorova uvek paran. Zaista, sabirae stepena qvorova je isto xto i brojae grana, pri qemu se svaka grana broji taqno dva puta. Poxto je dakle zbir stepena svih qvorova, pa i qvorova iz skupa O, paran broj, broj qvorova u O mora biti paran. Za skup O vai sledee tvree. Teorema 1.12. Qvorovi iz skupa O qvorova neparnog stepena u neusmerenom povezanom grafu G = (V, E) mogu se podeliti na parove, tako da se mogu nai disjunktni (bez zajedniqkih grana) putevi koji povezuju prvi i drugi qvor u svakom paru. Dokazatel~stvo. Da bi se ovo tvree dokazalo indukcijom, moemo da pretpostavimo (induktivna hipoteza) da je ono taqno za grafove sa mae od m grana. Ako u skupu O ima vixe od dva qvora, izaberu se meu ima proizvo na dva. Poxto je graf povezan, u emu postoji put (niz grana) koji povezuje dva izabrana qvora. Uklaaem ovih grana iz grafa dobija se graf sa mae grana. Na ovaj graf se meutim ne moe primeniti induktivna hipoteza. Problem je u tome xto je mogue da se vaeem ovih grana dobije nepovezan graf (videti primer na slici 5). h Q
Q
QQ w ´ ´ ´
g´
""
h
" " w Q Q
QQ g
Ris. 5. Primer grafa koji uklaaem grane postaje nepovezan.
Rexee problema na koji smo naixli je na prvi pogled neobiqno. Sastoji se u pojaqau tvrea teoreme (pojaqavae induktivne hipoteze ): pokuxaemo da dokaemo da tvree vai ne samo za povezane, nego i za proizvo ne
1.9. NEJEDNAKOST IZMEU ARITMETIQKE I GEOMETRIJSKE SREDINE
9
neusmerene grafove. Izloeni dokaz treba promeniti samo u delu koji se odnosi na izbor dva qvora neparnog stepena: ih treba birati tako da pripadaju jednoj istoj komponenti povezanosti (povezanom delu, "ostrvu") grafa (xto je mogue, jer je broj qvorova neparnog stepena u svakoj komponenti povezanosti paran broj), xto obezbeuje postojae puta u grafu izmeu ta dva qvora. Graf koji se dobija uda avaem grana puta, bez obzira na eventualno poveae broja komponenti povezanosti, ima mai broj grana od m, pa za ega vai (pojaqana) induktivna hipoteza, tj. preostali qvorovi iz O mogu se podeliti na parove, koji se mogu povezati disjunktnim putevima. ¤ Ideja koja je ovde primeena, pojaqae induktivne hipoteze, qesto se koristi. Zasnovana je na prividnom paradoksu da se (vrlo qesto) jaqe tvree lakxe dokazuje.
1.9. Nejednakost izmeu sredine aritmetiqke i geometrijske
Kao primer tvrea koje se moe dokazati primenom regresivne indukcije iskoristiemo nejednakost izmeu aritmetiqke i geometrijske sredine. Teorema 1.13. Neka su x , x , . . . , x pozitivni realni brojevi. Tada je √ x + x + ··· + x x x ...x ≤ (1.2) n Dokazatel~stvo. Tvree emo dokazati primenom regresivne indukcije. Najpre emo dokazati da ono vai za brojeve oblika n = 2 , dakle za proizvo no velike brojeve, a zatim da iz pretpostavke da ono vai za neko n sledi da ono vai za n − 1. U prvom delu dokaza baza indukcije (n = 2 ) je nejednakost 1
n
1 2
2
n
n
1
2
n
k
1
√
1 (x1 + x2 ), 2 (x1 − x2 )2 ≥ 0 1 2 2 2 x1 + 2x1 x2 + x2 ≥ 4x1 x2 4 (x1 + x2 ) ≥ x1 x2 n = 2k 2n = 2k+1 x1 , x2 , . . . , x2n vv v v v u u 2n u 2n u³ n uu n 2n ´ uY u Y u 1 X ´³ 1 X uY 2n n n t x =u t t t xi xi ≤ t xi xi ≤ i n i=1 n i=n+1 i=1 i=1 i=n+1 x1 + x2 ≤
koja je posledica oqigledne nejednakosti , odnosno vai za sledi da za brojeva
(odakle se dobija ). Iz pretpostavke da (1.2) vai
n 2n 2n ´ 1³ 1 X 1 X 1 X ≤ xi + xi = xi , 2 n i=1 n i=n+1 2n i=1
odnosno tvree (1.2) vai za dvostruko vei broj brojeva x . Time je zavrxen prvi deo dokaza. Sada emo pokazati da ako jednakost (1.2) vai za proizvo nih n brojeva, onda ona vai i za proizvo nih n − 1 brojeva. Da bi se u (1.2) smaio broj promen ivih, jednu od ih treba vezati za ostale, odnosno izraziti je i
10
1. MATEMATIQKA INDUKCIJA
preko ih. Neka je dakle x = P x , tj. x biramo tako da bude jednako aritmetiqkoj sredini ostale n − 1 promen ive. Tada desna strana nejednakosti (1.2) postaje jednaka x : 1 n−1
n
n−1 i=1
i
n
n
1 n
n X
n − 1³ 1 X ´ 1 n−1 1 xi + xn = xn + xn = xn , n n − 1 i=1 n n n Qn−1 xn i=1 xi ≤ xnn , v un−1 n−1 uY 1 X n−1 t xi ≤ xn = xi . n − 1 i=1 i=1 n−1
xi =
i=1
pa (1.2) prelazi u
odnosno
Prema tome, zavrxetkom drugog dela dokaza dokazano je da nejednakost (1.2) izmeu aritmetiqke i geometrijske sredine vai za svako n ∈ N . ¤
1.10. Invarijanta pet e | dokaz ispravnosti algoritma
Matematiqka indukcija qesto se koristi za dokazivae korektnosti algoritma, posebno u sluqaju kad se algoritam sastoji od vixestrukog izvrxavaa iste grupe naredbi. Ideja je da se pokae da je neko tvree (invarijanta pet e ) taqno pre ulaska u pet u i posle svakog prolaska kroz pet u, a da iz egove taqnosti na kraju izvrxea algoritma sledi korektnost algoritma. Ovaj metod ilustrovaemo dokazom korektnosti algoritma koji za zadati prirodni broj n izraqunava egove binarne cifre, komponente vektora b, tj. vrxi egovu konverziju u binarni oblik (slika 6). Algoritam se sastoji od pet e u kojoj su tri naredbe: poveavae k (indeksa za vektor b), izraqunavae ostatka i celog dela koliqnika pri de eu pomone promen ive t sa dva. Algoritam Ulaz: (prirodan broj) Izlaz: (niz binarnih cifara broja ) Bin cifre(n);
n
b
begin
t := n; { k := 0;
n
pomona promen iva t sa poqetnom vrednoxu n}
while t > 0 do k := k + 1; b[k] := t mod 2; t := t div 2; end
Ris. 6. Algoritam za izraqunavae binarnih cifara broja.
Teorema 1.14. Po zavrxetku algoritma Bin cif re u vektoru b nalaze se binarne cifre broja n.
1.11. NAJQEXE GREXKE
11
Dokazatel~stvo. Dokaz ispravnosti algoritma bie sproveden pomou invarijante pet e. Razmotrimo sledeu induktivnu hipotezu. Induktivna hipoteza. Neka je m broj qije su binarne cifre biti dobijeni u k prvih prolazaka kroz pet u, pri qemu je b[1] najnii bit. Tada je t · 2 + m = n. Za k = 0 je t = n i m = 0, pa je ovo tvree taqno. Neka je induktivna hipoteza taqna za neko k ≥ 0. U narednom prolasku kroz pet u dobijaju se nove vrednosti b[k + 1] = t mod 2, t = t div 2, i m = b[k + 1]2 + m = (t mod 2)2 + m, pa je k
0
0
k
k
t0 2k+1 + m0 = (t div 2)2k+1 + (t mod 2)2k + m = ¡ ¢ = 2k 2 · (t div 2) + (t mod 2) + m = 2k · t + m = n,
zbog induktivne hipoteze. Time je dokazano da izraz t2 + m ne mea vrednost od prolaska do prolaska kroz pet u, odnosno da je on invarijanta pet e. Kako je posle posledeg prolaska kroz pet u t = 0, u tom trenutku e biti m = n, qime je ispravnost algoritma dokazana. ¤ k
1.11. Najqexe grexke
Prilikom izvoea dokaza indukcijom qesta je grexka da se kao oqigledna qienica iskoristi tvree koje je blisko ili ekvivalentno dokazivanom. Time se faktiqki pojaqava induktivna hipoteza, ali se ne dokazuje da iz taqnosti pojaqane hipoteze za n sledi ena taqnost za n + 1. Vano je da se pri prelasku sa sluqaja n na n + 1 dokaz izvede polazei od proizvo nog sluqaja n + 1. Kao primer mogue grexke, razmotrimo sledei "dokaz" Ojlerove formule V + F = E + 2 indukcijom po F . Polazei od povezane planarne mape sa F = n koja ima bar jednu unutraxu oblast (n ≥ 2), u toj oblasti se na dve iviqne grane izaberu dva nova qvora i poveu granom. U novoj mapi F , V i E su poveani redom za jedan, dva i tri, pa dakle i za u vai Ojlerova formula. Problem sa ovim "dokazom" je u tome xto se opisanom konstrukcijom ne mogu dobiti sve mogue mape za koje je F = n + 1: mogui su i sluqajevi da se jedna unutraxa oblast podeli na dve granom koja povezuje jedan novi i jedan postojei qvor, odnosno granom koja povezuje dva postojea qvora. Prethodno opisanom konstrukcijom se ustvari mogu dobiti samo grafovi kojima svi novododati qvorovi imaju stepen tri. Razmotrimo jox jedan primer "dokaza" indukcijom. Teorema 1.15 (netaqna). Dato je n pravih u ravni tako da nikoje dve medju ima nisu paralelne. Dokazati da svih n pravih imaju zajedniqku taqku. Dokazatel~stvo. (pogrexan) Za n = 1 tvree je taqno. Xta vixe, ono je taqno i za n = 2. Neka ono vai za neko n i neka je dato proizvo nih n + 1 pravih u ravni takvih da nikoje dve meu ima nisu paralelne. Tada prema
12
1. MATEMATIQKA INDUKCIJA
induktivnoj hipotezi prvih n pravih imaju zajedniqku taqku. Isto vai i za posledih n pravih. Ove dve taqke se moraju poklapati, xto znaqi da svih n + 1 pravih imaju zajedniqku taqku. ¤ Grexka u ovom dokazu prikrivena je u qienici da prelaz sa n na n + 1 ne vai za n = 2: od tri razmatrane prave a, b i c preseqna taqka prvih dveju, a i b, ne mora da se poklapa sa preseqnom taqkom posledih dveju, b i c.
1.12. Rezime
Matematiqka indukcija je moan metod za dokazivae teorema. Najpre se formulixe induktivna hipoteza i bira se promen iva po kojoj e dokaz indukcijom biti izveden. Ponekad se induktivna hipoteza moe formulisati na vixe naqina | neki vode kraem, a neki duem dokazu; ponekad se uvodi potpuno nova promen iva, potrebna samo za izvoee dokaza. Dokaz se ponekad izvodi indukcijom na vixe nivoa, od kojih svaki vodi sve blie ci u. Pojaqavae induktivne hipoteze je qest postupak, kojim se dokazuje tvree opxtije od zadatog. Dokaz indukcijom sastoji se od dva dela | baze i koraka indukcije (redukcije, svoea). Bazu ponekad nije lako dokazati, ali je to ipak rei sluqaj. Zbog toga se ovaj deo dokaza ponekad grexkom ignorixe. Sr dokaza je u redukciji: najqexe se tvree sa parametrom n svodi na analogno tvree sa parametrom n − 1. Druga mogua varijanta je potpuna indukcija, kad se sluqaj n svodi na nekoliko drugih za vrednosti k < n. Takoe se koristi i postupak svoea sa 2n na n, a zatim sa n na n + 1, tzv. regresivna indukcija. U svim varijantama je vano da se o dokazivanom tvreu ne pretpostavi nixta vixe od induktivne hipoteze.
Zadaci
U nekim zadacima o grafovima koriste se pojmovi iz uvodnog ode ka poglav a 6. 1.1. Dokazati da je za proizvo ne prirodne brojeve n, x, y, takve da je x 6= y, x − y de ivo sa x − y. 1.2. Odrediti izraz za sumu 1 · 2 + 2 · 3 + · · · + n · (n + 1) i dokazati taqnost tog izraza indukcijom. 1.3. Dokazati da je 1 − 2 + 3 − 4 + · · · + (−1) k = (−1) k(k + 1)/2. 1.4. Neka je A podskup skupa {1, 2, . . . , 2n} koji ima n + 1 elemenat. Dokazati da postoje brojevi a, b ∈ A takvi da a|b. 1.5. Neka su a, b i n prirodni brojevi. Dokazati da je 2 (a + b ) ≥ (a + b) . 1.6. Odrediti zbir elemenata i-te vrste Paskalovog trougla (videti sliku 7) i dokazati taqnost tog tvrea indukcijom. Na ivicama trougla su jedinice, a u unutraxosti je svaki broj jednak zbiru dva broja iznad ega. 1.7. Dokazati da za svako n > 1 vai nejednakostPP > 1.8. Dokazati da za svako n > 1 iz jednakosti 1/i = k/m (pri qemu su k i m su uzajamno prosti brojevi), sledi da je k neparan, a m paran prirodan broj. n
2
2
2
2
k−1 2
k−1
n−1
2n 1 i=n+1 i
∗
n i=1
n
n
13 24
n
n
ZADACI
13
1 1 1 1
1 2
3
1 3
1
···
Ris. 7. Uz zadatak 1.6. 1.9. Posmatrajmo niz 1, 2, 3, 4, 5, 10, 20, 40, . . ., koji poqie kao aritmetiqka progresija, a posle prvih pet qlanova postaje geometrijska progresija. Dokazati da se svaki prirodan broj moe predstaviti u obliku zbira razliqitih brojeva iz ovog niza. 1.10. Dato je n ≥ 3 pravih u ravni u opxtem poloaju. Dokazati da je bar jedna od oblasti koje one formiraju | trougao. 1.11. Dato je n taqaka u ravni, takvih da za svake tri meu ima postoji krug polupreqnika 1 koji ih sadri. Dokazati da postoji krug polupreqnika 1 koji sadri svih n taqaka. 1.12. Dokazati da oblasti na koje ravan deli n krunica sa po jednom povuqenom tetivom (slika 8) mogu biti obojene sa tri boje, tako da su susedne oblasti uvek obojene razliqitim bojama.
Ris. 8. Uz zadatak 1.12. 1.13. Data je planarna mapa qiji su svi qvorovi parnog stepena (odnosno svi qvorovi su povezani ivicom sa parnim brojem drugih qvorova). Dokazati da se oblasti na koje deli ravan ova mapa mogu obojiti sa dve boje tako da su susedne oblasti uvek obojene razliqitom bojom. 1.14. Neka su d , d , . . . , d prirodni brojevi, n ≥ 2. Dokazati da ako je P d = 2n−2 onda postoji stablo sa n qvorova qiji su stepeni brojevi d , d , . . . , d . 1.15. Neka je dato n taqaka na krunici i neka su svake dve od ih spojene dui, pri qemu se nikoje tri dui ne seku u istoj taqki. Na koliko oblasti ove dui dele krug? 1.16. Neka je G = (V, E) neusmereno stablo i neka je f : V → V preslikavae qvorova tog stabla koje zadovo ava sledei uslov: krajeve svake grane stabla preslikava ili u jedan isti qvor ili u dva qvora koji su takoe krajevi grane stabla ("kontrakcija"). Pokazati da u G postoji "nepokretni qvor" (takav da ga f preslikava u samog sebe) ili "nepokretna grana" (grana koju f "obre", odnosno f preslikava jedan kraj grane u drugi i obrnuto). 1.17. Dirihleov princip glasi: ako je u n urni ubaqena n + 1 kuglica, onda neka urna sadri vixe od jedne kuglice. Dokazati ovaj princip indukcijom. 1
2
n i=1
n
1
2
n
i
14
1. MATEMATIQKA INDUKCIJA
1.18. Kompletno binarno stablo (KBS) se induktivno definixe na sledei naqin. KBS visine 0 sastoji se od samo jednog qvora, korena. KBS visine h + 1 sastoji se od dva KBS visine h, qiji su koreni sinovi istog qvora | koji je novi koren. Neka je T KBS visine h. Visina qvora u T je h umaeno za rastojae qvora od korena; tako npr. koren ima visinu h, a listovi visinu 0. Dokazati da je suma visina svih qvorova u T jednaka 2 − h − 2. 1.19. Dokazati da qlanovi Fibonaqijevog niza (F = F = 1, F = F + F za n ≥ 3) zadovo avaju jednakost F + F =F za n ≥ 1. 1.20. Neka je K kompletan neusmereni graf sa n qvorova (graf u kome su svaka dva qvora povezana granom), i neka je n paran broj. Dokazati da se grane K mogu izdeliti na taqno n/2 povezujuih stabala (povezujue stablo grafa je egov podgraf { stablo, koji sadri sve qvorove grafa). 1.21. U neusmerenom grafu G = (V, E) uparivae je skup grana u kome nikoje dve grane nemaju zajedniqki qvor. Savrxeno uparivae je takvo uparivae koje "pokriva" sve qvorove grafa. Konstruisati primer familije grafova G , sa 2n qvorova i n grana, n = 1, 2, . . . tako da G ima taqno jedno savrxeno uparivae. 1.22. Neka su a , a , . . . , a pozitivni realni brojevi takvi da je ihov proizvod 1. Dokazati, ne koristei nejednakost izmeu aritmetiqke i geometrijske sredine, da je h+1
2 n
∗
2 n+1
1
2
n
n−1
n−2
2n+1
n
n
∗
n
2
n
1
2
n
(1 + a1 )(1 + a2 ) . . . (1 + an ) ≥ 2n .
b
1.23. Konstruisati algoritam za konverziju binarnog broja u dekadni. Ulaz je niz bita duine k, a izlaz je broj n. Dokazati korektnost algoritma pomou invarijante pet e.
Glava 2
Analiza algoritama 2.1. Uvod
Ci analize algoritma je da se predvidi egovo ponaxae, posebno brzina izvrxavaa, ne realizujui ga na (nekom konkretnom) raqunaru. Ideja je dakle da se proceni brzina rada bez realizacije algoritma, i to tako da procena vai za svaki raqunar. Uostalom, napor da se algoritam ispita na svakom raqunaru je preambiciozan, izmeu ostalog i zbog toga xto bi trebalo uzeti u obzir sve mogue realizacije "podalgoritama" (npr. mnogi algoritmi sadre sortirae, koje se moe izvrxiti razliqitim postupcima). Taqno ponaxae algoritma je nemogue predvideti, sem u najjednostavnijim sluqajevima. Na ponaxae utiqe mnogo faktora, pa se u obzir uzimaju samo glavne karakteristike, a zanemaruju se deta i vezani za taqnu realizaciju. Prema tome | analiza algoritma mora da bude priblina. Ipak se na taj naqin dobijaju znaqajne informacije o algoritmu, koje npr. omoguuju uporeivae razliqitih algoritama za rexavae istog problema. Logiqan pristup prilikom analize brzine izvrxavaa algoritma je da se zanemaruju konstantni faktori, jer se brzine izvrxavaa algoritma na razliqitim raqunarima razlikuju se priblino za konstantni faktor. Interesantno je oceniti ponaxae brzine izvrxavaa algoritma kad veliqina ulaza tei beskonaqnosti. Ako je, na primer, ulaz u algoritam vektor duine n, a algoritam se sastoji od 100n koraka, onda se kae da je sloenost algoritma n; ili za sloenost 2n + 50 koraka kae se da je n . Za drugi od ova dva algoritma kae se da je sporiji, iako za n = 5 vai 100n > 2n +50; nejednakost 2n + 50 > 100n taqna je npr. za svako n > 100. Na sreu, obiqno su konstante u izrazima za sloenost algoritama male. Zbog toga, iako asimptotski pristup oceivau sloenosti ponekad moe da dovede do zabune, u praksi se dobro pokazuje i dovo an je za prvu aproksimaciju efikasnosti. Ci analize, odreivae vremena izvrxavaa algoritma za odreeni ulaz | praktiqno je neostvar iv (sem za najjednostavnije algoritme), jer je texko uzeti u obzir sve mogue ulaze. Zbog toga se za svaki mogui ulaz najpre definixe egova veliqina (dimenzija) n, posle qega se u analizi koristi samo ovaj podatak. Veliqinu ulaza neemo ovde strogo definisati; obiqno je to mera veliqine memorijskog prostora potrebnog za smextae opisa ulaza kad se upotrebi bilo koje razumno kodirae npr. bitima. Nepostojae opxte 2
2
2
2
15
16
2. ANALIZA ALGORITAMA
definicije veliqine problema nee ovde izazivati potexkoe, jer se obiqno uporeuju razliqiti algoritmi za rexavae istog problema. Dakle, analiza algoritma treba da kao rezultat da izraz za utroxeno vreme u zavisnosti od n. Meutim, postav a se pitae | koji meu ulazima veliqine n izabrati kao reprezentativan? Qesto se za ovu svrhu bira najgori sluqaj. Najbo i ulaz je qesto trivijalan. Da e, sredi (proseqan) ulaz samo na prvi pogled izgleda kao dobar izbor. Meutim, analiza je tada komplikovana, a potexkou predstav a i definisae raspodele verovatnoa na skupu svih ulaza veliqine n, i to tako da ona odgovara situacijama koje se pojav uju u praksi. Zbog toga je korisno analizu vrxiti za najgori sluqaj. Dobijeni rezultati najqexe su bliski proseqnim, odnosno eksperimentalnim rezultatima; ili, ako je qak najgori sluqaj u pogledu sloenosti bitno drugaqiji od "proseqnog", algoritam koji dobro radi u najgorem sluqaju obiqno dobro radi i u proseku. Izneseni razlozi opravdavaju praksu da se najqexe vrxi analiza najgoreg sluqaja. Analiza asimptotskog ponaxaa sloenosti algoritma, i to u najgorem sluqaju meu ulazima odreene veliqine | to je dakle aproksimacija vremena rada odreenog algoritma na odreenom ulazu, koja ipak najqexe dobro karakterixe osobine algoritma.
2.2. Asimptotska oznaka O
Definicija 2.1. Neka su f i g pozitivne funkcije od argumenta n iz skupa N prirodnih brojeva. Kae se da je g(n) = O(f (n)) ako postoje pozitivne konstante c i N , takve da za svako n > N vai g(n) ≤ cf (n). Oznaka O(f (n)) se ustvari odnosi na klasu funkcija, a jednakost g(n) = O(f (n)) je uobiqajena oznaka za inkluziju g(n) ∈ O(f (n)). Jasno je da je funkcija f samo neka vrsta gore granice za funkciju g. Na primer, pored jednakosti 5n + 15 = O(n ) (jer je 5n + 15 ≤ 6n za n ≥ 4) vai i jednakost 5n + 15 = O(n ) (jer je 5n + 15 ≤ n za n ≥ 6). Ova notacija omoguuje ignorisae multiplikativnih konstanti: umesto O(5n + 4) moe se pisati O(n). Sliqno, u izrazu O(log n) osnova logaritma nije bitna, jer se logaritmi za razliqite osnove razlikuju za multiplikativnu konstantu: 2
2
2
3
2
2
2
3
loga n = loga (blogb n ) = logb n · loga b.
Specijalno, O(1) je oznaka za klasu ograniqenih funkcija. Poznato je da svaka eksponencijalna funkcija sa osnovom > 1 raste bre od svakog polinoma. Dakle, ako je f (n) monotono rastua funkcija koja nije ograniqena, a > 1 i c > 0, onda je ¡ ¢ (2.1) f (n) = O a . Specijalno, za f (n) = n¡ dobija se n = O(a ), a za f (n) = log n dobija se jednakost (log n) = O a ) = O(n), tj. proizvo an stepen logaritamske funkcije raste sporije od linearne funkcije. c
f (n)
c
a
c
loga n
n
a
2.2. ASIMPTOTSKA OZNAKA O
17
Lako se pokazuje da se O-izrazi mogu sabirati i mnoiti: O(f (n)) + O(g(n)) = O(f (n))O(g(n)) =
O(f (n) + g(n)), O(f (n)g(n)).
Na primer, druga od ovih jednakosti moe se iskazati na sledei naqin: ako je neka funkcija h(n) jednaka proizvodu proizvo ne funkcije r(n) iz klase O(f (n)) i proizvo ne funkcije s(n) iz klase O(g(n)), onda h(n) = r(n)s(n) pripada klasi O(f (n)g(n))). Zaista, ako je r(n) = O(f (n)) i s(n) = O(g(n)) onda postoje pozitivni N , N , c i c takvi da za n > N vai r(n) < c f (n) i za n > N vai s(n) < c g(n)¡. Meutim, ¢za N = max{N , N } i c = max{c , c , c c ¡} vai r(n)¢+ s(n) < c f (n) ¡+ g(n) i¢r(n)s(n) < cf (n)g(n), tj. r(n) + s(n) = O f (n) + g(n) i r(n)s(n) = O f (n)g(n) . Meutim, O-izrazi odgovaraju relaciji ≤, pa se ne mogu oduzimati i deliti.¡ Tako npr. iz¢ f (n) = O(r(n)) i g(n) = O(s(n)) ne sledi da je f (n) − g(n) = O r(n) − s(n) (videti zadatke 2.13 i 2.14). Sledei primer ilustruje zaxto treba skoncentrisati pau na asimptotsko ponaxae. Neka je f (n) ukupan broj operacija pri izvrxavau nekog algoritma na ulazu veliqine n, pri qemu je f (n) neka od funkcija log n, n, n log n, n , n , n , 1.1 . Pretpostavimo da se algoritam izvrxava na raqunaru koji izvrxava m operacija u sekundi, m ∈ {10 , 10 , 10 , 10 }. U tabeli 1 prikazana su vremena izvrxavaa algoritma na ulazu fiksirane veliqine n = 1000, na raqunarima razliqite brzine. Vidi se kakav je uticaj konstantnih faktora: kod algoritama koji se mogu izvrxiti za prihvat ivo vreme uticaj zamene raqunara brim je primetan. Meutim, kod algoritma u posledoj koloni, sa eksponencijalnom funkcijom f (n), zamena raqunara brim ne qini problem rexivim. 1
1
2
2
1
2
2
1.5
1
2
1
2
1
2
3
2
n
3
f (n) log2 n m 103 104 105 106
2
1 2
0.01 0.001 0.0001 0.00001
n
n log2 n
1.0 10.0 0.1 1. 0.01 0.1 0.001 0.01
n1.5 32.0 3.2 0.32 0.032
4
n2
5
6
n3
1.1n
1000 106 100 105 10 104 1 103
1039 1038 1037 1036
Tablica 1. Trajae izvrxavaa f (n) operacija na raqunaru koji izvrxava m operacija u sekundi, za n = 1000.
Drugi problem u vezi sa sloenoxu algoritma je pitae doe granice za potreban broj raqunskih operacija. Dok se gora granica odnosi na konkretan algoritam, doa granica sloenosti odnosi se na proizvo an algoritam iz neke odreene klase. Zbog toga ocena doe granice zahteva posebne postupke analize. Za funkciju g(n) kae se da je asimptotska doa granica funkcije T (n) i pixe se T (n) = Ω(g(n)), ako postoje pozitivni c i N , takvi da za svako
18
2. ANALIZA ALGORITAMA
vai T (n) > cg(n). Tako je na primer n = Ω(n − 100), i n = Ω(n ). Vidi se da simbol Ω odgovara relaciji ≥. Ako za dve funkcije f (n) i g(n) istovremeno vai i f (n) = O(g(n)) i f (n) = Ω(g(n)), onda one imaju iste asimptotske brzine rasta, xto se oznaqava sa f (n) = Θ(g(n)). Tako je na primer 5n log n − 10 = Θ(n log n), pri qemu je u posledem izrazu osnova logaritma nebitna. = 0 oznaqava se sa f (n) = o(g(n)). Na kraju, qienica da je lim Na primer, oqigledno je = o(n), a jednakost = o(n) nije taqna. Odnos izmeu stepene i eksponencijalne funkcije (2.1) moe se precizirati: ako je f (n) monotono rastua funkcija koja nije ograniqena, a > 1 i c > 0, onda je ¢ ¡ 2
n>N
2
0.9
2
n log2 n
f (n) n→∞ g(n)
n 10
f (n)c = o af (n) .
2.3. Vremenska i prostorna sloenost
Ocena (vremenske) sloenosti algoritma sastoji se u brojau raqunskih koraka koje treba izvrxiti. Meutim, termin raqunska operacija moe da podrazumeva razliqite operacije, na primer sabirae i mnoee, qije izvrxavae traje razliqito vreme. Razliqite operacije se mogu posebno brojati, ali je to obiqno komplikovano. Pored toga, vreme izvrxavaa zavisi i od konkretnog raqunara, izabranog programskog jezika, odnosno prevodioca. Zato se obiqno u okviru algoritma izdvaja neki osnovni korak, onaj koji se najqexe ponav a. Tako, ako se radi o sortirau, osnovni korak je uporeivae. Ako je broj uporeivaa O(f (n)), a broj ostalih operacija je proporcionalan broju uporeivaa, onda je O(f (n)) granica vremenske sloenosti algoritma. Pod prostornom sloenoxu algoritma podrazumeva se veliqina memorije potrebne za za izvrxavae algoritma, pri qemu se prostor za smextae ulaznih podataka najqexe ne raquna To omoguuje uporeivae razliqitih algoritama za rexavae istog problema. Kao i kod vremenske sloenosti, i za prostornu sloenost se najqexe trai eno asimptotsko ponaxae u najgorem sluqaju, za velike veliqine problema. Prostorna sloenost O(n) znaqi da je za izvrxavae algoritma potrebna memorija proporcionalna onoj za smextae ulaznih podataka. Ako je pak prostorna sloenost algoritma O(1), onda to znaqi da je potreban memorijski prostor za egovo izvrxavae ograniqen konstantom, bez obzira na veliqinu ulaza. Brojae osnovnih koraka u algoritmu najqexe nije jednostavan posao. Razmotriemo nekoliko tipiqnih situacija na koje se nailazi.
2.4. Sumirae
Ako se algoritam sastoji od delova koji se izvrxavaju jedan za drugim, onda je egova sloenost jednaka zbiru sloenosti delova. Meutim, ovo sabirae nije uvek jednostavno. Na primer, ako je osnovni deo algoritma pet a u kojoj indeks i uzima vrednosti 1, 2, . . . , n, a izvrxavae i-tog prolaska kroz pet u troxi f (i) koraka, onda je vremenska sloenost algoritma P f (i). Razmotriemo neke primere sumiraa. n i=1
2.4. SUMIRA E
19
Primer 2.1. Ako je f (i) = i, odnosno u i-tom prolasku kroz pet u izvrxava se i koraka, onda je ukupan broj koraka S(n) = P i = n(n + 1), xto smo videli u poglav u 1 (teorema 1.4). Ako ovo uporedimo sa situacijom u kojoj se u svakom prolasku kroz pet u izvrxava n koraka, odnosno ukupno n koraka, vidimo da je u prvom sluqaju sloenost priblino dva puta maa. Primer 2.2 (Stepene sume). Ako sa S (n) oznaqimo opxtiju sumu k-tih stepena prvih n prirodnih brojeva, P i , za izraqunavae suma S (n) moe se iskoristiti rekurentna relacija µ ¶ ¢ 1 X k+1 1 ¡ (2.2) S (n) = − k + 1 (n + 1) S (n) + −1 . k+1 j Ova jednakost dobija se sumiraem oqigledne jednakosti n i=1
1 2
2
n k i=1
k
k
k−1
k
k+1
j
j=0
¶ k−1 µ ¢ 1 X k+1 j 1 ¡ i + (i + 1)k+1 − ik+1 , i =− j k + 1 j=0 k+1 k
i = 1, 2, . . . , n.
Polazei od S (n) = n, S (n) = n(n + 1)/2, za k = 2 se dobija 0
1
n X
¢ 1¡ ¢ 1¡ S0 (n) + 3S1 (n) + (n + 1)3 − 1 = 3 3 i=1 µ ¶ 1 3 n(n + 1) 1 = n + 3n2 + 3n − n − 3 = (n3 + 3n2 + n) = 3 2 6 1 = n(n + 1)(2n + 1). 6
S2 (n) =
i2 = −
Primer 2.3. Suma geometrijske progresije n X
F (n) =
dobija se oduzimaem jednakosti P q: n+1 i i=1
(q − 1)F (n) =
q n+1 − 1 q−1 i=0 Pn i F (n) = i=0 q
n+1 X
qi =
qi −
n X
od qF (n) = P
n i+1 i=0 q
=
q i = q n+1 − 1.
Primer 2.4. Polazei od izraza za sumu geometrijske progresije moe se izraqunati suma G(n) = P i2 . Diferenciraem, pa mnoeem sa x jednakosti X i=1
n i=1
i=0
i
n
xi = (xn+1 − 1)/(x − 1)
dobija se
i=0 n X
ixi = x
(n + 1)xn (x − 1) − (xn+1 − 1) . (x − 1)2
Odatle se za x = 2 dobija G(n) = (n − 1)2 i=1
n+1
+ 2.
20
2. ANALIZA ALGORITAMA
Primer 2.5. Svoeem na prethodnu moe se izraqunati suma H(n) =
n X
i2n−i .
i=1
Zaista, smenom indeksa sumiraa j = n − i, i = n − j, pri qemu j prolazi skup vrednosti n − 1, n − 2, . . . , n − n = 0, dobija se H(n) =
n−1 X
(n − j)2j = n
j=0
n−1 X
2j −
j=0 n
n−1 X
j2j = nF (n − 1) − G(n − 1) =
j=0
n
= n(2 − 1) − (n − 2)2 − 2 = 2n+1 − n − 2.
2.5. Diferencne jednaqine
Ako za qlanove niza F , n = 1, 2, . . ., vai jednakost (2.3) F = f (F ,F , . . . , F , n), onda se kae da niz F zadovo ava diferencnu jednaqinu (ili rekurentnu relaciju) (2.3). Specijalno, ako se za neko k ≥ 1 qlan F izraava preko k prethodnih qlanova niza, (2.4) F = f (F ,F ,...,F , n), onda je k red te diferencne jednaqine. Matematiqkom indukcijom se neposredno dokazuje da je diferencnom jednaqinom 2.4 i sa prvih k qlanova F , F , ..., F niz F jednoznaqno odreen. Ako neki niz G zadovo ava istu diferencnu jednaqinu G = f (G , G , . . . , G , n), i vai F = G za i = 1, 2, . . . , k, onda za svako n ≥ 1 vai F = G . Jedna od najpoznatijih diferencnih jednaqina je ona koja definixe Fibonaqijev niz, (2.5) F =F +F , F = F = 1. Da bi se na osnovu e izraqunala vrednost F potrebno je izvrxiti n − 2 koraka (sabiraa), pa je ovakav naqin izraqunavaa F nepraktiqan za velike n. Taj problem je zajedniqki za sve nizove zadate diferencnim jednaqinama. Izraz koji omoguuje direktno izraqunavae proizvo nog qlana niza (dakle ne preko prethodnih) zove se rexee diferencne jednaqine. Na diferencne jednaqine se qesto nailazi pri analizi algoritama. Zbog toga emo razmotriti nekoliko metoda za ihovo rexavae. n
n
n−1
n−2
1
n
n
n
n−1
n−2
n−k
1
k
n
2
n
n
n−1
n−2 n
n
n−k
i
i
n
n−1
n−2
1
2
n
n
2.5.1.QestoDokazivae pretpostav enog rexea diferencne jednaqine. se diferencne jednaqine rexavaju tako da se pretpostavi oblik rexea, ili qak taqno rexee, posle qega se posle eventualnog preciziraa
rexea indukcijom dokazuje da to jeste rexee. Pri tome je qesto drugi deo posla, dokazivae, lakxi od prvog | pogaaa oblika rexea.
2.5. DIFERENCNE JEDNAQINE
21
Primer 2.6. Posmatrajmo diferencnu jednaqinu
(2.6) T (2n) = 2T (n) + 2n − 1, T (2) = 1. Ova diferencna jednaqina definixe vrednosti T (n) samo za indekse oblika n = 2 , m = 1, 2, . . .. Postavimo sebi skromniji ci | pronalaee neke gore granice za T (n), odnosno funkcije f (n) koja zadovo ava uslov T (n) ≤ f (n) (za indekse n koji su stepen dvojke, xto e se na da e podrazumevati), ali tako da procena bude dovo no dobra. Pokuxajmo najpre sa funkcijom f (n) = n . Oqigledno je T (2) = 1 < f (2) = 4. Ako pretpostavimo da je T (i) ≤ i za i ≤ n (induktivna hipoteza), onda je ¡ ¢ m
2
2
T (2n) = 2T (n) + 2n − 1 ≤ 2n2 + 2n − 1 = 4n2 − 2n(n − 1) + 1 < 4n2 ,
pa je f (n) gora granica za T (n) za sve (dozvo ene) vrednosti n. Meutim, iz dokaza se vidi da je dobijena granica gruba: u odnosu na qlan 4n odbaqen je qlan priblino jednak 2n za velike n. S druge strane, ako se pretpostavi da je gora granica linearna funkcija f (i) = ci za i ≤ n, onda bi trebalo dokazati da ona vai i za i = 2n: 2
2
T (2n) = 2T (n) + 2n − 1 ≤ 2cn + 2n − 1.
Da bi posledi izraz bio mai od c · 2n, moralo bi da vai 2n − 1 ≤ 0, xto je nemogue za n ≥ 1. Zak uqujemo da f (n) = cn ne moe da bude gora granica za T (n), bez obzira na vrednost konstante c. Trebalo bi nai izraz koji je po asimptotskoj brzini rasta izmeu n i n . Ispostav a se da je dobra granica zadata funkcijom f (n) = n log n: T (2) = 1 ≤ f (2) = 2 log 2 = 2, a ako je T (i) ≤ f (i) taqno za i ≤ n, onda je 2
2
2
T (2n) = 2T (n) + 2n − 1 ≤ 2n log2 n + 2n − 1 = 2n log2 (2n) − 1 < 2n log2 (2n).
Dakle, T (n) ≤ n log n je taqno za svako n oblika 2 . Na osnovu qienice da je u ovom dokazu pri prelasku sa n na 2n zanemaren qlan 1 u odnosu na 2n log (2n), zak uquje se da je procena ovog puta dovo no dobra. "Diferencna nejednaqina" k
2
2
T (2n) ≤ 2T (n) + 2n − 1,
T (2) = 1
definixe samo gore granice za T (n), ako je n stepen dvojke. Svaka gora granica rexea (2.6) je rexee ove diferencne nejednaqine | dokazi indukcijom su praktiqno identiqni. Ova diferencna nejednaqina moe se, kao i (2.6), proxiriti tako da odreuje goru granicu za T (n) za svaki prirodan broj n: µ j k¶ T (n) ≤ 2T
n 2
+ n − 1,
T (1) = 0.
Moe pokazati da za niz T (n), koji zadovo ava ovaj uslov, nejednakost T (n) ≤ vai za svako n ≥ 1. Zaista, ona je taqna za n = 1, a iz pretpostavke da je ona taqna za brojeve mae od nekog prirodnog broja m sledi da je za m = 2k n log2 n
T (2k) ≤ 2T (k) + 2k − 1 ≤ 2k log2 k + 2k − 1 = 2k log2 (2k) − 1 < (2k) log2 (2k)
22
2. ANALIZA ALGORITAMA
odnosno za m = 2k + 1
T (2k + 1) ≤ 2T (k) + 2k ≤ 2k log2 k + 2k = 2k log2 (2k) < (2k + 1) log2 (2k + 1),
tj. ta nejednakost je tada taqna i za n = m. Dakle, ta nejednakost je dokazana indukcijom. 2.5.2. Linearne diferencne jednaqine. Razmotriemo sada homogene linearne diferencne jednaqine oblika (2.7) F (n) = a F (n − 1) + a F (n − 2) + · · · + a F (n − k). Rexea se mogu traiti u obliku (2.8) F (n) = r , gde je r pogodno izabrani (kompleksni) broj. Zamenom u (2.7) dobija se uslov koji r treba da zadovo i: 1
2
k
n
rk − a1 rk−1 − a2 rk−2 − · · · − ak = 0,
takozvana karakteristiqna jednaqina linearne diferencne jednaqine (2.7); polinom sa leve strane ove jednaqine je karakteristiqni polinom ove linearne diferencne jednaqine. U sluqaju kad su svi koreni karakteristiqnog polinoma r , r , . . . , r razliqiti, dobijamo k rexea (2.7) oblika (2.8). Tada se svako rexee moe predstaviti u obliku 1
2
k
F (n) =
k X
ci rin
i=1
(ovo tvree navodimo bez dokaza). Ako je prvih k qlanova niza F (n) zadato, rexavaem sistema od k linearnih jednaqina dobijaju se koeficijenti c , i = 1, 2, . . . , k , a time i traeno rexee. Primer 2.7. Opxti qlan niza zadatog diferencnom jednaqinom F = F +F , i poqetnim uslovima F = F = 1 (Fibonaqijevog niza) moe se odrediti√na opisani naqin.√ Koreni karakteristiqne jednaqine r −r−1 = 0 su r = (1+ 5)/2 i r = (1− 5)/2, pa je rexee ove diferencne jednaqine oblika F = c r + c r . Koeficijenti c i c odreuju se iz uslova F = F = 1, ili nexto jednostavnije iz uslova F = F − F = 0 i F = 1: i
n
n−1
1
n
n−2
n 1 1
1
n 2 2
2
2
1
2
0
c1 c1 r1
2
Rexee ovog sistema jednaqina je c jevog niza zadat sa
+c2 +c2 r2
1
(2.9)
2
1
1
2
1
=0 = 1.
= −c2 =
√1 5
, pa je opxti qlan Fibonaqi-
√ √ 1 ³³ 1 + 5 ´n ³ 1 − 5 ´n ´ . Fn = √ − 2 2 5
2.5. DIFERENCNE JEDNAQINE
23
U opxtem sluqaju, ako su koreni karakteristiqne jednaqine r , r , . . . , r vixestrukosti redom m , m , . . . , m (P m = k), onda se svako rexee jednaqine (2.7) moe predstaviti u obliku 1
1
2
s
F (n) =
2
s
i
s X
hi (n),
i=1
gde je ¡ ¢ h (n) = C + C n + C n + · · · + C r n (ovo tvree takoe navodimo bez dokaza). Primer 2.8. Karakteristiqni polinom diferencne jednaqine i
i0
i1
2
i2
i,mi −1
mi −1
n i
F (n) = 6F (n − 1) − 12F (n − 2) + 8F (n − 3)
je r − 6r + 12r − 8 = (r − 1) , sa trostrukim korenom r = 2. Zbog toga su sva rexea ove diferencne jednaqine oblika F (n) = (c + c n + c n )2 , gde su c , c , c konstante koje se mogu odrediti ako se znaju npr. tri prva qlana niza F (1), F (2) i F (3). 2.5.3. Diferencne jednaqine koje se rexavaju sumiraem. Qesto se nailazi na linearnu nehomogenu diferencnu jednaqinu oblika (2.10) F (n + 1) − F (n) = f (n), pri qemu F (0) ima zadatu vrednost. Drugim reqima, razlika dva uzastopna qlana traenog niza jednaka je datoj funkciji od indeksa n. Rexavae ovakve diferencne jednaqine svodi se na izraqunavae sume P f (i). Zaista, ako u goroj jednakosti n zamenimo sa i i izvrximo sumirae ene leve i desne strane po i u granicama od 0 do n − 1, dobijamo 3
2
3
1
0
1
1
2
2
n
0
2
n−1 i=0
n−1 X i=0
f (i) =
n−1 X
F (i + 1) −
i=0
n−1 X
F (i) =
i=0
n X
F (i) −
n−1 X
i=1
F (i) = F (n) − F (0).
i=0
Prema tome, rexee diferencne jednaqine (2.10) dato je izrazom X (2.11) F (n) = f (i) + F (0). Primer 2.9. Razmotrimo diferencnu jednaqinu F (n + 1) = F (n) + 2n + 1 sa poqetnim uslovom F (0) = 0. eno rexee je n−1 i=0
F (n) =
n−1 X i=0
(2i + 1) = 2
n−1 X i=0
i+
n−1 X
1 = n(n − 1) + n = n2
i=0
U sluqaju kad je texko izraqunati sumu P f (i) preko koje se izraava rexee diferencne jednaqine (2.10), a funkcija f (x) od realnog argumenta je n−1 i=0
24
2. ANALIZA ALGORITAMA
monotono nerastua neprekidna funkcija za x ≥ 0, tada se sabiraem nejednakosti Z i+1
f (i) ≥
dobijaju nejednakosti
f (x) dx ≥ f (i + 1),
0 ≤ i ≤ n − 1,
i
n−1 X i=0
Z
n
f (x) dx ≥
f (i) ≥ 0
n X
a time i granice intervala u kome lei suma P Z
f (i),
i=1
n
f (x) dx + f (0) − f (n) ≥ 0
n−1 X
n−1 i=0
f (i)
Z
f (i) ≥
:
n
f (x) dx. 0
i=0
Ako je pak funkcija f (x) monotono neopadajua, u ovim nejednakostima samo treba promeniti znake "≥" u "≤".
2.5.4. Diferencne jednaqine za algoritme zasnovane na dekompoziciji. Pretpostavimo da nam je ci analiza algoritma A, pri qemu broj operacija T (n) pri primeni algoritma A na ulaz veliqine n (vremenska sloenost)
zadovo ava diferencnu jednaqinu tipa³ ´ n (2.12) T (n) = aT + cn , b pri qemu je a, b, c, k ≥ 0, b 6= 0, i zadata je vrednost T (1). Ovakva jednaqina dobija se za algoritam kod koga se obrada ulaza veliqine n svodi na obradu a ulaza veliqine n/b, posle qega je potrebno izvrxiti jox cn koraka da bi se od parcijalnih rexea konstruisalo rexee kompletnog ulaza veliqine n. Jasno je zaxto se za ovakve algoritme kae da su tipa "zavadi pa vladaj", (engleski divide–and–conquer ), kako se jox zovu algoritmi zasnovani na dekompoziciji. Obiqno je dakle u ovakvim diferencnim jednaqinama b prirodan broj. Teorema 2.1. Asimptotsko ponaxae niza T (n), rexea diferencne jednaqine (2.12) dato je jednakoxu ) za a > b O(n (2.13) T (n) = O(n log n) za a = b . O(n ) za a < b Dokazatel~stvo. Dokaz teoreme bie sproveden samo za podniz n = b , gde je m celi nenegativni broj. Pomnoivxi obe strane jednakosti (2.12) sa a /c, dobijamo diferencnu jednaqinu tipa (2.10) k
k
logb a
k
k
k
k
k
m
−m
tm = tm−1 + q m ,
t0 =
1 T (1), c
2.5. DIFERENCNE JEDNAQINE
gde su uvedene oznake t
m
= 1c a−m T (bm )
25
i q = b /a. eno rexee je k
tm = t0 +
m X
qi
i=1
(videti 2.5.3). Za q 6= 1 je q = (1 − q )/(1 − q) − 1, pa se asimptotsko ponaxae niza t opisuje sledeim jednakostima O(m), za q = 1 t = O(1), za 0 < q < 1 . O(q ), za q > 1 Poxto je T (b ) = ca t , n = b , odnosno m = log n, redom se za 0 < q < 1 (b < a), q = 1 (b = a, odnosno log a = k) i q > 1 (b > a) dobija ) = O(n ) za a > b O(a ) = O(b T (n) = O(ma ) = O(log n · n ) = O(n log n) za a = b , O((aq) ) = O(b ) = O(n ) za a < b qime je tvree teoreme dokazano. ¤ Algoritmi ovog tipa imaju xiroku primenu zbog svoje efikasnosti, pa je korisno znati asimptotsko ponaxae rexea diferencne jednaqine (2.12). 2.5.5. Potpuna rekurzija. Diferencna jednaqina najopxtijeg oblika (2.3) zove se potpuna rekurzija ili diferencna jednaqina sa potpunom istorijom. Razmotriemo dva primera ovakvih diferencnih jednaqina. Primer 2.10. Neka za n ≥ 2 vai T (n) = c + P T (i), pri qemu su c i T (1) zadati. Osnovna ideja za rexavae ovakvih problema je tzv. "eliminacija istorije" nalaeem ekvivalentne diferencne jednaqine sa "konaqnom istorijom" (takve kod koje se qlan niza izraava preko ograniqenog broja prethodnih). Zamenom n sa n + 1 u ovoj jednaqini dobija se T (n + 1) = c + P T (i). Oduzimaem prve od druge jednakosti postie se e eni efekat: Pm
i=1
i
m+1
m
m
m
m
k
m
k
m
m
b k
b
m
m logb a
m
b mk
m
logb a
logb a
k
k
k
k
k
n−1 i=1
n i=1
T (n + 1) − T (n) = c +
(za n ≥ 2), i konaqno
n X i=1
n−1 X ¡ ¢ T (i) − c + T (i) = T (n) i=1
¡ ¢ T (n + 1) = 2T (n) = 22 T (n − 1) = · · · = 2n−1 T (2) = 2n−1 c + T (1) .
Primetimo da se jednakost T (n + 1) = 2T (n) logaritmovaem i smenom t = svodi na t = t + log 2, odnosno diferencnu jednaqinu tipa (2.10). Primer 2.11. Razmotriemo sada sloeniji primer. Diferencna jednaqina 2 X (2.14) T (n) = n − 1 + T (i), n ≥ 2, T (1) = 0, n n
log T (n)
n+1
n
n−1 i=1
26
2. ANALIZA ALGORITAMA
je vana, jer se do e dolazi pri analizi proseqne sloenosti sortiraa razdvajaem, algoritma za ureivae zadatog skupa brojeva po veliqini (sortirae, videti 5.3.4). Ideja o "eliminaciji istorije" moe se i ovde primenitiP | zbog toga je zgodno prepisati zadatu jednaqinu tako da se u oj uz sumu T (i) ne pojav uje promen ivi qinilac n: n−1 i=1
nT (n) = n(n − 1) + 2
n−1 X
T (i).
i=1
Zatim ovu jednakost treba oduzeti od one koja se od e dobija zamenom n sa :
n+1
(n + 1)T (n + 1) − nT (n) = (n + 1)n + 2
odnosno
n X
T (i) − n(n − 1) − 2
i=1
T (n + 1) =
n−1 X
T (i) = 2n + 2T (n),
i=1
2n n+2 + T (n), n+1 n+1
n ≥ 2.
Ovim je prvi ci postignut: dobijena diferencna jednaqina povezuje samo dva uzastopna qlana niza. Rexavae ove diferencne jednaqine moe se svesti poznat problem (2.10) de eem sa n + 2 i smenom t = T (n)/(n + 1): n
T (n + 1) T (n) 2n − = , n+2 n+1 (n + 1)(n + 2)
odnosno
tn+1 − tn =
2n . (n + 1)(n + 2)
Zamenom n sa i i sumiraem po i u granicama od 1 do n dobija se (t = 0) X 2i (2.15) t −t = . (i + 1)(i + 2) Da bi se izraqunala suma sa desne strane ove jednakosti, moe se en opxti qlan razloiti na parcijalne razlomke 1
n
n+1
1
i=1
2i A B = + , (i + 1)(i + 2) i+1 i+2
gde se nepoznati koeficijenti A i B dobijaju tako xto se u identitetu 2i = stavi najpre i = −1 (dobija se A = −2), a onda i = −2 (odakle je ). Sada je traena suma jednaka A(i+2)+B(i+1) B=4 n X i=1
n n n+1 n+2 X X X1 X1 2i 1 1 = −2 +4 = −2 +4 = (i + 1)(i + 2) i+1 i+2 i i i=1 i=1 i=2 i=3
=2
n+1 X i=3
1 1 4 4 −2· + = 2H(n + 1) − 4 + , i 2 n+2 n+2
ZADACI
27
gde je sa X1 1 (2.16) H(n) = = ln n + γ + O( ), i n oznaqena parcijalna suma harmonijskog reda; γ ' 0.577 je Ojlerova konstanta. Zamenom vrednosti sume u (2.15) dobija se rexee diferencne jednaqine (2.14) n
i=1
¡ T (n + 1) = 2H(n + 1) − 4 +
4 ¢ (n + 2) = 2(n + 1)H(n + 1) − 4(n + 1), n+2
odnosno (2.17) T (n) = 2nH(n) − 4n = 2n ln n + (2γ − 4)n + O(1) = O(n ln n). U toku izvoea korixen je poznati asimptotski razvoj (2.16). Qesto je korisno znati i asimptotski razvoj³za´n!, Stirlingovu formulu odnosno (2.18)
n! =
√
2πn
n e
n¡
1 ¢ 1 + O( ) , n
log(n!) = O(n log n).
2.6. Rezime
Ci analize algoritma je predvideti egovo ponaxae, xto nije lako. Osnovni metod koji se koristi je aproksimacija. Zanemaruju se mnogi deta i, a ci je izdvojiti samo najvanije karakteristike algoritma. Asimptotska oznaka O je korisna za takva izraqunavaa. Teina analize kao pratioca procesa konstrukcije algoritma ne bi trebalo da bude izgovor za odustajae od e. Bitno je dobiti bar nekakvu predstavu o efikasnosti algoritma. U mnogim sluqajevima, naroqito kad se koristi rekurzija, nailazi se na diferencne jednaqine. Tada obiqno treba izraqunati nekoliko prvih qlanova niza, xto moe da prui neki uvid u ponaxae niza, odnosno da sugerixe mogui oblik opxteg qlana. Postoje i drugi metodi za rexavae diferencnih jednaqina. Na sreu, veina algoritama na koje se u praksi nailazi, dovodi do diferencnih jednaqina razmotrenih u ovom poglav u.
Zadaci
2.1. Dokazati da ako je f (n) = o(g(n)), onda je f (n) = O(g(n)). Da li je taqna obrnuta implikacija? 2.2. Polazei od (2.1) dokazati da za proizvo ne konstante a i b vai (log n) = O(n ). 2.3. Odrediti taqno rexee sledee diferencne jednaqine 2
b
T (n) = T (n − 1) +
2.4. Rexiti diferencnu jednaqinu
n , 2
T (n) = 8T (n − 1) − 15T (n − 2),
T (1) = 1.
T (1) = 1, T (2) = 4.
a
28
2. ANALIZA ALGORITAMA
2.5. Rexiti diferencnu jednaqinu 2.6. Rexiti diferencnu jednaqinu
T (n + 3) = 4T (n + 2) − 5T (n + 1) + 2T (n),
T (2n) = 2
n X
T (1) = 1, T (2) = 2, T (3) = 3.
T (2i − 1), T (2n + 1) = 2
n X
T (2i), T (1) = 1.
2.7. Problem P sa parametrom n (n je prirodan broj) rexava se primenom algoritama i B. Algoritam A rexava P (n > 1) primenom algoritma B na P , pri qemu se za svoee problema troxi n vremenskih jedinica. Algoritam B rexava P (n > 1) primenom algoritma A na P , pri qemu se za svoee problema troxi n vremenskih jedinica. Problem P algoritam A rexava direktno za jednu, a algoritam B za dve vremenske jedinice. Izraqunati vreme izvrxavaa algoritma A pri rexavau problema P . 2.8. Dokazati da niz T (n), rexee diferencne jednaqine T (n) = 2T (bn/2c) + 2n log n, T (1) = 0, zadovo ava jednakost T (n) = O(n log n). 2.9. Rexiti diferencnu jednaqinu T (n) = 2T (n/2) + c log n, T (1) = 0; moe se pretpostaviti da je n oblika 2 . 2.10. (a) Pokazati da rexee diferencne jednaqine T (n) ≤ T (bn/2c) + 1, T (1) = 1, zadovo ava uslov T (n) ≤ blog nc + 1. (b) Dokazati da rexee iste diferencne jednaqine sa promeenim poqetnim uslovom T (1) = 0 zadovo ava nejednakost T (n) ≤ dlog ne + 1. 2.11. Rexiti sledeu potpunu rekurziju i=1
i=1
n
A
n
n−1 n
n−1
1
n
2
2
2
k
2
2
T (n) = n +
n−1 X
T (i)
(n ≤ 2),
T (1) = 1.
2.12. Ograniqavajui sa gore strane qlanove sume odreenim integralima, dokazati da za svaki prirodni broj k vai P i log i = O(n log n). 2.13. Pokazati kontraprimerom da sledee tvree nije taqno: ako je f (n) = O(s(n)) i g(n) = O(r(n)), onda je f (n) − g(n) = O(s(n) − r(n)). 2.14. Nai kontraprimer za sledee tvree ako je f (n) = O(s(n)) i g(n) = O(r(n)), onda je f (n)/g(n) = O(s(n)/r(n)). 2.15. Navesti primer dve monotono rastue funkcije (niza) f (n) i g(n), takve da nije ni f (n) = O(g(n)) ni g(n) = O(f (n)). 2.16. Razmotrimo diferencnu jednaqinu T (n) = 2T (n/2) + 1, T (2) = 1. Pokuxavajui da dokaemo da je T (n) = O(n) (ograniqavamo se na sluqaj kad je n stepen dvojke), pretpostav amo da za k < n vai T (k) ≤ ck za neku (za sada nepoznatu) konstantu c, i zameujemo T (n) i T (n/2) u diferencnoj jednaqini redom sa cn i cn/2. Za uspexan dokaz koraka indukcije morala bi da vai nejednakost cn ≥ 2c(n/2) + 1, koja, meutim, oqigledno nije taqna. Nai taqno rexee ove diferencne jednaqine (moe se pretpostaviti da je n stepen dvojke) i objasniti razlog neuspeha opisanog pokuxaja. 2.17. Odrediti asimptotsko ponaxae niza S(n), rexea diferencne jednaqine S(mn) ≤ cm log mS(n) + O(mn), S(2) = 1, pri qemu su m i c konstante. 2.18. Dokazati da rexee diferencne jednaqine T (n) = 2T (n − c) + k, gde su c i k celobrojne konstante, ima oblik T (n) = O(d ) za neku konstantu d. i=1
n k i=1
2
2
n
k+1
ZADACI
29
2.19. Sledea diferencna jednaqina se pojav uje pri analizi nekih algoritama zasnovanih na dekompoziciji ulaza na delove razliqite veliqine: T (n) =
k X
ai T (n/bi ) + cn,
i=1
pri qemu konstante a , b zadovo avaju uslov P a /b < 1. Odrediti asimptotsko ponaxae niza T (n). 2.20. Odrediti asimptotsko ponaxae rexea diferencne jednaqine (a) T (n) = 4T ¡¡d√√ne¢¢ + 1, T (2) = 1; (b) T (n) = 2T d ne + 2n, T (2) = 1. 2.21. Dokazati da diferencna jednaqina T (n) = kT (n/2) + f (n), T (1) = c, ima rexee T (n) = n (c + g(2) + g(4) + . . . + g(n)) , gde je g(m) = f (m)m . Moe se pretpostaviti da je n stepen dvojke. 2.22. Odrediti asimptotsko ponaxae rexea T (n) diferencne jednaqine √ T (n) = T (n/2) + n, T (1) = 1. Moe se smatrati da n uzima samo vrednosti jednake stepenima dvojke. 2.23. Odrediti asimptotsko ponaxae rexea diferencne jednaqine º¶ µ¹ i
k i=1
i
i
i
log2 k
− log2 k
T (n) = 2T
n log2 n
+ 3n
(n > 2),
T (1) = 1, T (2) = 2,
tj. odrediti funkciju f (n) takvu da je T (n) = Θ(f (n)). 2.24. Oceujui sa gore strane qlanove sume odreenim integralima, dokazati da za = O(n). niz S(n) = P dlog (n/i)e vai S(n) 2.25. Izraqunati taqno sumu P blog c ako je n stepen dvojke. 2.26. Fibonaqijevi brojevi F (n) mogu se definisati i za negativne vrednosti n koristei istu definiciju F (n + 2) = F (n + 1) + F (n) i F (1) = 1, F (0) = 0 (tako je npr. F (−1) = 1, F (−2) = −1, itd.). Neka je G(n) = F (−n) za n ≥ 0. Napisati diferencnu jednaqinu za niz G(n). Pokazati da je eno rexee G(n) = (−1) F (n). n i=1
2
n i=1
n 2 i
n+1
Glava 3
Strukture podataka Strukture podataka mogu se shvatiti kao elementi nad kojima se grade algoritmi. Zbog toga je ihovo poznavae (odnosno poznavae tehnika rada sa ima i poznavae sloenosti operacija sa ima) neophodno za savladavae tehnika konstrukcije algoritama. Strukture podataka su xiroko prouqavana oblast. Ovde e biti dat samo uvod u osnovne strukture podataka. Koristan pojam koji emo u vezi sa strukturama podataka koristiti je apstraktni tip podataka. U programima se obiqno taqno specificira tip svakog podatka (celi, realni, logiqki, i sliqno). Meutim, u nekim sluqajevima pri konstrukciji algoritama konkretan tip podataka nije bitan. Na primer, ako se radi sa FIFO listom (skraeno od first–in–first–out , odnosno prvi{unutra{prvi{napo e) od interesa su operacije upisa na listu i skidaa sa e. Elementi se sa liste skidaju istim redom kojim su u u upisivani; primer FIFO liste je red za karte ispred bioskopa. Korisno je da se u ovom sluqaju ne precizira tip podataka, nego samo operacije sa ima. Apstraktni tip podataka nad kojim se mogu izvoditi ove dve operacije gradi strukturu podataka koju zovemo FIFO lista. Najvanija karakteristika apstraktnog tipa podataka je dakle spisak operacija koje se nad im mogu izvrxavati. Drugi primer apstraktnog tipa podataka je lista u kojoj su qlanovima pridrueni brojevi { prioriteti. Skidae elemenata sa liste vrxi se redom prema prioritetu qlanova liste, a ne prema redosledom upisivaa. Ova struktura podataka zove se lista sa prioritetom. I u ovom sluqaju nepotrebno je specificirati tip samih podataka { qlanova liste; xta vixe, ni tip podataka prioriteta { dovo no je da su prioriteti elementi potpuno ureenog skupa. Koncentrixui pau na prirodu struktura podataka sa aspekta potrebnih operacija, a zanemarujui preciznu realizaciju, dobija se opxtiji algoritam. Tako, na primer, tehnike realizacije liste sa prioritetom malo zavise od konkretno izabranog tipa podataka. Dakle, ako uoqimo da nam je potreban neki apstraktni tip podataka, moemo odmah da ga primenimo. Time konstrukcija algoritama postaje modularnija | sastoji se od meusobno malo zavisnih celina. 31
32
3. STRUKTURE PODATAKA
3.1. Elementarne strukture podataka
Pod elementom podrazumevamo podatak kome tip nije preciziran (na primer celi broj, skup celih brojeva, fajl i sliqno). Tako, na primer, kad se radi o sortirau (ureivau elemenata linearno ureenog skupa po veliqini), ako su jedine operacije uporeivae i kopirae, onda se isti algoritam moe primeniti i na cele brojeve i na imena | razlika je samo u realizaciji, a ideje na kojima se zasniva algoritam su iste. Ako nas prvenstveno interesuju ideje za konstrukciju algoritama, razumno je ignorisati konkretne tipove podataka elemenata. Ako se npr. radi o sortirau, za elemente se pretpostav a da se mogu uporeivati na jednakost, da su iz potpuno ureenog skupa, i da se mogu kopirati. Pored toga, pretpostavka je se da se sve operacije nad elementima izvode u jediniqnom vremenskom intervalu. Vektor. Vektor (niz) je niz elemenata istog tipa. Veliqina vektora je broj elemenata u emu. Veliqina vektora se mora unapred zadati (odnosno fiksirana je), jer se unapred zna veliqina dode ene memorije. Na primer, vektor od 100 elemenata { imena, od kojih se svako zapisuje u 8 bajtova, zauzima u memoriji 800 bajtova. Ako je prvi elemenat na lokaciji x, a veliqina elementa je a bajtova, onda je k-ti elemenat vektora na lokaciji x + (k − 1)a, xto se lako izraqunava | nezavisno od rednog broja elementa. Ovo je efikasna i zbog toga qesto korixena struktura podataka. ena osnovna osobina je da je jednako vreme pristupa svim elementima. Na vixem programskom jeziku se o poziciji elementa i ne razmix a, jer taj deo posla obav a prevodilac (kompajler). Zak uqak je da vektor treba koristiti kad god je to mogue. Nedostaci ove strukture podataka su da su svi eni elementi istog tipa i da se ena veliqina ne moe meati dinamiqki, u toku izvrxavaa algoritma. Slog. Slog (rekord) je takoe niz elemenata, koji meutim ne moraju biti istog tipa | jedino se fiksira kombinacija tipova elemenata. Veliqina sloga takoe mora unapred biti definisana. Elementima sloga moe se kao i elementima vektora pristupiti za konstantno vreme: za ovu svrhu koristi se poseban vektor sa poqetnim adresama elemenata sloga, duine jednake broju elemenata sloga. Tako, na primer, ako je slog definisan (kao u paskalu) na slici 1, onda je adresa elementa Int6 jednaka 2·4+3·20·4+3·4+1 = 261. Adrese ovog i ostalih elemenata prevodilac izraqunava samo jednom, prilikom prolaska kroz definiciju sloga, i smexta ih u spomenuti pomoni vektor. Povezana lista. Qesto je potrebno da se broj elemenata dinamiqki mea. Kad se unapred ne zna broj elemenata vektora, mogue je rezervisati dovo no veliki vektor i tako rexiti problem | xto je qesto dobro rexee. Ipak, neefikasno je rezervisati memorijski prostor prema najgorem sluqaju. Pored toga, qesto je potrebno umetae elemenata ili brisae elemenata iz sredine liste | xto je neefikasno kod vektora. Zbog navedenih razloga koriste se tzv. dinamiqke strukture podataka. Najjednostavnija od ih je povezana
3.1. ELEMENTARNE STRUKTURE PODATAKA
33
primer = record Int1 : integer; Int2 : integer; Ar1 : array[1..20] of integer; Ar2 : array[1..20] of integer; Ar3 : array[1..20] of integer; Int3 : integer; Int4 : integer; Int5 : integer; Int6 : integer; Ime1 : array[1..12] of character; Ime2 : array[1..12] of character end
Ris. 1. Primer sloga.
lista. Ako je ci efikasno umetae i izbacivae elemenata, mora se napustiti sekvencijalni zapis koji karakterixe vektor | elementi se moraju zapisivati nezavisno, a meusobno se povezuju (nadovezuju) pomou pokazivaqa, promen ive koja sadri adresu nekog drugog elementa. Povezana lista je vektor parova (elemenat, pokazivaq), pri qemu pokazivaq sadri adresu narednog para. Par se predstav a pomou sloga. Prolazak kroz listu mogu je jedino linearno | redom od poqetka, elemenat po elemenat, pratei pokazivaqe. Nedostaci ove strukture podataka su u tome xto zahteva vixe prostora u memoriji (uz svaki elemenat ide i pokazivaq), a k-tom (k > 1) elementu moe se pristupiti samo preko svih prethodnih. Prednost povezane liste je u tome xto se upis i brisae lako realizuju, za razliku od vektora, kod koga ove operacije zahtevaju veliki broj pomeraa elemenata. Za umetae novog elementa izmeu neka dva elementa povezane liste dovo no je samo promeniti dva pokazivaqa. Na slici 2 prikazano je umetae novog, elementa 30a, izmeu 30. i 31. elementa povezane liste. Sliqno, za brisae elementa iz liste dovo no je promeniti jedan pokazivaq. Na slici 3 prikazano je brisae 31. elementa povezane liste. 1
2 -
30 - ` ` ` -
-
31 ?
-
30a
Ris. 2. Umetae novog elementa u povezanu listu.
34
3. STRUKTURE PODATAKA -
30
-
31
-
32
-
6
Ris. 3. Brisae elementa povezane liste.
Ovde su zbog jednostavnosti zanemareni neki vani deta i, koji uslonjavaju realizaciju povezane liste. Osnovni problem je kako otkriti kraj liste. U tu svrhu moe se koristiti prazan pokazivaq nil, (pokazivaq na nixta, odnosno vrednost pokazivaqa takva da ne moe da predstav a vaeu adresu), koja se dode uje pokazivaqu posledeg elementa u listi. Drugo mogue rexee je da se kraj liste oznaqi obiqnim slogom, qiji pak podatak nije obiqan, tzv. prazan slog.
3.2. Stabla
Vektori i povezane liste su jednodimenzionalne strukture podataka koje odraavaju samo redosled elemenata. Ponekad je meutim potrebno predstaviti i sloenije odnose izmeu elemenata. Stablo (drvo) je hijerarhijska struktura, ali se moe koristiti i za izvoee nekih operacija nad linearnim strukturama. Na ovom mestu baviemo se samo hijerarhijskim ili korenskim stablom. Korensko stablo qini skup qvorova i grana, koje povezuju qvorove na specijalan naqin (videti primer na slici 4). Jedan qvor je izdvojen, predstav a vrh hijerarhije i zove se koren stabla. Qvorovi vezani sa korenom qine nivo 1 hijerarhije; (novi) qvorovi vezani sa qvorovima nivoa 1 (sem korena) qine nivo 2 hijerarhije, itd. Svaka grana u stablu povezuje neki qvor sa egovim (jedinstvenim) prethodnikom (ocem ); jedino koren nema oca. Osnovna karakteristika stabla je da nema ciklusa (zatvorenih puteva), zbog qega izmeu svaka dva egova qvora postoji jedinstveni put. Qvor u stablu vezan je sa ocem i nekoliko sinova. Za qvor v koji se nalazi na putu od qvora u do korena kae se da je predak qvora u; u tom sluqaju je qvor u potomak qvora v. Maksimalni broj sinova qvora u grafu zove se stepen stabla. Obiqno je za sinove svakog qvora definisan redosled, tako da se sinovi mogu identifikovati svojim rednim brojem. Stablo stepena dva zove se binarno stablo. Qvor u binarnom stablu moe da ima najvixe dva sina, levog i desnog. Qvor bez dece zove se list, a qvor koji nije list zove se unutraxi qvor. Visina stabla je najvei nivo hijerarhije u emu, tj. maksimalno rastojae od korena do nekog qvora. Qvor ima k uq iz nekog potpuno ureenog skupa (npr. celi ili realni broj). Svaki qvor moe da ima po e za podatak | xto zavisi od primene. U nastavku e biti reqi o binarnom stablu pretrage i hipu, kao primerima struktura podataka zasnovanim na binarnom stablu. Pre toga razmotriemo mogue naqine predstav aa stabla. U zavisnosti od toga da li se koriste pokazivaqi ili ne, predstav ae stabla je eksplicitno, odnosno implicitno.
3.2. STABLA
35
1
f
2
3
f
4
f
5
f
6
f
7
f
9
8
f
f
10
f
f
f
f
f
f
14
15
16
17
f
f
f
11
12
13
Ris. 4. Primer korenskog stabla.
Pri eksplicitnom predstav au se qvor sa k sinova predstav a slogom qiji je deo vektor sa k pokazivaqa ka sinovima; ponekad je deo sloga i pokazivaq ka ocu. Pogodno je da svi qvorovi budu istog tipa | sa m pokazivaqa, gde je m najvei broj sinova nekog qvora, tj. stepen stabla. Stablo stepena veeg od dva moe se predstaviti korixeem samo dva pokazivaqa po qvoru: jednog ka prvom sinu, a drugog ka narednom bratu | videti primer na slici 5. e
e
e
e
e e e e
e
e e e e
e
e e
e e e
e
e e e e
e
e
e e e e
e e e e
Ris. 5. Prikazivae nebinarnog stabla sa po najvixe dva pokazivaqa po qvoru. Za implicitno predstav ae stabla ne koriste se pokazivaqi: svi qvorovi se smextaju u vektor, a veze izmeu qvorova odreene su ihovom pozicijom u vektoru. Ako je sa A oznaqen vektor u koji se smextaju qvorovi binarnog stabla, onda se koren smexta u A[1]; egov levi, odnosno desni sin zapisuju se u A[2], odnosno A[3], itd. (videti sliku 6). Dakle, u vektoru se qvorovi zapisuju onim redom kojim se prolaze s leva u desno, nivo po nivo; pri tome se oqigledno u vektoru mora rezervisati prostor i za odsutne qvorove. Indukcijom se moe pokazati da ako je qvor v zapisan u elementu A[i], onda su egov levi, odnosno desni sin zapisani u elementu A[2i], odnosno A[2i + 1]. Ovakav naqin predstav aa stabla je pogodan zbog svoje kompaktnosti. Ipak, ako je stablo neuravnoteeno (odnosno neki listovi su mnogo da e
36
3. STRUKTURE PODATAKA 1m 2m 4m 8
3m
5m
6m
7m
9 10 11 12 13 14 15
Ris. 6. Implicitno predstav ae binarnog stabla. Broj uz
qvor oznaqava egovu poziciju u vektoru. od korena nego drugi), mora se rezervisati i prostor za mnogo nepostojeih qvorova, pa se tada ovakvim predstav aem stabla neracionalno koristi memorijski prostor. Tako, na primer, za smextae stabla sa osam qvorova na slici 7 koristi se vektor duine qak 30. 1m 2m
3m 6m
7m
m 14
m 15 m 30
Ris. 7. Primer neuravnoteenog stabla, za koje je implicitno predstav ae neefikasno.
3.3. Hip
Hip je binarno stablo koje zadovo ava uslov hipa : k uq svakog qvora je vei ili jednak od k uqeva egovih sinova. Neposredna posledica definicije (zbog tranzitivnosti relacije ≤) je da je u hipu k uq svakog qvora vei ili jednak od k uqeva svih egovih potomaka. Hip je pogodan za realizaciju liste sa prioritetom, apstraktne strukture podataka za koju su definisane dve operacije: • umetni(x) { umetni k uq x u strukturu, i • ukloni() { ukloni (obrixi) najvei k uq iz strukture. Hip se moe realizovati sa implicitno ili eksplicitno zadatim stablom. Ovde e biti prikazana realizacija hipa na implicitno zadatom stablu, jer
3.3. HIP
37
se dve osnovne operacije mogu izvoditi na naqin koji obezbeuje da stablo uvek bude uravnoteeno. Dakle, smatraemo da su k uqevi qvorova hipa smexteni u vektoru A, pri qemu je k gora granica za broj elemenata hipa (ako se ta granica ne zna unapred, onda se za hip mora koristiti povezana lista). Ako je n tekui broj elemenata hipa, onda se za smextae elemenata hipa koriste lokacije u vektoru A sa indeksima od 1 do n. Uklaae sa hipa elementa sa najveim k uqem. K uq najveeg elementa je A[1], pa ga je lako pronai. Posle toga treba transformisati preostali sadraj vektora tako da predstav a ispravan hip. To se moe postii tako da se najpre A[n] prekopira u koren (A[1] := A[n]) i n smai za jedan. Oznaqimo sa x = A[1] novi k uq korena, a sa y = max{A[2], A[3]} vei od k uqeva sinova korena. Podstabla sa korenima u A[2] i A[3] su ispravni hipovi; ako je x ≥ y (odnosno x ≥ A[2] i x ≥ A[3]), onda je kompletno stablo ispravan hip. U protivnom (ako je x < y), posle zamene mesta k uqeva x i y u stablu (odnosno u vektoru A), podstablo sa nepromeenim korenom ostaje ispravan hip, a drugom podstablu je promeen (smaen!) k uq u korenu. Na to drugo podstablo primeuje se rekurzivno (indukcija) ista procedura koja je primeena na polazno stablo. Induktivna hipoteza je da ako je posle i koraka x na poziciji A[j], onda samo podstablo sa korenom A[j] eventualno ne zadovo ava uslov hipa. Da e se x uporeuje sa A[2j] i A[2j + 1] (ako postoje) i, ako nije vei ili jednak od oba ova k uqa, zameuje mesto sa veim od ih. Dakle, k uq x spuxta se nanie dotle dok ne dospe u list ili u koren nekog podstabla u kome je vei ili jednak od k uqeva oba sina. Na slici 8 prikazan je primer uklaaa najveeg elementa iz hipa. 8my 4m
6m
5my 4m
6m
®
6m 4m
5m
3m 1m 2m 5m 3m 1m 2m 3m 1m 2m
Ris. 8. Uklaae najveeg elementa sa hipa.
Umetae novog elementa u hip. Operacija se izvodi na sliqan naqin kao i prethodna. Najpre se n povea za jedan i na slobodnu poziciju A[n] upixe se novi k uq. Taj k uq uporeuje se sa k uqem oca A[i], gde je i = dn/2e, pa ako je vei od ega, zameuju im se mesta. Ova zamena moe samo da povea k uq A[i], pa e qvor sa k uqem A[i] biti koren ispravnog hipa. Moe pokazati da je taqna sledea induktivna hipoteza: ako je umetnuti k uq posle niza premextaa dospeo u elemenat A[j], onda stablo sa korenom A[j] jeste ispravan hip, a ako se to podstablo ukloni, ostatak stabla zadovo ava uslov hipa.
38
3. STRUKTURE PODATAKA
Proces se nastav a premextaem novog k uqa navixe, sve dok ne bude mai ili jednak od k uqa oca (ili dok ne doe do korena) | tada kompletno stablo zadovo ava uslov hipa; videti primer na slici 9. Maksimalni broj poreea je ograniqen visinom stabla blog nc. 2
¾
6m 4m
6m 5my
4m
9m
²
9m
4m
6m
°
3m 1m 2m 9m 3m 1m 2m 5m 3m 1m 2m 5m
Ris. 9. Umetae elementa u hip.
Broj uporeivaa prilikom izvrxea obe navedene operacije sa hipom je dakle ograniqen visinom stabla, odnosno sa O(log n), xto znaqi da se one efikasno izvrxavaju. Nedostatak hipa je u tome xto se ne moe efikasno izvesti traee zadatog k uqa. Na slikama 10 i 11 prikazani su na pseudo{ paskalu algoritmi za uklaae najveeg k uqa, odnosno umetae novog k uqa u hip. Primedba. U ovakvim ne sasvim formalnim specifikacijama algoritama na pseudo-paskalu qesto e biti korixen opis reqima; za blokove su ispuxteni begin i end | sem na poqetku i kraju algoritma. Deklaracije podataka se ne navode eksplicitno, jer to najqexe nije neophodno.
3.4. Binarno stablo pretrage
Svaki qvor binarnog stabla ima najvixe dva sina, pa se moe fiksirati neko preslikavae skupa egovih sinova u skup {levi, desni}. Ovo preslikavae moe se iskoristiti pri iscrtavau stabla u ravni: levi sin crta se levo, a desni sin desno od oca; svi qvorovi iste generacije (nivoa) crtaju se na istoj horizontalnoj pravoj, ispod prave na kojoj su qvorovi prethodne generacije. Levom, odnosno desnom sinu korena stabla odgovara levo, odnosno desno podstablo. U binarnom stablu pretrage (BSP) k uq svakog qvora vei je od k uqeva svih qvorova levog podstabla, a mai od k uqeva svih qvorova desnog podstabla. Pretpostav amo zbog jednostavnosti da su k uqevi svih qvorova razliqiti. BSP omoguuje efikasno izvrxavae sledee tri operacije: • Nadji(x) { nai elemenat sa k uqem x u strukturi, ili ustanovi da ga tamo nema (pretpostav a se da se svaki k uq u strukturi nalazi najvixe jednom); • Umetni(x) { umetni k uq x u strukturu, ako on ve nije u oj; u protivnom ova operacija nema efekta, i
3.4. BINARNO STABLO PRETRAGE
Algoritam Ulaz: (vektor veliqine za smextae hipa). Izlaz: (najvei elemenat hipa), (novi hip), (nova veliqina hipa; ako je
39
Skini max sa hipa(A, n);
A
n
V rh hipa
hip je prazan). begin if n = 0 then print "hip je prazan"
A
n
n=0
else
V rh hipa := A[1]; A[1] := A[n]; n := n − 1; Otac := 1; if n > 1 then Sin := 2; while Sin ≤ n do if Sin + 1 ≤ n and A[Sin] < A[Sin + 1] then Sin := Sin + 1; if A[Sin] > A[Otac] then zameni (A[Otac], A[Sin]); Otac := Sin; Sin := 2 · Sin; else
da bi se iskoqilo iz pet e}
Sin := n + 1 { end
Ris. 10. Algoritam za uklaae najveeg elementa iz hipa.
{ ako u strukturi podataka postoji elemenat sa k uqem x, ukloni ga. Struktura podataka sa ovim operacijama zove se reqnik. Za enu realizaciju moe se iskoristiti BSP. Zbog vanosti dinamiqkih ubacivaa i brisaa elemenata iz reqnika, i da se ne bi morala unapred zadavati gora granica za broj elemenata, smatraemo da je odgovarajue stablo predstav eno eksplicitno. Svaki qvor stabla je slog sa bar tri po a: k uq, levi i desni. Drugo, odnosno tree po e su pokazivaqi ka drugim qvorovima, ili nil (ako qvor nema levog, odnosno desnog sina). Nalaee k uqa. Ovo je operacija po kojoj je struktura podataka binarno stablo pretrage dobila ime. Potrebno je pronai u stablu elemenat sa zadatim k uqem x. Broj x uporeuje se sa k uqem r korena BSP. Ako je r = x onda je traee zavrxeno. Ako je pak x < r (odnosno x > r) onda se traee rekurzivno nastav a u levom (odnosno desnom) podstablu. Na slici 12 prikazan je pseudo kod za ovaj algoritam. Algoritam je po ideji sliqan sa metodom polov ea intervala za numeriqko rexavae jednaqine f (x) = c, • Ukloni(x)
40
3. STRUKTURE PODATAKA
Algoritam Ulaz: (vektor veliqine za smextae hipa), (broj). Izlaz: (novi hip), (nova veliqina hipa). Upis u hip(A, n, x);
A
n
A
x
n
begin
n := n + 1; { A[n] := x;
pretpostavka je da novo n nije vee od veliqine A}
Sin := n; Otac := n div 2; while Otac ≥ 1 do if A[Otac] < A[Sin] then zameni (A[Otac], A[Sin]); Sin := Otac; Otac := Otac div 2; else Otac := 0 { end
za iskakae iz pet e}
Ris. 11. Algoritam za upis novog elementa u hip.
kad je monotona neprekidna funkcija na intervalu [a, b], pri qemu je i . Vrednost f (d) u sredoj taqki d = (a + b)/2 uporeuje se sa , posle qega se traee nastav a u levoj ili desnoj polovini intervala , u zavisnosti od toga da li je f (d) < c ili f (d) > c. Ako je f (d) = c onda je rexee jednaqine naeno. Algoritam Ulaz: (pokazivaq na koren BSP), (broj). Izlaz: (pokazivaq na qvor koji sadri k uq , ili ako takvog qvora nema). f (x) f (a) < 0 f (b) > 0 c [a, b]
Nadji u BSP(Koren, x);
Koren
x
ˇ Cvor
x
nil
begin
ˇ if Koren = nil or Korenˆ.Kljuˇ c = x then Cvor := Koren {Korenˆ else
je slog qiju adresu sadri pokazivaq Koren}
if x < Korenˆ.Kljuˇ c then N adji u BSP (Korenˆ.Levi, x) else N adji u BSP (Korenˆ.Desni, x) end
Ris. 12. Nalaee broja u binarnom stablu pretrage.
Umetae je takoe jednostavna operacija. K uq x koji treba umetnuti najpre se potrai u BSP; ako se pronae, umetae je zavrxeno; pretpostav a je da se u reqniku ne quvaju ponov ene kopije istih elemenata. Ako se x ne
3.4. BINARNO STABLO PRETRAGE
41
pronae u BSP, onda se prilikom traea doxlo do lista, ili do qvora bez jednog sina, upravo sa one strane gde treba umetnuti novi qvor. Tada se x umee kao levi, odnosno desni sin tog qvora | ako je mai, odnosno vei od k uqa tog qvora (slika 13). Algoritam Ulaz: (pokazivaq na koren BSP), (broj). Izlaz: U BSP se umee qvor sa k uqem na koga pokazuje pokazivaq ; Umetni u BSP(Koren, x);
Koren
x
x
Sin
ako ve postoji qvor sa k uqem x, onda Sin = nil.
begin
if Koren = nil then
kreiraj novi qvor na koga pokazuje Sin; Koren := Sin;
Korenˆ.Kljuˇ c = x; Korenˆ.levi := nil; Korenˆ.Desni := nil; else
tekui qvor u stablu} postav a se na vrednost razliqitu od
ˇ Cvor := Koren; { Sin := Koren; {
nil}
ˇ while Cvor 6= nil and Sin 6= nil do
ˇ if Cvorˆ.Kljuˇ c = x then Sin := nil else {
silazak niz stablo za jedan nivo}
ˇ Otac := Cvor;
ˇ ˇ ˇ if x < Cvorˆ.Kljuˇ c then Cvor := Cvorˆ.Levi ˇ ˇ else Cvor := Cvorˆ.Desni;
novi qvor je sin qvora }Otac kreiraj novi qvor na koga pokazuje Sin;
if Sin 6= nil then { Sinˆ.Kljuˇ c := x;
Sinˆ.Levi = nil; Sinˆ.Desni = nil; if x < Otacˆ.Kljuˇ c then Otacˆ.Levi := Sin else Otacˆ.Desni := Sin end
Ris. 13. Umetae broja u binarno stablo pretrage.
Brisae qvora iz BSP kome je k uq jednak zadatom broju je nexto komplikovanija operacija od prethodnih (videti algoritam na slici 15). Najjednostavnije je obrisati list, slika 14(a). Na sliqan naqin lako je obrisati unutraxi qvor sa samo jednim sinom: taj qvor se uklaa, a podstablo sa korenom u egovom sinu se podie za jedan nivo tako da mu koren bude na mestu obrisanog qvora, slika 14(b). Ako treba ukloniti unutraxi qvor B sa oba sina, moe se najpre u levom podstablu qvora B pronai "najdesniji" qvor x, odnosno qvor sa najveim k uqem (slika 14(c); polazei od korena tog stabla prelazi se dokle god je to mogue iz qvora u egovog desnog sina; na kraju tog
42
3. STRUKTURE PODATAKA
puta dolazi se do qvora x). K uq qvora x kopira se u k uq B, a qvor x uklaa se na ve opisani naqin jer je on list ili qvor sa samo jednim sinom. Posle ove operacije BSP ostaje konzistentno: k uq x vei je od k uqeva svih qvorova u levom podstablu ispod svoje nove lokacije. Qvor x zove se prethodnik qvora B u stablu. Isti rezultat moe se postii pomou "najlevijeg" qvora u desnom podstablu qvora B, egovog sledbenika. b
b
b
b
b
b - b B bf
b
b
(a) f b
b b
b
bfx
b y b
b
b
b
b b
b
b b
b
b
b
b x
-
b b
b
b b
b
x b
b -
(b)
b B
b
b x b b
b
b
B b f
y b
b b
b
(c) Ris. 14. Brisae elementa binarnog stabla pretrage. Sloenost. Za sve tri razmatrane operacije vreme izvrxea zavisi od oblika stabla i poloaja qvora na kome se vrxi intervencija | u najgorem sluqaju se tragae zavrxava u listu stabla. Sve ostalo zahteva samo konstantan broj elementarnih operacija (na primer, stvarno upisivae k uqa ili zamena k uqeva pri brisau). Dakle, u najgorem sluqaju je sloenost proporcionalna visini stabla. Ako je stablo sa n qvorova u razumnoj meri uravnoteeno (ovaj pojam e u narednom ode ku biti preciznije definisan), onda je egova visina proporcionalna sa log n, pa se sve tri operacije efikasno izvrxavaju. Problem nastaje ako stablo nije uravnoteeno | na primer, stablo koje se dobija umetaem rastueg niza k uqeva ima visinu O(n)! Ako se stablo dobija umetaem n k uqeva u sluqajno izabranom poretku, onda je oqekivana visina stabla 2 ln n, pa su operacije traea i umetaa efikasne. Stabla sa dugaqkim putevima mogu da nastanu kao rezultat umetaa u ureenom ili skoro ureenom redosledu. Brisaa mogu da izazovu probleme qak i ako se izvode u sluqajnom redosledu: razlog tome je asimetrija do koje dolazi ako se uvek koristi prethodnik za zamenu obrisanog√ qvora. Posle qestih brisaa i umetaa, stablo moe da dostigne visinu O( n), qak i u kod b
b
2
3.4. BINARNO STABLO PRETRAGE
Algoritam Ulaz: (pokazivaq na koren BSP), (broj). Izlaz: Iz BSP se uklaa qvor sa k uqem , ako takav postoji. Ukloni iz BSP(Koren, x);
Koren
x
x
Pretpostavka je da se koren nikad ne brixe, i da su svi k uqevi razliqiti} begin {prva faza: traee qvora sa k uqem x} {
ˇ Cvor := Koren;
ˇ ˇ while Cvor 6= nil and Cvorˆ.Kljuˇ c 6= x do ˇ Otac := Cvor; ˇ ˇ ˇ if x < Cvorˆ.Kljuˇ c then Cvor := Cvorˆ.Levi ˇ ˇ else Cvor := Cvorˆ.Desni; ˇ if Cvor = nil then print(00 x
brisae naenog qvora
{
nije u BSP"); halt; , ili egovog prethodnika}
ˇ Cvor
ˇ if Cvor 6= Koren then
ˇ if Cvorˆ.Levi = nil then if x ≤ Otacˆ.Kljuˇ c then ˇ Otacˆ.Levi := Cvorˆ.Desni ˇ else Otacˆ.Desni := Cvorˆ.Desni ˇ else if Cvorˆ.Desni = nil then if x ≤ Otacˆ.Kljuˇ c then ˇ Otacˆ.Levi := Cvorˆ.Levi ˇ else Otacˆ.Desni := Cvorˆ.Levi else {
sluqaj sa dva sina}
ˇ ˇ Cvor1 := Cvorˆ.Levi; ˇ Otac1 := Cvor;
ˇ while Cvor1ˆ.Desni 6= nil do ˇ Otac1 := Cvor1; ˇ ˇ Cvor1 := Cvor1ˆ.Desni;
ˇ ˇ a sada brisae; Cvor1 je prethodnik qvora Cvor}
{
ˇ ˇ Cvorˆ.Kljuˇ c := Cvor1ˆ.Kljuˇ c ˇ if Otac1 = Cvor then {}
je levi sin qvora Otac1} ˇ ˇ Otac1ˆ.Desni := Cvor1ˆ.Levi; {Cvor1 je desni sin qvora Otac1}
ˇ ˇ Otac1ˆ.Levi := Cvor1ˆ.Levi; {Cvor1 else end
Ris. 15. Brisae zadatog broja iz binarnog stabla pretrage.
43
44
3. STRUKTURE PODATAKA
sluqajnih umetaa i brisaa. Asimetrija se moe smaiti ako se za zamenu obrisanog qvora naizmeniqno koriste prethodnik i sledbenik. Na sreu, postoji naqin da se izbegnu dugaqki putevi u BSP. Jedan takav metod bie razmotren u sledeem ode ku.
3.5. AVL stabla
AVL stabla (koja su ime dobila po autorima, Adel~son{Vel~ski, Landis, 1962.) su prva struktura koja garantuje da sloenost ni jedne od operacija traea, umetaa i brisaa u najgorem sluqaju nije vea od O(log n), gde je n je broj elemenata. Ideja je uloiti dopunski napor da se posle svake operacije stablo uravnotei, tako da visina stabla uvek bude O(log n). Pri tome se uravnoteenost stabla definixe tako da se moe lako odravati. Definicija 3.1. AVL stablo je binarno stablo pretrage kod koga je za svaki qvor apsolutna vrednost razlike visina levog i desnog podstabla maa ili jednaka od jedan. Kao xto pokazuje sledea teorema, visina AVL stabla je O(log n). Teorema 3.1. Za AVL stablo sa n unutraxih qvorova visina h zadovo ava uslov h < 1.4405 log (n + 2) − 0.327. Dokazatel~stvo. AVL stablo T visine h ≥ 2 sa najmaim moguim brojem qvorova moe se dobiti sledeom induktivnom konstrukcijom: egovo podstablo mae visine h − 2 takoe treba da bude AVL stablo sa minimalnim brojem qvorova, dakle T ; sliqno, egovo drugo podstablo treba da bude T . Stabla opisana ovakvom "diferencnom jednaqinom" zovu se Fibonaqijeva stabla. Nekoliko prvih Fibonaqijevih stabala, takvih da je u svakom unutraxem qvoru visina levog podstabla maa, prikazano je na slici 16. Oznaqimo sa n minimalni broj unutraxih qvorova AVL stabla visine h, tj. broj unutraxih qvorova stabla T ; n = 0, n = 1, n = 2, n = 4. Po definiciji Fibonaqijevih stabala je n = n +n + 1, odnosno n + 1 = (n + 1) + (n + 1), za h ≥ 2. Vidimo da brojevi n + 1 zadovo avaju istu diferencnu jednaqinu (2.5) kao i Fibonaqijevi brojevi F (F = F + F za h ≥ 2; F = F = 1). Uzimajui u obzir i prve qlanove niza, indukcijom je dokazano da je n + 1 = F . Prema tome, za broj n unutraxih qvorova AVL stabla visine h vai nejednakost 2
h
h−2
h−1
h
h
3
h
h
h
h−1
h+2
h+1
0
1
h−1
h−2
h
2
h−2
h
1
2
h
h+2
n ≥ Fh+2 − 1.
Polazei od izraza (2.9) za opxti qlan Fibonaqijevog niza, dobijamo µ µ ¶h+2 ¶ 1 1 1 h+2 − − − 1 > √ αh+2 − 2, n≥ √ α α 5 5
3.5. AVL STABLA
45
gde je sa α = (√5 + 1)/2 oznaqen pozitivan koren karakteristiqne jednaqine linearne diferencne jednaqine (2.5). Ova nejednakost ekvivalentna je sa µ ¶ h<
log2 5 1 log2 (n + 2) − 2 − , log2 α 2 log2 α
qime je teorema dokazana, jer je 1/ log α ' 1.44042 i log 5/(2 log α) ' 0.3277. 2
c
c
2
c c
c
T1
¤
c c
c c
T0
2
c c
T2
c
c
T3
c
Ris. 16. Fibonaqijeva stabla T , T , T i T . 0
1
2
3
Ostaje jox da vidimo kako se posle umetaa, odnosno brisaa elementa iz AVL stabla, moe intervenisati tako da rezultat i da e bude AVL stablo. Prilikom umetaa novog broja u AVL stablo postupa se najpre na naqin uobiqajen za binarno stablo pretrage: pronalazi se mesto qvoru, pa se u stablo dodaje novi list sa k uqem jednakim zadatom broju. Bez umaea opxtosti moe se pretpostaviti da je novi qvor umetnut u levo podstablo. Ako je visina levog podstabla maa ili jednaka od visine desnog podstabla, ili se egova visina ne mea posle umetaa, onda stablo i posle umetaa ostaje uravnoteeno | visina levog podstabla se umetaem novog lista ne moe poveati za vixe od jedan. U protivnom se, ako je visina levog podstabla vea, i posle umetaa se povea za jedan, dobija neuravnoteeno stablo. Prema tome da li je novi list dodat levom ili desnom podstablu levog podstabla, razlikujemo dva sluqaja, videti sliku 17. U prvom sluqaju se na stablo primeuje rotacija : koren levog podstabla B (videti sliku 18) podie se i postaje koren stabla, a ostatak stabla preureuje se tako da stablo i da e ostane stablo pretrage. Stablo T se "podie" za jedan nivo ostajui i da e levo podstablo qvora B; stablo T ostaje na istom nivou ali umesto desnog podstabla B postaje levo podstablo A; desno podstablo A spuxta se za jedan nivo. Isprekidana crtica na slici 18 pokazuje da rotacija rexava problem i ako su visine stabala T , T jednake, i ako je visina T za jedan vea od visine T . Drugi sluqaj je komplikovaniji; tada se stablo se moe uravnoteiti dvostrukom rotacijom, videti sliku 19. Zapaamo da u oba sluqaja visina stabla posle uravnoteavaa ostaje nepromeena. Qvor A na ovim slikama, tzv. kritiqan qvor, je dakle koren najmaeg podstabla koje sadri umetnuti qvor, a koje posle egovog umetanja postaje ne{AVL. Uravnoteavae podstabla kome je koren kritiqan qvor 1
2
1
2
1
2
46
3. STRUKTURE PODATAKA A
0 B
1
A
b
C
b
2
b
b
b
h h+1
T1
b
B
b
b
T3
T4
b
b
T2
b
T1
b
b
T3
T4
T2
novi list
h+2
C
b
novi list
Ris. 17. Umetaa koja remete AVL svojstvo stabla. B6
1
B
A ? b
0
b
2
b
b
b
h h+1
T1
b
C ?
-
b
b
T3
T4
b
C
b
b
b
b
T3
T4
T1
T2
novi list
novi list
h+2
A
b
T2
Ris. 18. Uravnoteavae AVL{stabla posle umetaa | rotacija. Db 66
b
3
b
h+2
-
b
T4 T1
T2
novi list
A
b
b
b
b
T2
T3
C
b
b
h h+1
b
B
Cb ?
Bb
1 2
D
Ab ?
0
T3
T1
novi list
T4
Ris. 19. Uravnoteavae AVL{stabla posle umetaa |
dvostruka rotacija. zbog toga ne utiqe na ostatak stabla. Prema tome, posle umetaa novog qvora mora se pronai kritiqan qvor i ustanoviti koji je od gore razmotrenih
3.6. HEX TABELE
47
sluqajeva u pitau. Uz svaki qvor stabla quva se egov faktor ravnotee, jednak razlici visina egovog levog i desnog podstabla; za AVL stablo su te razlike elementi skupa {−1, 0, 1}. Uravnoteavae postaje neophodno ako je faktor nekog qvora ±1, a novi qvor se umee na "pogrexnu" stranu. Prema tome, kritiqan qvor mora da ima faktor ravnotee razliqit od nule. Posle uravnoteavaa visine iznad kritiqnog qvora ostaju nepromeene. Kompletan postupak umetaa sa uravnoteavaem dakle izgleda ovako: idui nanie prilikom umetaa pamti se posledi qvor sa faktorom razliqitim od nule; kad se doe do mesta umetaa, ustanov ava se da li je umetae na "dobroj" ili "pogrexnoj" strani u odnosu na kritiqan qvor, a onda se jox jednom prolazi put unazad do kritiqnog qvora, poprav aju se faktori ravnotee i izvrxavaju eventualne rotacije. Brisae je komplikovanije, kao i kod obiqnog BSP. U opxtem sluqaju se uravnoteavae ne moe izvesti pomou samo jedne ili dve rotacije. Na primer, da bi se Fibonaqijevo stablo F sa n qvorova uravnoteilo posle brisaa "dobro" izabranog qvora, potrebno je izvrxiti h−2, odnosno O(log n) rotacija (videti sliku 20 za h = 4). U opxtem sluqaju je granica za potreban broj rotacija O(log n). Na sreu, svaka rotacija zahteva konstantni broj koraka, pa je sloenost uravnoteavaa AVL stabla posle brisaa ograniqena sa O(log n). Na ovom mestu preskoqiemo deta e. h
4b 1b ?
4b ? 7b
bi 2b 6 5b 3b
6 6b
9b 8b
b11
10b
2b 1b
7b 7b
3b
6
5b
9b 6b
6
8b
b11 1b
4b 2b
9b 5b
3b
8b 6b
b11 10b
10b
Ris. 20. Uravnoteavae Fibonaqijevog stabla T posle brisaa qvora, pomou dve rotacije. AVL stablo je efikasna struktura podataka. Qak i u najgorem sluqaju AVL stabla zahtevaju najvixe za 45% vixe uporeivaa od optimalnih stabala. Empirijska ispitivaa su pokazala da se proseqno traee sastoji od oko log n + 0.25 poreea. Osnovni nedostatak AVL stabala je potreba za dodatnim memorijskim prostorom za smextae faktora ravnotee, kao i qienica da su programi za rad sa AVL stablima dosta komplikovani. Postoje i druge varijante uravnoteenih stabala pretrage (2 − 3 stabla, B-stabla, crveno-crna stabla i sliqno). 4
2
3.6. Hex tabele
Hex tabele spadaju meu najkorisnije strukture podataka. Koriste se za umetae i traee, a u nekim varijantama i za brisae. Osnovna ideja je jednostavna. Ako treba smestiti podatke sa k uqevima iz opsega od 1 do n, a
48
3. STRUKTURE PODATAKA
na raspolagau je vektor duine n, onda se podatak sa k uqem i smexta na poziciju i, i = 1, 2, . . . , n. Ako su k uqevi podataka iz opsega od 1 do 2n, jox uvek je zgodno podatke smestiti na isti naqin u vektor duine 2n | time se postie najvea efikasnost, koja nadoknauje utroxak memorijskog prostora. Situacija se mea ako je opseg vrednosti k uqeva od 1 do M veliki (ako je, na primer, M najvei prirodni broj koji se moe smestiti na konkretnom raqunaru): tada otpada varijanta sa korixeem vektora duine M . Pretpostavimo da treba smestiti podatke o 250 studenata, pri qemu se svaki od ih identifikuje svojim matiqnim brojem sa 13 dekadnih cifara. Umesto kompletnog matiqnog broja kao indeks u vektoru mogu se koristiti samo egove tri poslede cifre: tada je za smextae podataka dovo an vektor duine 1000. Metod ipak nije potpuno pouzdan: mogue je da neka dva studenta imaju iste tri poslede cifre matiqnog broja; naqine rexavaa ovog problema razmotriemo kasnije. Mogu se iskoristiti i qetiri poslede cifre matiqnog broja, ili tri poslede cifre kombinovane sa prvim slovom imena studenta, da bi se jox vixe smaila mogunost ovakvog dogaaja. S druge strane, korixee vixe cifara zahteva tabelu vee dimenzije, sa relativno maim iskorixenim delom. Pretpostavimo da je dato n k uqeva iz skupa U veliqine | U |= M À n. Ideja je da k uqeve smestimo u tabelu veliqine m, tako da m nije mnogo vee od n. Potrebno je dakle definisati funkciju h : {0, 1, . . . , M − 1} → {0, 1, . . . , m − 1}, hex funkciju koja za svaki podatak odreuje egovu poziciju na osnovu vrednosti odgovarajueg k uqa. U gorem primeru, kao vrednost hex funkcije od k uqa jednakog matiqnom broju, uzete su egove tri poslede cifre. Ako se vrednosti ove funkcije lako izraqunavaju, bie lako pristupiti podatku. Meutim, ako je veliqina tabele m nedovo no velika, dexavae se da razliqitim k uqevima odgovaraju iste lokacije. Ovakav nepoe an dogaaj zove se kolizija. Potrebno je dakle rexiti dva problema: nalaee hex funkcija koje minimiziraju verovatnou pojave kolizija, i postupak za obradu kolizija kad do ih ipak doe. Iako je veliqina M skupa U mnogo vea od veliqine tabele m, stvarni skup k uqeva koje treba obraditi obiqno nije veliki. Dobra hex funkcija preslikava k uqeve ravnomerno po tabeli | da bi se minimizirala mogunost kolizija prouzrokovanih nagomilavaem k uqeva u nekim oblastima tabele. U proseku se u svaku lokaciju tabele ovako izabranom hex funkcijom preslikava se veliki broj (iz skupa svih moguih) k uqeva, ih M/m. Hex funkcija treba da transformixe skup k uqeva ravnomerno u skup sluqajnih lokacija iz skupa {0, 1, . . . , m − 1}. Uniformnost i sluqajnost su bitne osobine hex funkcije. Tako, na primer, pogrexno je za hex funkciju od 13-cifrenog matiqnog broja uzeti broj koji qine peta, xesta i sedma cifra matiqnog broja: te tri cifre su tri najnie cifre godine roea, pa za bilo koju veliqinu grupe studenata uzimaju mae od desetak razliqitih vrednosti od 1000 moguih.
3.6. HEX TABELE
49
Hex funkcije. Ako je veliqina tabele m prost broj, a k uqevi su celi brojevi, onda je jednostavna i dobra hex funkcija data izrazom h(x) = x mod m.
Ako pak m nije prost broj (na primer m = 2 ), onda se moe koristiti funkcija h(x) = (x mod p) mod m, gde je p prost broj takav da je m ¿ p ¿ M . Neugodna je situacija kad su svi k uqevi oblika r + kp, za neki celi broj r, jer e svi k uqevi imati istu vrednost hex funkcije r. Tada ima smisla uvesti jox jedan nivo randomizacije ("razbacivaa"), time xto bi se sama hex funkcija birala na sluqajan naqin. Na primer, broj p mogao bi se birati sa unapred priprem ene liste prostih brojeva. Druga mogunost je da se koriste hex funkcije oblika h(x) = (ax + b mod p) mod m, gde su a 6= 0 i b sluqajno izabrani brojevi mai od p. Vrednosti ove funkcije se izraqunavaju na sloeniji naqin, ali je ena prednost da je u proseku dobra za sve ulaze. Razume se da se za sve pristupe istoj tabeli mora koristiti ista hex funkcija. U mnogo sluqajeva potrebno je vixe nezavisnih hex tabela, ili se tabele qesto kreiraju i brixu. Tada se za svaku novu tabelu moe koristiti druga hex funkcija. Obrada kolizija. Najjednostaviji naqin za obradu kolizija je tzv. odvojeno nizae svaki elemenat hex tabele je pokazivaq na povezanu listu, koja sadri sve k uqeva smextene na tu lokaciju u tabeli. Pri traeu zadatog k uqa najpre se izraqunava vrednost hex funkcije, a zatim se adresirana povezana lista linearno pretrauje. Na prvi pogled upisivae se pojednostav uje umetaem k uqa na poqetak liste. Meutim, lista se ipak mora pregledati do kraja da bi se izbeglo upisivae duplikata (elemenata sa k uqem jednakim nekom ve upisanom). Ovakav postupak je neefikasan ako su povezane liste dugaqke, do qega dolazi ako je tabela mala u odnosu na broj k uqeva, ili je izabrana loxa hex funkcija. Pored toga, potexkoe stvara i dinamiqka alokacija memorije, a potrebno je rezervisati i prostor za pokazivaqe. S druge strane, odvojeno nizae radi bez grexaka i ako je izabrana pogrexna veliqina tabele, za razliku od ostalih (priblinih) metoda. Drugo jednostavno rexee je linearno popuavae ako je lokacija sa adresom h(x) ve zauzeta, onda se novi elemenat sa k uqem x zapisuje na susednu lokaciju h(x)+1 mod m (lokacija koja sledi iza m−1 je 0). Prilikom traenja zadatog k uqa x neophodno je linearno pretraivae poqevxi od lokacije h(x) do prve nepopuene lokacije. Ovo rexee je efikasno ako je tabela relativno retko popuena. U protivnom dolazie do mnogo sekundarnih kolizija, odnosno kolizija prouzrokovanih k uqevima sa razliqitim vrednostima hex funkcije. Na primer, neka je lokacija i zauzeta, a lokacija i+1 slobodna. Novi k uq koji se preslikava u i prouzrokuje koliziju, i smexta se na lokaciju i+1. Do ovog trenutka problemi su rexeni efikasno, uz minimalni napor. Medjutim, ako se novi k uq preslika u i + 1, imamo sluqaj sekundarne kolizije, a lokacija i + 2 mod m postaje zauzeta (ako ve nije bila). Svaki novi k uq k
50
3. STRUKTURE PODATAKA
preslikan u i, i + 1 ili i + 2 mod m, ne samo da izaziva novu sekundarnu koliziju, nego i poveava veliqinu ovog popuenog odseqka, xto kasnije izaziva jox vixe sekundarnih kolizija. Ovo je tzv. efekat grupisaa. Kad je tabela skoro puna, broj sekundarnih kolizija pri linearnom popuavau je vrlo veliki, pa se pretraga degradira u linearnu. Pri linearnom popuavau se brisaa ne mogu izvesti korektno. Ako pri upisivau k uqa y prilikom traea praznog mesta preskoqi neka lokacija i = h(x), pa zatim k uq x bude izbrisan, onda se posle toga k uq y vixe ne moe pronai u tabeli: traee se zavrxava na praznoj lokaciji i. Dakle, ako su potrebna i brisaa, mora se koristiti neki od metoda za obradu kolizija koji koristi pokazivaqe. Efekat grupisae moe se ublaiti dvostrukim hexiraem. Kad doe do kolizije pri upisu x, h(x) = i, izraqunava se vrednost druge hex funkcije h (x), pa se x smexta na prvu slobodnu meu lokacijama i + h (x) mod m, i + 2h (x) mod m . . ., umesto i + 1 mod m, i + 2 mod m . . .. Ako se drugi k uq y preslikava u npr. i + h (x) mod m, onda se pokuxava se lokacijom i + h (x) + h (y) mod m umesto sa i + h (x) + h (x) mod m. Ako je vrednost h (y) nezavisna od h (x) onda je grupisae praktiqno eliminisano. Prilikom izbora druge hex funkcije mora se voditi raquna o tome da ostaci i + jh (x) mod m za j = 0, 1, . . . , m − 1 pokrivaju kompletnu tabelu, odnosno da vrednosti h (x) budu uzajamno proste sa m. 2
2
2
2
2
2
2
2
2
2
2
2
3.7. Problem formiraa unija
Problem formiraa unijea moe da poslui kao primer kako dobro izabrana struktura podataka moe da pobo xa efikasnost algoritma. Neka je dato n elemenata x , x , . . . , x , koji su pode eni u disjunktne podskupove. Na poqetku su podskupovi jednoqlani. Nad elementima i podskupovima mogu se proizvo nim redosledom izvrxavati sledee dve operacije: • podskup(i): daje ime podskupa koja sadri x ; • unija(A, B): formira uniju podskupova A i B , podskup sa jedinstvenim imenom. Ci je nai strukturu podataka koja omoguuje xto efikasnije izvrxavae obe ove operacije. Prvi kandidat za e enu strukturu podataka je vektor. Poxto su svi elementi poznati, mogu se smestiti u vektor X duine n. Najjednostavnije rexee postav enog problema je smestiti u X[i] ime podskupa koja sadri elemenat x . Nalaee podskupa kome pripada x je trivijalno. Meutim, formirae unije dva podskupa je sloenije. Pretpostavimo da je unija(A, B) novi podskup sa imenom A. Tada svim elementima vektora X iz podskupa B treba promeniti ime u A. Mogu je i drugi pristup ovom problemu, zasnovan na indirektnom adresirau, pri qemu je nalaee unije jednostavno. Svaki elemenat vektora X 1
2
n
i
i
i
3.7. PROBLEM FORMIRA A UNIJA
51
je dvoqlani slog. Prvi elemenat sloga je ime podskupa kome elemenat pripada, a drugi | pokazivaq ka nekom drugom slogu. U svakom podskupu treba da postoji taqno jedan elemenat, qiji slog sadri prazan pokazivaq nil; ime tog elementa je po definiciji ime podskupa; za pokazivaq tog elementa kaemo da je pokazivaq podskupa. Ako je pokazivaq elementa X[i] usmeren ka elementu X[j], onda je ime podskupa koji sadri X[i] jednako imenu podskupa koji sadri X[j]. Prethodni uslov obezbeuje da ova definicija bude ispravna: nemogue je da se podskup sastoji od elemenata sa indeksima i , i , ..., i , i da pored toga pokazivaq X[i ] bude usmeren ka X[i ], j = 1, 2, . . . , k − 1, a da je pokazivaq X[i ] usmeren ka X[i ] | tada ni jedan elemenat podskupa ne bi imao pokazivaq nil. Na poqetku su svi pokazivaqi nil, tj. vektor X zadaje n jednoqlanih podskupova. Operacija unija(A, B) izvodi se tako xto se pokazivaq podskupa A usmeri ka elementu, qiji je pokazivaq istovremeno i pokazivaq podskupa B (ili obrnuto). Posle nekoliko formiraa unija, vektor X zadaje nekoliko stabala, videti sliku 21. Svako stablo odgovara podskupu, a svaki qvor elementu. Elemenat u korenu stabla slui kao ime podskupa. Da bi se pronaxlo ime podskupa kome pripada elemenat G, treba pratiti lanac pokazivaqa do korena stabla, sloga sa pokazivaqem nil. Ovo podsea na situaciju kad neko promeni adresu: umesto da svima jav a da je promenio adresu, on na staroj adresi ostav a svoju novu adresu (sa molbom da mu dostav aju prispelu poxtu) | xto je jednostavnije. Naravno, nalaee prave adrese je sada nexto sloenije, odnosno operacija nalaea podskupa kome elemenat pripada je mae efikasna (naroqito ako su izduena stabla koja predstav aju podskupove). 1
j
2
k
j+1
k
1
A nil
B nil
6
E nil
6
C
F
66 G
D
Ris. 21. Struktura podataka za formirae unija podskupova. Ideja na kojoj se zasniva efikasna struktura za nalaee unija je da se stabla uravnotee, odnosno skrate. Unija podskupova A i B na slici 21 moe se formirati usmeravaem pokazivaqa A ka B, ili usmeravaem pokazivaqa B ka A. Oqigledno je da se u drugom sluqaju dobija uravnoteenije stablo. Zak uqak se lako uopxtava: pokazivaq korena stabla sa mae elemenata (odnosno proizvo nog od dva stabla ako im je broj elemenata jednak) treba usmeriti ka korenu stabla sa veim brojem elemenata. Jasno je da pri formirau svake nove unije usput treba izraqunavati i broj elemenata novog podskupa. Taj podatak se smexta kao deo sloga u korenu stabla. Primenom ovog pravila se pri
52
3. STRUKTURE PODATAKA
formirau unija postie da je visina stabla sa m elemenata uvek maa ili jednaka od log m, xto pokazuje sledea teorema. Teorema 3.2. Ako se pri formirau unija koristi uravnoteavae, svako stablo visine h sadri bar 2 elemenata. Dokazatel~stvo. Dokaz se izvodi indukcijom po broju formiraa unija. Tvree je oqigledno taqno za prvu uniju: dobija se stablo visine jedan sa dva elementa. Posmatrajmo uniju podskupova A i B. Neka su visine odgovarajuih stabala h(A), h(B), i neka je broj elemenata u A vei ili jednak od broja elemenata u B. Visina kombinovanog stabla jednaka je veem od brojeva h(A) i h(B) + 1. Ako je vei h(A), onda novo stablo ima visinu kao A, i vixe elemenata nego stablo A, pa je tvree teoreme taqno. U protivnom, novo stablo ima bar dva puta vixe elemenata od stabla B (jer A ima bar toliko elemenata koliko B), a visina mu je za jedan vea od visine B, pa je tvree teoreme takoe taqno. ¤ Posledica ove teoreme je da se pri traeu podskupa kome pripada elemenat nikad ne prolazi vixe od log n pokazivaqa. Unija podskupova se formira za konstantno vreme. Prema tome, za izvrxee niza od m ≥ n operacija prve ili druge vrste, broj koraka je najvixe O(m log n). Efikasnost ove strukture podataka moe se da e pobo xati. Posmatrajmo jox jednom analogiju sa preusmeravaem poxi ki. U sluqaju vixestruke promene adrese, poxi ka e ii od jedne do druge adrese, dok ne dospe na konaqno odredixte. Razumna ideja je da se po isporuci poxi ke unazad, na sve usputne adrese, dostavi posleda adresa. Dakle, kad se pri odreivau podskupa nekog elementa pree put do korena stabla, taj put se jos jednom prolazi u obratnom smeru, a pokazivaqi svih usputnih qvorova preusmeravaju se ka korenu. Sloenost traea time je poveana najvixe za konstantni faktor (tj. asimptotska sloenost traea se ne mea), a postie se skraivae puteva pri kasnijim traeima podskupa za sve usputne qvorove. Moe se pokazati da se na ovaj naqin sloenost niza od m ≥ n operacija jedne ili druge vrste smauje na O(m log n), gde se tzv. iterirani logaritam log n definixe pomou log 1 = log 2 = 1 i log n = 1 + log ¡dlog ne¢ za n > 2. Poxto za n≤2 vai log n ≤ 5, vidimo da je sloenost proizvo nog niza ovih operacija praktiqno linearna. Meutim, nije poznato da li postoji algoritam linearne sloenosti za rexavae ovog problema. 2
h
2
∗
∗
65536
∗
∗
∗
∗
3.8. Grafovi
∗
2
Algoritmi za rad sa grafovima predmet su poglav a 6. Na ovom mestu bie prikazane samo strukture podataka pogodne za predstav ae grafova. Graf G = (V, E) sastoji se od skupa V qvorova i skupa E grana. Grana odgovara paru qvorova. Drugim reqima, grane predstav aju relaciju izmeu qvorova. Na primer, graf moe da predstav a skup udi, a da grana povezuje dva qoveka ako se oni poznaju. Graf je usmeren odnosno neusmeren ako su mu grane ureeni,
3.9. REZIME
53
odnosno neureeni parovi. Ako se usmereni graf predstav a crteom, granama se dodaju strelice koje vode ka drugom qvoru iz ureenog para. Jednostavan primer grafa je stablo. Ako na stablu treba definisati hijerarhiju, onda se sve grane mogu orijentisati "od korena" (pri qemu je koren posebno izdvojen qvor stabla). Takva stabla su korenska stabla. Mogu se takoe razmatrati neusmerena stabla za koja se ne vezuje bilo kakva hijerarhija. Uobiqajena su dva naqina predstav aa grafova. Prvi je matrica povezanosti grafa. Neka je |V | = n i V = {v , v , . . . , v }. Matrica povezanosti grafa G kvadratna matrica A = (a ) reda n, sa elementima a = 1 akko (v , v ) ∈ E ; ostali elementi matrice A su nule. Ako je graf neusmeren, matrica A je simetriqna. Vrsta i ove matrice je dakle vektor duine n qija je j-ta koordinata jednaka 1 ako iz qvora v vodi grana u qvor v , odnosno 0 u protivnom. Nedostatak matrice povezanosti je to xto ona uvek zauzima prostor veliqine n , nezavisno od toga koliko grana ima graf. Svakom qvoru grafa pridruuje se vektor duine n. Ako je broj grana u grafu mali, veina elemenata matrice povezanosti bie nule. Umesto da se i sve nepostojee grane eksplicitno predstav aju u matrici povezanosti, mogu se formirati povezane liste od jedinica iz i-te vrste, i = 1, 2, . . . , n. Ovaj drugi naqin predstav aa grafa zove se lista povezanosti. Svakom qvoru pridruuje se povezana lista, koja sadri sve grane susedne qvoru (odnosno grane ka susednim qvorovima). Lista moe biti ureena prema rednim brojevima qvorova na krajevima enih grana. Graf je predstav en vektorom lista. Svaki elemenat vektora sadri ime (indeks) qvora i pokazivaq na egovu listu qvorova. Ako je graf statiqki, odnosno nisu dozvo ena umetaa i brisaa, onda se liste mogu predstaviti vektorima na sledei naqin. Koristi se vektor duine |V | + |E|. Prvih |V | qlanova vektora su pridrueni qvorovima. Komponenta vektora pridruena qvoru v sadri indeks poqetka spiska qvorova susednih qvoru v , i = 1, 2, . . . , n. Na slici 22 prikazana su na jednom primeru oba naqina predstav aa grafa. Sa matricama povezanosti je jednostavnije raditi. S druge strane, liste povezanosti su efikasnije za grafove sa malim brojem grana. U praksi se qesto radi sa grafovima koji imaju znatno mae grana od maksimalnog mogueg broja (n(n − 1)/2 neusmerenih, odnosno n(n − 1) usmerenih grana), i tada je obiqno bo e koristiti liste povezanosti. 1
2
n
ij
i
ij
j
i
j
2
i
i
3.9. Rezime
Strukture podataka mogu se podeliti na statiqke i dinamiqke. Vektori (nizovi) su statiqke strukture. Veliqina niza (ili bar taqna gora granica za u) mora se unapred znati. S druge strane, rad sa nizom je vrlo efikasan. Povezane liste su dinamiqke. One se mogu poveavati i smaivati, i nema ograniqea na ihovu veliqinu, pod uslovom da ima dovo no memorijskog prostora).
54
3. STRUKTURE PODATAKA 1
2
3
4
5
1b¾
1
0
0
0
1
0
I
2
1
0
0
0
0
3
1
1
0
1
1
4
0
0
0
0
1
? bª
5
0
1
0
0
0
4
(a)
7
8 12 13 4
1
2
3
5
µ6 3b
6
4
2b
6
R -b 5
1
1
2
(b)
8
9 10 11 12 13
7
4
5
5
2
Ris. 22. Predstav ae grafa matricom povezanosti (a),
odnosno listom povezanosti (b). Strukture podataka mogu se podeliti na jednodimenzionalne i vixedimenzionalne strukture. Nizovi i povezane liste su jednodimenzionalni. Jedina struktura koju oni mogu da predstav aju je redosled elemenata. Stabla predstav aju nexto vixe od jednodimenzionalne strukture | hijerarhiju. Moe se raditi i sa vixedimenzionalnim nizovima, odnosno povezanim listama. Pojam apstraktnog tipa podataka je vrlo koristan. On omoguuje da se paa koncentrixe na operacije nad elementima strukture, nezavisno od konkretnog tipa podataka. Opisane su realizacije reqnika, liste sa prioritetom i strukture za formirae unija podskupova. Hex tabele su dobro rexee za smextae podataka bez ikakve posebne strukture. Hex tabele se ne mogu koristiti ako pristup elementu ne zavisi samo od k uqa elementa. Na primer, da bi se naxao minimalni elemenat u hex tabeli, mora se pregledati cela tabela.
Zadaci
3.1. Transformisati jednostavnu rekurzivnu proceduru pretrage binarnog stabla pretrage u nerekurzivnu proceduru. 3.2. Formirati neopadajui niz od k uqeva elemenata binarnog stabla pretrage. Kolika je sloenost konstruisanog algoritma? 3.3. Elementi skupa A (svi su razliqiti) smexteni su u binarno stablo pretrage. Konstruisati algoritam koji za dati elemenat a ∈ A odreuje sledei po veliqini elemenat skupa A. 3.4. Neka je A vektor koji slui za implicitno predstav ae hipa. Koliki najmai broj elemenata hipa moe da zauzme niz duine 16? 3.5. Pretpostavimo da se AVL stablo koristi za realizaciju liste sa prioritetom. Kolika je sloenost osnovnih operacija? 3.6. Opisati realizaciju apstraktnog tipa podataka koji podrava sledee operacije:
ZADACI
55
: umetae se izvrxava i ako je broj x ve jednom prethodno umetnut u strukturu podataka; drugim reqima, struktura podataka treba da pamti duplikate; ukloni(y): ukloni proizvo an elemenat iz strukture podataka i dodeli ga promen ivoj y . Ako postoji vixe kopija istog elementa, uklaa se samo jedna od ih. Ovaj apstraktni tip podataka moe se nazvati bazen. On se moe iskoristiti za smextae poslova. Novi poslovi se generixu i umeu u bazen, a kad neki radnik postane raspoloiv, uklaa se neki posao. Sve operacije treba da se izvrxavaju za vreme O(1). 3.7. Modifikovati bazen, tip podataka iz zadatka 3.6, na sledei naqin: pretpostav a se da se proizvo an elemenat moe pojaviti najvixe jednom u strukturi podataka. Umetanje mora da bude praeno proverom postojaa duplikata. Realizovati iste operacije kao u prethodnom sluqaju, ali sa proverom postojaa duplikata. Kolika je sloenost svake operacije u najgorem sluqaju? 3.8. Druga varijanta tipa podataka bazen (videti zadatke 3.6, 3.7) je sledea. Pretpostavimo da su svim elementima pridrueni brojevi iz opsega od 1 do n, pri qemu n nije veliko, pa je na raspolagau memorija veliqine O(n). Svaki elemenat moe se pojaviti najvixe jednom. Konstruisati algoritme za umetae i uklaae (kao xto je definisano u zadatku 3.6), vremenske sloenosti O(1). 3.9. Konstruisati algoritam za formirae hipa koji sadri sve elemente dva hipa veliqine n i m. Hipovi su predstav eni eksplicitno (svaki qvor ima pokazivaqe na dva svoja sina). Vremenska sloenost algoritma u najgorem sluqaju treba da bude O(log(m + n)). 3.10. Opisati realizaciju apstraktnog tipa podataka koji podrava sledee operacije: Umetni(x): umetni k uq x u strukturu podataka, ako ga tamo ve nema; Obriˇ si(x): obrixi k uq x iz strukture podataka (ako ga ima); Naredni(x): pronai najmai k uq u strukturi podataka koji je vei od x. Izvrxavae svake od ovih operacija treba da ima vremensku sloenost O(log n) u najgorem sluqaju, gde je n broj elemenata u strukturi podataka. 3.11. Opisati realizaciju apstraktnog tipa podataka koji podrava sledee operacije: Umetni(x): umetni k uq x u strukturu podataka, ako ga tamo ve nema; Obriˇ si(x): obrixi k uq x iz strukture podataka (ako ga ima); Naredni(x, k): pronai u strukturi podataka k-ti najmai k uq, meu onima koji su vei od x. Izvrxavae svake od ovih operacija treba da ima vremensku sloenost O(log n) u najgorem sluqaju, gde je n broj elemenata u strukturi podataka. 3.12. Konkatenacija je operacija nad dva skupa koji zadovo avaju uslov da su svi k uqevi u jednom skupu mai od svih k uqeva u drugom skupu; rezultat konkatenacije je unija skupova. Konstruisati algoritam za konkatenaciju dva binarna stabla pretrage u jedno. Vremenska sloenost u najgorem sluqaju treba da bude O(h), gde je h vea od visina dva stabla. 3.13. Konstruisati algoritam za konkatenaciju (definisanu u zadatku 3.12) dva AVL stabla u jedno. Sloenost algoritma u najgorem sluqaju treba da bude O(h), gde je h vea od visina dva AVL stabla. 3.14. (a) Kako se moe generisati sluqajno AVL stablo, kod koga faktor ravnotee u svakom unutraxem qvoru ima vrednost iz skupa {−1, 0, 1} sa ravnomernom raspodelom verovatnoa? (b) Za sluqajno AVL stablo zadate visine h (sa raspodelom verovatnoa definisanom konstrukcijom pod (a)) pokazati da je oqekivana duina puta od kritiqnog qvora do qvora umetaa (novog qvora sa sluqajno izabranim k uqem) konstantna, i da ne zavisi od h. umetni(x)
56
3. STRUKTURE PODATAKA
3.15. Sa ulaza se zadaje niz prirodnih brojeva qiji se kraj oznaqava nulom. Konstruisati algoritam koji brojeve datog niza smexta u binarno stablo, pri qemu za svaki qvor stabla u svakom koraku algoritma razlika broja qvorova u levom i desnom podstablu ne sme da premaxi jedan. 3.16. Odrediti izgled AVL stabla dobijenog umetaem redom brojeva 1, 2, . . . , n, polazei od praznog stabla. Kolika je visina tog stabla? 3.17. Neka su T i T dva proizvo na binarna stabla sa po n qvorova. Dokazati da postoji niz od najvixe 2n rotacija koje T transformixu u T . 3.18. Unija dva neusmerena grafa G = (V, E) i H = (U, F ) je novi graf J = (W, D), takav da je W = V ∪ U i D = E ∪ F ∪ (V × U ), tj. J pored grana G i H , sadri i sve grane koje povezuju neki qvor iz V sa nekim qvorom iz U . Predloite pogodnu reprezentaciju grafova koja omoguuje efikasno izraqunavae unija grafova. 3.19. Neka je S = {s , s , . . . , s } vrlo veliki skup, izde en u k disjunktnih blokova. Pretpostavimo da nam je na raspolagau procedura Koji blok koja za zadati elemenat s daje Koji blok(s ), redni broj bloka koji sadri s ; ova procedura radi za konstantno vreme. Ci je omoguiti rad sa malim podskupovima T skupa S, i to sledee operacije nad T : Umetni(s ), Obriˇsi(s ), Obriˇsi blok(j) (brisae svih elemenata T koji pripadaju bloku j). Na poqetku je T prazan skup. Sloenost svake operacije treba da bude O(log n) u najgorem sluqaju, gde je n tekui broj elemenata u T . Obriˇsi blok samo uklaa elemente iz strukture podataka | nije neophodno fiziqko brisae svakog od tih elemenata. Oba broja m i k mogu biti vrlo veliki, pa se ne moe koristiti tabela veliqine m ili k. Meutim, n je relativno malo, i na raspolagau je prostor O(n). 3.20. Neka je A[1], A[2], ... A[n] niz realnih brojeva. Posmatrajmo sledee dve operacije: Dodaj(i,Py): dodati vrednost y i-tom broju, i Parcijalna suma(i): izraqunati sumu prvih i brojeva, A[j]. Broj elemenata ostaje fiksiran | nema umetaa ili brisaa; jedino se meaju neke vrednosti brojeva. Konstruisati algoritam za izvrxavae niza ovih dveju operacija, tako da se obe izvrxavaju za O(log n) koraka. Moe se koristiti pomoni niz duine n. 3.21. Konstruisati strukturu podataka za quvae skupa elemenata od kojih svaki ima k uq i vrednost. Struktura podataka treba da podrava sledee operacije: Odredi Vrednost(x): odrediti vrednost pridruenu elementu sa k uqem x (nula, ako x nije u skupu); Umetni(x, y): umetni novi elemenat sa k uqem x i vrednoxu y ; Obriˇ si(x): obrixi elemenat sa k uqem x; Dodaj(x, y): dodaj y tekuem elementu sa k uqem x; Dodaj svima(y): dodaj y svim elementima skupa. Vreme izvrxavaa svake od ovih operacija u najgorem sluqaju treba da bude O(log n). 1
2
1
1
2
2
m
i
i
i
i
i
∗
i j=1
Glava 4
Konstrukcija algoritama indukcijom 4.1. Uvod
U ovom poglav u bie navedeni jednostavni primeri konstrukcije algoritama korixeem induktivnog pristupa, koji ilustruju osnovne principe i tehnike. Ideja je da se iskoristi princip domina: sve nanizane domine e popadati ako se poruxi prva, i ako se posle ruxea n-te obavezno ruxi (n+1)a domina. Dakle, da bi se rexio neki problem, treba rexiti neki egov mali sluqaj, a zatim pokazati kako se rexee zadatog problema moe konstruisati polazei od (rexenih) maih verzija istog problema. Imajui na umu ovo, paa se moe skoncentrisati na nalaee naqina za svoee problema na mae probleme.
4.2. Izraqunavae vrednosti polinoma
Najpre emo razmotriti jedan jednostavan problem: izraqunavae vrednosti zadatog polinoma u zadatoj taqki. Problem. Dati su realni brojevi a , a ,..., a , a i realni broj x. Izraqunati vrednost polinoma P (x) = P a x . Ulazni podaci za problem su n + 2 broja. Induktivni pristup rexavau problema sastoji se u svoeu rexea na rexee maeg problema. Dakle, problem pokuxavamo da svedemo na mai, koji se zatim rexava rekurzivno. Najjednostavnije je svoee na uproxeni problem dobijen od polaznog uklaaem a . Tada imamo problem izraqunavaa vrednosti polinoma n n−1 n i i=0 i
n
1
0
n
Pn−1 (x) = an−1 xn−1 + an−2 xn−2 + · · · + a1 x + a0 .
To je isti problem, ali sa jednim parametrom mae. Induktivna hipoteza. Pretpostavimo da znamo da izraqunamo vrednost polinoma zadatog koeficijentima a ,..., a , a u taqki x, tj. znamo da izraqunamo vrednost P (x). Ova hipoteza je osnova za rexavae problema indukcijom. Sluqaj n = 0 (izraqunavae vrednosti izraza a ) je trivijalan. Zatim se mora pokazati kako se polazni problem (izraqunavae P (x)) moe rexiti korixeem rexea maeg problema (vrednosti P (x)). U ovom sluqaju je to oqigledno: treba izraqunati x , pomnoiti ga sa a i rezultat sabrati sa P (x): n−1
1
0
n−1
0
n
n
n−1
57
n
n−1
58
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
Moe se pomisliti da je korixee indukcije ovde nepotrebno: ono samo komplikuje vrlo jednostavno rexee. Opisani algoritam 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: stepen x izraqunava se svaki put "od poqetka". Veliki broj mnoea moe se uxtedeti ako se pri izraqunavau x iskoristi x . Pobo xae se realizuje uk uqivaem izraqunavaa x u induktivnu hipotezu. Pojaqana induktivna hipoteza. Znamo da izraqunamo vrednost polinoma P (x) i vrednost x . Ova induktivna hipoteza je jaqa, jer zahteva izraqunavae x , ali se lakxe proxiruje (jer je sada jednostavnije izraqunati x ). Da bi se izraqunalo x , dovo no je izvrxiti jedno mnoee. Posle toga sledi jox jedno mnoee sa a i sabirae sa P (x). Ukupno je potrebno izvrxiti 2n mnoenja i n sabiraa. Zanim ivo je zapaziti da iako induktivna hipoteza zahteva vixe izraqunavaa, ona dovodi do smaea ukupnog broja operacija. Dobijeni algoritam izgleda dobro u svakom pogledu: efikasan je, jednostavan i jednostavno se realizuje. Ipak, postoji i bo i algoritam. Do ega se dolazi korixeem indukcije na novi, trei naqin. Redukcija problema uklaaem najvixeg koeficijenta a je oqigledan korak, ali to ipak nije jedina raspoloiva mogunost. Umesto toga se moe ukloniti koeficijent a , i svesti problem na izraqunavae vrednosti polinoma sa koeficijentima a , a ,..., a , odnosno polinoma Pn (x) = an xn + Pn−1 (x).
n
n
n−1
n−1
n−1
n−1
n−1
n
n
n
n−1
n
0
n
P˜n−1 (x) =
n X
n−1
1
ai xi−1 = an xn−1 + an−1 xn−2 + · · · + a1 .
i=1
Primetimo da je a ovde (n − 1)-i koeficijenat, a je n − 2-i koeficijenat, i tako da e. Dakle, imamo novu induktivnu hipotezu. Induktivna˜ hipoteza (obrnuti redosled). Umemo da izraqunamo vrednost polinoma P (x) sa koeficijentima a , a ,..., a u taqki x. Ovakva induktivna hipoteza je pogodnija jer se lakxe proxiruje. Poxto ˜ ˜ je P (x) = xP (x) + a , za izraqunavae P (x) polazei od P (x) dovo no je jedno mnoee i jedno sabirae. Izraqunavae se moe opisati sledeim izrazom: n
n−1
n−1
n
n−1
n
0
n
n−1
1
n−1
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
Algoritam Ulaz: (koeficijenti polinoma) i (realni broj). Izlaz: (vrednost polinoma u taqki ).
59
Vrednost polinoma(a, x);
a = a0 , a1 , . . . , an P
x
x
begin
P := an ; for i := 1 to n do P := x · P + an−i end
Ris. 1. Izraqunavae vrednosti polinoma u zadatoj taqki.
Sloenost. Algoritam obuhvata n mnoea, n sabiraa i zahteva samo jednu novu memorijsku lokaciju. Posledi algoritam je ne samo efikasniji od prethodnih, nego je i odgovarajui program jednostavniji. Primedba. Indukcija nam omoguuje da se skoncentrixemo na proxirivae rexea maih na rexea veih problema. Pretpostavimo da hoemo da reximo P (n), odnosno problem P koji zavisi od nekog parametra n (obiqno je to veliqina problema). Tada polazimo od proizvo nog primera problema P (n) i pokuxavamo da ga reximo koristei pretpostavku da je P (n − 1) ve rexen. Postoji mnogo naqina da se postavi induktivna hipoteza, a isto tako i vixe naqina da se ona iskoristi. Prikazaemo vixe takvih metoda, i demonstrirati ihovu mo pri konstrukciji algoritama. Primer izraqunavaa vrednosti polinoma ilustruje fleksibilnost koja nam je na raspolagau pri korixeu indukcije. Ideja koja je dovela do Hornerove xeme sastoji se u tome da se ulaz obrauje sleva udesno, umesto intutivnog redosleda zdesna ulevo. Druga uobiqajena mogunost izbora redosleda pojav uje se pri razmatrau strukture u obliku stabla: ona se moe prolaziti odozgo nanie ili odozdo navixe. Da e, mogue je parametar n poveavati za dva (ili vixe), umesto samo za jedan, a postoje i mnogobrojne druge mogunosti. Xtavixe, ponekad najbo i redosled primene indukcije nije isti za sve ulaze. Moe se pokazati korisnim konstrukcija algoritma koji bi pronalazio najbo i redosled primene indukcije. Ovakve mogunosti ilustrovaemo nekim primerima.
4.3. Maksimalni indukovani podgraf
Posmatrajmo sledei problem. Organizujete konferenciju za nauqnike koji se bave raznorodnim disciplinama i imate spisak osoba koje biste eleli da pozovete. Pretpostavka je da e se svaki od ih odazvati pozivu ako mu se bude ukazala mogunost plodne razmene ideja. Za svakog nauqnika moete da napravite listu onih (sa spiska) sa kojima e on verovatno imati interakciju. Neka je k zadati broj. Vi biste voleli da pozovete xto je mogue vixe
60
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
udi, a da pri tome garantujete svakome od ih mogunost da razmeni misli sa bar k drugih osoba. Vax problem nije da organizujete te interakcije, niti da obezbedite dovo no vremena za ih. Vi jedino elite da obezbedite ihovo prisustvo na konferenciji. Kako izabrati osobe koje treba pozvati? Opisani problem odgovara sledeem grafovskom problemu. Neka je G = (V, E) neusmereni graf. Graf H = (U, F ) je indukovani podgraf grafa G ako U ⊆ V i F sadri sve grane iz E kojima su oba kraja u U , videti primer na slici 2. Stepen qvora je broj emu susednih qvorova. Qvorovi grafa odgovaraju nauqnicima, a grana izmeu dva qvora postoji ako odgovarajui nauqnici mogu da razmeuju ideje. Indukovani podgraf odgovara podskupu nauqnika. e
G = (V, E)
d
a d
V = {a, b, c, d, e}
dd
E = {(a, b), (a, d), (a, e), (b, c), (c, d), (c, e), (d, e)} H = (U, F ) U = {a, d, e}
b
d
d c
F = {(a, d), (a, e), (d, e)}
Ris. 2. Primer indukovanog podgrafa. Grane su neureeni parovi qvorova.
Problem. Za zadati neusmereni graf G = (V, E) i zadati prirodni broj k pronai maksimalni indukovani podgraf H = (U, F ) grafa G (tj. indukovani podgraf sa maksimalnim brojem qvorova) uz uslov da svi qvorovi podgrafa H imaju stepen bar k, ili ustanoviti da takav indukovani podgraf ne postoji. Direktni pristup rexavau ovog problema sastoji se u uklaau svih qvorova stepena maeg od k. Posle uklaaa ovih qvorova, zajedno sa granama koje su im susedne, stepeni preostalih qvorova se u opxtem sluqaju smauju. Kad stepen nekog qvora postane mai od k, taj qvor treba ukloniti iz grafa. Nije meutim jasan redosled kojim qvorove treba uklaati. Treba li najpre ukloniti sve qvorove stepena < k, a zatim obraivati qvorove sa umaenim stepenovima? Ili treba ukloniti jedan qvor stepena < k, pa nastaviti sa qvorovima kojima su smaeni stepenovi? (Ova dva pristupa odgovaraju pretrazi u xirinu, odnosno pretrazi u dubinu, tehnikama koje e biti razmotrene u ode ku 6.3). Da li e oba pristupa dati isti rezultat? Da li e rezultujui graf imati najvei mogui broj qvorova? Na ova pitaa lako je dati odgovor korixeem sledeeg pristupa. Umesto da algoritam posmatramo kao niz koraka koje treba izvrxiti da bi se doxlo do rezultata, moemo da sebi postavimo za ci dokazivae teoreme da algoritam postoji. Potrebno je pronai maksimalni indukovani podgraf koji zadovo ava zadate uslove.
4.4. NALAE E BIJEKCIJE
61
Induktivna hipoteza. Umemo da pronaemo maksimalni indukovani podgraf sa qvorovima stepena ≥ k za graf sa mae od n qvorova. Treba da dokaemo da je ova "teorema" taqna za bazni sluqaj, a zatim da iz ene taqnosti za n − 1 sledi ena taqnost za n. Prvi netrivijalni sluqaj pojav uje se za n = k + 1, jer ako je n ≤ k onda su stepeni svih qvorova mai od k. Ako je n = k + 1 onda samo u jednom sluqaju postoji indukovani podgraf sa stepenima qvorova ≥ k: to je sluqaj potpunog grafa (grafa sa svim moguim granama). Pretpostavimo da e da je G = (V, E) proizvo an graf sa n > k + 1 qvorova. Ako su stepeni svih qvorova u G vei ili jednaki od k, onda graf H = G zadovo ava uslove i dokaz je zavrxen. U protivnom postoji qvor v stepena < k. Oqigledno je da stepen qvora v ostaje < k i u svakom indukovanom podgrafu grafa G, pa prema tome v ne pripada ni jednom podgrafu koji zadovo ava uslove problema. Dakle, v se moe ukloniti iz G zajedno sa svim emu susednim granama, ne meajui uslove teoreme. Posle uklaaa v graf ima n − 1 qvor, pa prema induktivnoj hipotezi mi umemo da reximo problem do kraja. Komentar. Jedan od moguih naqina za uproxavae nekog problema je eliminacija nekog od egovih elemenata. U ovom primeru primena indukcije bila je jednostavna, jer je bilo jasno koje qvorove i kako treba eliminisati. U opxtem sluqaju proces eliminacije ne mora da bude jednostavan. Videemo primer u kome se dva elementa objediavaju, qime se broj elemenata smauje za jedan (ode ak 5.5); zatim primer u kome se eliminixu ograniqea na problem umesto da se eliminixu delovi ulaza (ode ak 6.7); i na kraju primer u kome se najpre konstruixe poseban algoritam za izbor elemenata koji se mogu eliminisati (ode ak 4.5). U primeru koji sledi takoe e biti ilustrovano eliminisae odgovarajuih elemenata.
4.4. Nalaee bijekcije
Neka je f funkcija koja preslikava konaqan skup A u samog sebe, f : A → A. Bez gubitka opxtosti moe se pretpostaviti da je A = {1, 2, . . . , n}. Pretpostav amo da je funkcija f predstav ena vektorom f duine n, tako da f [i] sadri vrednost f (i) ∈ A, i = 1, 2, . . . , n. Funkcija f je bijekcija, ako za proizvo an elemenat j ∈ A postoji elemenat i ∈ A takav da je f (i) = j. Funkcija se moe predstaviti dijagramom kao na slici 3, tako da svakom elementu A odgovara po jedan levi i jedan desni qvor, a grane definixu preslikavae. Funkcija prikazana na slici 3 oqigledno nije bijekcija. Problem. Neka je zadat konaqan skup A i preslikavae f : A → A. Odrediti podskup S ⊆ A sa najveim moguim brojem elemenata tako da bude f (S) ⊆ S i da restrikcija f na S bude bijekcija. Ako je f bijekcija, onda kompletan skup A zadovo ava uslove problema, pa je maksimalni podskup S = A. Ako je pak f (a) = f (b) za neke a 6= b, onda S ne moe da sadri i a i b. Na primer, skup S u problemu sa slike 3 ne moe
62
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM 1 b 2 3 4 5 6 7
b b b b b b
1b 1 >b 2
~b 3 b4 > -b 5 q 1b 6 b7
Ris. 3. Primer preslikavaa skupa u samog sebe.
da sadri oba elementa 2 i 3, jer je f (2) = f (3) = 1. Meutim, nije svejedno koji e elemenat od ova dva biti eliminisan. Ako na primer eliminixemo 3, onda se zbog f (1) = 3 mora eliminisati i 1. Zatim se na isti naqin zbog f (2) = 1 mora eliminisati i 2. Dobijeni podskup sigurno nije maksimalan, jer je mogue eliminisati samo elemenat 2 umesto 1, 2 i 3. Rexee problema na slici 3 je podskup {1, 3, 5}, xto se moe ustanoviti npr. proverom svih moguih podskupova S ⊂ A. Postav a se pitae nalaea opxteg metoda za odluqivae koje elemente treba uk uqiti u S. Na sreu, imamo izvestan manevarski prostor prilikom odluqivaa kako problem svesti na mai. Veliqina problema moe se smaiti bilo nalaeem elementa koji pripada skupu S, bilo nalaeem elementa koji ne pripada skupu S. Ispostav a se da je druga mogunost bo a. Koristiemo sledeu jednostavnu induktivnu hipotezu. Induktivna hipoteza. Znamo da reximo problem za skupove sa n − 1 elemenata. Baza indukcije je trivijalna: ako skup A ima jedan element, on se mora preslikavati u sebe, pa je f na A bijekcija. Pretpostavimo da e da imamo proizvo an skup A od n elemenata i da traimo podskup S koji zadovo ava uslove problema. Tvrdimo da ako elemenat a ne pripada skupu f (A), onda a ne moe pripadati S ; drugim reqima, elemenat a za koji u odgovarajui qvor na desnoj strani dijagrama ne ulazi ni jedna grana, ne moe biti u S. Zaista, iz uslova problema sledi da je f (S) = S, a to je, ako se pretpostavi da a ∈ S | nemogue, jer po pretpostavci a ∈/ f (S). Dakle, ako postoji takav elemenat a, mi ga eliminixemo iz skupa. Sada imamo skup A = A \ {a} sa n − 1 elementom, koji f preslikava u samog sebe; prema induktivnoj hipotezi mi znamo da reximo problem sa skupom A . Ako takvo a ne postoji, onda je preslikavae bijekcija, i problem je rexen. Suxtina ovog rexea je da se a mora ukloniti. Dokazali smo da a ne moe pripadati S. U tome je snaga indukcije: onog trenutka kad se elemenat ukloni i time smai veliqina problema, zadatak je rexen. Pri tome se mora voditi raquna da mai problem bude potpuno isti kao polazni, izuzimajui veliqinu. Jedini uslov koji f i A treba da zadovo avaju je f (A) ⊆ A. Ovaj 0
0
4.4. NALAE E BIJEKCIJE
63
uslov zadovo en je i na skupu A = A \ {a}, jer se ni jedan elemenat ne preslikava u a. U trenutku kad vixe nema elemenata koji se mogu ukloniti, skup S je pronaen. Realizacija. Algoritam smo opisali kao rekurzivnu proceduru. U svakom koraku pronalazimo elemenat u koga se ni jedan drugi ne preslikava, uklaamo ga i nastav amo rekurzivno. Realizacija algoritma ipak ne mora 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 inkrementirajui (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 ). Izlaz: (podskup ulaznog skupa takav da je bijekcija na ). 0
Bijekcija(f, n);
f
n
S
f
S
begin
S := A; {A = {1, 2, . . . n}} for j := 1 to n do c[j] := 0;
increment c[f [j]]; if c[j] = 0 then stavi j u Spisak {lista elemenata za eliminaciju} while Spisak nije prazan do skini i sa vrha liste Spisak; for j := 1 to n do
for j := 1 to n do
S := S \ {i};
c[f [i]] = c[f [i]] − 1; if c[f [i]] = 0 then end
stavi f [i] u Spisak
Ris. 4. Algoritam Bijekcija.
Sloenost. Za uvodni deo (inicijalizaciju) treba izvrxiti O(n) koraka. Svaki elemenat se u listu moe staviti najvixe jednom, a operacije potrebne da se elemenat ukloni iz liste izvrxavaju se za vreme ograniqeno konstantom. Prema tome, ukupan broj koraka je O(n). Komentar. U ovom primeru veliqina problema je smaena uklaaem elemenata iz skupa. Traili smo najjednostavniji naqin za uklaae elementa tako da se ne promene uslovi problema. Poxto je jedini zahtev bio da
64
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
funkcija preslikava A u samog sebe, izbor elementa u koga se ni jedan drugi elemenat ne preslikava je prirodan.
4.5. Problem pronalaea zvezde
Sledei primer je interesantan po tome xto za rexavae problema nije neophodno pregledati sve ulazne podatke, pa qak ni ihov znaqajan deo. Meu n osoba zvezda je osoba koja nikoga ne poznaje, a koju svi ostali poznaju. Problem je identifikovati zvezdu (ako ona postoji) postav ajui pitaa oblika "Izvinite, da li poznajete onu osobu?" Pretpostav a se da su svi odgovori taqni, a da e qak i zvezda odgovarati na pitaa. Ci je minimizirati ukupan broj pitaa. Poxto parova osoba ima ukupno n(n−1)/2, u najgorem sluqaju treba postaviti n(n − 1) pitaa, ako se pitaa postav aju bez neke strategije. Na prvi pogled nije jasno moe li se e eni ci postii sa garantovano maim brojem postav enih pitaa. Problem se moe preformulisati u grafovski. Formiramo usmereni graf sa qvorovima koji odgovaraju osobama, u kome grana od osobe A ka osobi B postoji ako A poznaje B. Zvezda odgovara ponoru grafa, qvoru U koji ulazi n − 1 grana, a iz koga ne izlazi ni jedna grana. Jasno je da graf moe imati najvixe jedan ponor. Ulaz problema se opisuje n × n matricom povezanosti M , qiji elemenat M je jednak 1 ako osoba i poznaje osobu j , odnosno 0 u protivnom; dijagonalni elementi su jednaki nuli. Problem. Data je n×n matrica povezanosti M . Ustanoviti da li postoji indeks i, takav da su u M svi elementi i-te kolone (sem i-tog) jednaki 1, i da su svi elementi i-te vrste jednaki 0. Bazni sluqaj sa dve osobe je jednostavan. Posmatrajmo kao i obiqno razliku izmeu problema sa n − 1 osobom i problema sa n osoba. Pretpostav amo da znamo da pronaemo zvezdu meu prvih n − 1 osoba indukcijom. Poxto moe da postoji najvixe jedna zvezda, postoje tri mogunosti: (1) zvezda je jedna od prvih n − 1 osoba; (2) zvezda je n-ta osoba; (3) zvezda ne postoji. Prvi sluqaj je najjednostavniji: treba samo proveriti da li n-ta osoba poznaje zvezdu, odnosno da li je taqno da zvezda ne poznaje n-tu osobu. Preostala dva sluqaja su tea, jer da bi se proverilo da li je n-ta osoba zvezda, treba postaviti 2(n − 1) pitaa. Ako postavimo 2(n − 1) pitaa u n-tom koraku, onda e ukupan broj pitaa biti n(n − 1), xto hoemo da izbegnemo. Potrebno je dakle promeniti pristup problemu. Ideja je da se problem posmatra "unazad". Poxto je texko identifikovati zvezdu, pokuxajmo da pronaemo osobu koja nije zvezda: u svakom sluqaju, broj ne-zvezda mnogo je vei od broja zvezda. Ako eliminixemo nekoga iz razmatraa, paramentar n koji definixe veliqinu problema smauje se na n − 1. Pri tome uopxte nije bitno koga emo eliminisati! Pretpostavimo da osobu A pitamo da li poznaje osobu B . Ako A poznaje B , onda A nije zvezda, a ako pak ij
4.5. PROBLEM PRONALAE A ZVEZDE
65
A ne poznaje B , onda B nije zvezda. U oba sluqaja se jedna osoba eliminixe postav aem samo jednog pitaa! Ako se sada vratimo na tri mogua sluqaja pri prelasku sa n − 1 na n, vidimo da je novost u tome da n-tu osobu ne biramo proizvo no. Eliminacijom osobe A ili B problem svodimo na sluqaj sa n−1 osobom, pri qemu smo sigurni da do sluqaja 2. nee doi, jer eliminisana osoba ne moe biti zvezda. Ako je nastupio sluqaj 3, odnosno nema zvezde meu prvih n − 1 osoba, onda nema zvezde ni meu svih n osoba. Ostaje prvi sluqaj, koji je lak: ako meu prvih n − 1 osoba postoji zvezda, onda se sa dva dopunska pitaa moe proveriti da li je to zvezda i za kompletan skup. Ako nije, onda nema zvezde. Algoritam se sastoji u tome da pitamo osobu A da li poznaje osobu B i eliminixemo ili osobu A ili osobu B, zavisno od dobijenog odgovora. Neka je eliminisana npr. osoba A. Indukcijom (rekurzivno) se pronalazi zvezda meu preostalih n − 1 osoba. Ako meu ima nema zvezde, rexavae je zavrxeno. U protivnom, proverava se da li je taqno da A poznaje zvezdu, a da zvezda ne poznaje A. Realizacija. Kao i u sluqaju algoritma iz prethodnog ode ka, efikasnije je realizovati algoritam za nalaee zvezde iterativno, nego rekurzivno. Algoritam se deli u dve faze. U prvoj fazi se eliminixu sve osobe sem jednog kandidata za zvezdu, a druga faza je neophodna da se ustanovi da li kandidat jeste zvezda. Poqiemo sa n kandidata, za koje moemo da pretpostavimo da su smexteni na stek (listu iz koje se najpre vadi posledi upisani elemenat). Za svaki par kandidata mi moemo da eliminixemo jednog, pitaem da li poznaje drugog. Poqiemo uzimajui prva dva kandidata sa steka i eliminixui jednog od ih. Da e u svakom koraku formiramo par od preostalog kandidata i (sve dok je stek neprazan) naredne osobe sa steka, i eliminixemo jednog od ih. U trenutku kad stek postane prazan, imamo samo jednog kandidata. Zatim se proverava da li je taj kandidat zvezda. Algoritam je prikazan na slici 5. Stek je realizovan eksplicitno korixeem indeksa i, j, i N aredni. Sloenost. Postav a se najvixe 3(n − 1) pitaa: n − 1 pitaa u prvoj fazi da bi se eliminisala n − 1 osoba, i najvixe 2(n − 1) pitaa za proveru da li je preostali kandidat zvezda. Primetimo da veliqina ulaza nije n, nego n(n − 1), broj elemenata matrice. Prikazano rexee pokazuje da je mogue odrediti zvezdu pregledajui najvixe O(n) elemenata matrice povezanosti, iako je jasno da rexee mora bitno da zavisi od svih n(n − 1) elemenata matrice. Komentar. K uqna ideja ovog elegantnog rexea je pametno smaivae parametra n za 1. Primer pokazuje da se ponekad isplati uloiti trud (u ovom sluqaju | jedno pitae) da bi se redukcija efikasnije izvela. Ne polazi se od proizvo nog, nego se bira poseban skup od n − 1 osobe. Videemo jox primera u kojima se znaqajno vreme troxi na konstrukciju pogodnog redosleda indukcije, xto se pokazuje korisnim.
66
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
Algoritam Ulaz: ( Izlaz: .
Zvezda(P oznaje);
Bulova matrica sa nulama na dijagonali).
P oznaje n × n Zvezda
begin
osoba A} osoba B} N aredni := 3; {sledei koji e se proveravati} {prva faza: eliminixu se svi kandidati sem jednog} while N aredni ≤ n + 1 do if P oznaje[i, j] then i := N aredni {eliminacija i} else j := N aredni; {eliminacija j} N aredni := N aredni + 1 {po izlasku iz pet e je ili i = n + 1 ili j = n + 1} i := 1; {
j := 2; {
if i = n + 1 then Kandidat := j else Kandidat := i
druga faza: provera da li je Kandidat zvezda} ako Kandidat jeste zvezda}
{
Jeste := true; {true k := 1;
while Jeste and k ≤ n do if P oznaje[Kandidat, k] then Jeste := f alse; if not P oznaje[k, Kandidat] then if Kandidat 6= k then Jeste := f alse; k := k + 1; if Jeste then Zvezda := Kandidat
nema zvezde}
else Zvezda := 0 { end
Ris. 5. Algoritam za pronalaee zvezde.
4.6. Primer primene dekompozicije: pravougaonika maksimum skupa
Do sada smo imali primere sa grafovima i numeriqke probleme. Sada emo se pozabaviti primerom u kome treba iscrtati neke figure. Neka su L, D i V realni brojevi takvi da je L < D i V > 0. Pravougaona funkcija (pravougaonik) sa parametrima ½(L, D, V ) je funkcija 0, x < L ili x ≥ D f (x) = . V, L ≤ x < D Problem. Dato je n pravougaonika f (x), i = 1, 2, . . . , n. Potrebno je odrediti "konturu" ovog skupa pravougaonika, odnosno funkciju L,D,V
Li ,Di ,Vi
f (x) = max {fLi ,Di ,Vi (x) | i = 1, 2, . . . , n}
4.6. PRIMER PRIMENE DEKOMPOZICIJE: MAKSIMUM SKUPA PRAVOUGAONIKA67
Primer ulaza i izlaza prikazan je na slici 6: ulaz su qetiri pravougaonika (1, 4, 4), (2, 5, 6), (3, 3, 8) i (7, 4, 10), slika 6(a), a rezultujua kontura prikazana je na slici 6(b). Izlazna funkcija f (x) moe se opisati skupom intervala na kojima ona ima konstantnu vrednost, i vrednostima u tim intervalima. Drugim reqima, f (x) se zadaje nizom parova (x , v ), i = 1, 2, . . . , k (pri qemu je v = 0), tako da je f (x) = v za x ≤ x < x , i = 1, 2, . . . , k. Zbog jednostavnosti pretpostav a da je jox x = −∞, v = 0, x = ∞. U primeru sa slike 6(b) funkcija f (x) opisuje se nizom parova (1, 4), (2, 5), (6, 3), (7, 4), i
k
i
i
i
i+1
0
0
k+1
(10, 0).
4 3 2 1
4 3 2 1
(a)
(b)
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
Ris. 6. Problem nalaea maksimuma skupa pravougaonika: (a) ulaz; (b) izlaz. Direktni pristup rexavau ovog problema zasniva se na proxirivau rexea korak po korak, tj. proxirivau rexea za prvih n−1 pravougaonika novim, n-tim pravougaonikom. Baza indukcije n = 1 je jednostavna: pravougaonik f (x) pretvara se u funkciju f (x). Da bi se maksimumu L1 ,D1 ,V1
(L1 ,V1 ),(D1 ,0)
fn−1 (x) = f(x1 ,v1 ),(x2 ,v2 ),...,(xk ,vk ) (x)
prik uqio n-ti pravougaonik f (x), treba pronai takve indekse i, j , da je x ≤ L < x , x ≤ D < x , 0 ≤ i ≤ j ≤ k: vrednost funkcije f (x) moe se pri prelasku na f (x) promeniti samo u onim intervalima konstantnosti sa kojima interval [L , D )) ima neprazan presek. Novi maksimum je ½ f (x), x < L ili x ≥ D f (x) = . Ln ,Dn ,Vn
i
n
i+1
j
n
j+1
n−1
n
i
i
n−1
n
n
n
max{fn−1 (x), Vn }, Ln ≤ x < Dn
Intervali konstantnosti [x , x ) i [x , x ) funkcije f (x) u opxtem sluqaju bivaju taqkama L i D pode eni na podintervale [x , L ), [L , x ), odnosno [x , D ), [D , x ), u kojima je vrednost f (x) konstantna; pored toga, u intervalima [x , x ), l = i + 1, . . . , j − 1 u kojima f (x) ima vrednost mau od V , f (x) dobija novu (u odnosu na f (x)) vrednost V . U primeru na slici 7 je n = 5, (L , D , V ) = (5, 9, 4.5), i i
n
j
n
n
n
n
j+1
l
l+1
i+1
j
j+1
n−1
n
i
n−1
n−1
n
fn−1 (x) fn (x)
n
n
n
n
= f(1,4),(2,5),(5,6),(9,4),(10,0) (x), = f(1,4),(2,5),(6,4.5),(9,4),(10,0) (x).
n
n
i+1
68
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM 4 3 2 1 1 2 3 4 5 6 7 8 9 10
Ris. 7. Dodavae novog pravougaonika maksimumu prethod-
nih n − 1 sa slike 6. Ovaj algoritam je korektan, ali nije efikasan: dodavae n-tog pravougaonika funkciji f (x) zahteva O(n) koraka, pa je ukupna sloenost O(n ). Algoritam se moe usavrxiti primenom metoda dekompozicije (odnosno "zavadi, pa vladaj, engleski divide–and–conquer ). Umesto prelaska sa n − 1 na n, efikasnije je proxirivati rexee sa n/2 na n pravougaonika. Bazni sluqaj je ve razmotren. Metod dekompozicije obuhvata podelu ulaza na mae podskupove, ihovu obradu rekurzivnim pozivom procedure i objediavae dobijenih rexea. Najqexe se problem deli u potprobleme podjednake veliqine. Kao xto smo videli u poglav u 2, rexee diferencne jednaqine T (n) = T (n − 1) + cn je T (n) = O(n ), dok je rexee jednaqine 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 linearno 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 zapaanju da je za dodavae novog pravougaonika funkciji f (x) potrebno u najgorem sluqaju linearno vreme, a da se za linearno vreme mogu objediniti i dve razliqite funkcije f (x) i f (x), rexea dva potproblema za po n/2 pravougaonika. Za asimptotski isto vreme postie se mnogo vixe koristei drugi pristup. Dve u delovima konstantne funkcije mogu se kombinovati u osnovi istim algoritmom kojim je kombinovan jedan pravougaonik sa jednom takvom funkcijom (slika 8). Prekidne taqke dveju funkcija f (x) i f (x) se prolaze istovremeno sleva u desno, identifikuju se x-koordinate krajeva intervala konstantnosti funkcije f (x) i odreuju vrednosti f (x) u tim intervalima. Objediavae se izvrxava za linearno vreme, pa je sloenost kompletnog algoritma O(n log n) u najgorem sluqaju. Ovaj algoritam je sliqan algoritmu sortiraa objediavaem, ode ak 5.3.3 (videti zadatak 4.9). Komentar. Trudite se da za uloeno uvek dobijete xto je mogue vixe. Ako vax algoritam sadri korak koji je opxtiji nego xto je potrebno, razmotrite mogunost da taj korak primenite na najtei deo problema. Dekompozicija je ovde korisna, jer do maksimuma koristi korak objediavaa. Diferencne jednaqine iz ode ka 2.5.4 pokrivaju veinu uobiqajenih algoritama zasnovanih na dekompoziciji, pa je korisno znati ihova rexea. 2
n−1
2
n−1
0 n/2
00 n/2
0 n/2
n
00 n/2
n
4.7. IZRAQUNAVA E FAKTORA RAVNOTEE BINARNOG STABLA
69
5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11
Ris. 8. Odreivae maksimuma dve u delovima konstantne funkcije.
4.7. Izraqunavae faktora ravnotee binarnog stabla
Neka je T binarno stablo sa korenom r. Visina qvora v je rastojae od v do najda eg potomka. Visina stabla je visina egovog korena. Faktor ravnotee qvora v definixe se kao razlika visina egovog levog i desnog podstabla. U ode ku 3.5 razmatrana su AVL stabla | binarna stabla qiji svi qvorovi imaju faktore ravnotee −1, 0 ili 1. Ovde emo se baviti proizvo nim binarnim stablima. Na slici 9 prikazano je binarno stablo kod koga je uz svaki qvor upisan par h/b, gde je h visina qvora, a b egov faktor ravnotee. 3/0
c
c 2/ − 2
2/0 c 1/1 c
c
c 1/1
c 1/ − 1 c
c
Ris. 9. Binarno stablo sa oznakama h/b uz unutraxe qvorove (h { visina, b { faktor ravnotee qvora).
Problem. Za zadato stablo T sa n qvorova izraqunati faktore ravnotee svih qvorova. Pokuxaemo sa induktivnim pristupom i najjednostavnijom induktivnom hipotezom. Induktivna hipoteza. Znamo da izraqunamo faktore ravnotee svih qvorova u stablima sa < n qvorova. Bazni sluqaj n = 1 je trivijalan. Ako je dato stablo sa n > 1 qvorova, moemo da uklonimo koren, zatim da reximo problem (induktivno) za dva podstabla koja su preostala. Opredelili smo se za uklaae korena zbog toga xto faktor ravnotee qvora v zavisi samo od qvorova ispod v. Zbog toga znamo faktore ravnotee svih qvorova izuzev korena. Meutim, faktor ravnotee korena zavisi ne od faktora ravnotee, nego od visina egovih
70
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
sinova. Zak uqujemo da u ovom sluqaju jednostavna indukcija ne rexava problem. Potrebno je da znamo visine sinova korena. Ideja je da nalaee visina qvorova prik uqimo polaznom problemu. Pojaqana induktivna hipoteza. Znamo da izraqunamo faktore ravnotee i visine svih qvorova u stablima koja imaju < n qvorova. Bazni sluqaj je ponovo trivijalan. Kad sada posmatramo koren proizvo nog stabla, egov faktor ravnotee moemo lako da odredimo kao razliku visina egovih sinova. Moemo da odredimo i visinu korena: to je vea od visina egovih sinova, uveana za jedan. Lako je proveriti da se sluqaj kad nema levog ili desnog podstabla, moe rexiti tako da se visina nepostojeeg sina zameni sa −1. Karakteristika ovog algoritma je da on rexava nexto opxtiji problem. Umesto da raqunamo samo faktore ravnotee, mi izraqunavamo i visine qvorova. Ispostav a se da je opxtiji problem lakxi, jer se visine lako raqunaju. Ako je rexee opxtije (jer je problem proxiren), onda induktivni korak moe biti jednostavniji, jer posedujemo snanija sredstva. Uobiqajena grexka pri rexavau xireg problema je da se zaboravi na postojae dva parametra, i da se svaki od ih mora posebno izraqunati.
4.8. Nalaee maksimalnog uzastopnog podniza
Problem. Zadat je niz x , x ,... x realnih brojeva (ne obavezno pozitivnih). Odrediti podniz x , x ,... x uzastopnih elemenata sa najveom moguom sumom. Za ovakav podniz rei emo da je maksimalni podniz. Na primer, u nizu (2, −3, 1.5, −1, 3, −2, −3, 3) maksimalni podniz je 1.5, −1, 3, sa sumom 3.5. Moe da postoji vixe maksimalnih podnizova datog niza. Ako su svi qlanovi niza negativni, onda je maksimalni podniz prazan (po definiciji, suma praznog niza je 0). Voleli bismo da imamo algoritam koji rexava ovaj problem i pregleda (prolazi niz redom sleva u desno) niz samo jednom. Induktivna hipoteza. Znamo da naemo maksimalni podniz u nizovima duine < n. Za n = 1 maksimalni podniz je broj x ako je x ≥ 0, odnosno prazan podniz ako je x < 0. Posmatrajmo niz S = (x , x , . . . , x ) duine n > 1. Prema induktivnoj hipotezi mi umemo da pronaemo maksimalni podniz S niza S = (x , x , . . . , x ). Ako je S prazan podniz, onda su svi brojevi u nizu S negativni, pa ostaje da se razmotri samo x . Pretpostavimo sada da je S = (x , x , . . . , x ) za neke indekse i i j takve da je 1 ≤ i ≤ j ≤ n−1. Ako je j = n−1 (odnosno maksimalni podniz je sufiks), onda je lako ovo rexee proxiriti na S: ako je broj x pozitivan, onda on produuje S , a u protivnom podniz S je maksimalan i u S. Meutim, ako je j < n − 1, onda postoje dve mogunosti. Ili S ostaje maksimalni podniz u S, ili postoji drugi podniz koji nije maksimalan u S , ali posle dodavaa x postaje maksimalan u S. 1
i
2
n
i+1
j
1
1
0
1
1
1
2
n−1
2
n
0 M
i+1
j
0 M
n
0 M
0
0 M
n
i
0 M
0
n
0 M
4.8. NALAE E MAKSIMALNOG UZASTOPNOG PODNIZA
71
K uqna ideja je da se pojaqa induktivna hipoteza. Ona e biti demonstrirana na primeru nalaea maksimalnog podniza, a zatim e nexto opxtije biti razmotrena u sledeem ode ku. Problem sa razmotrenom induktivnom hipotezom je u tome xto x moe da produi podniz koji nije maksimalan u S i tako formira novi maksimalni podniz u S. Prema tome, nije dovo no samo poznavae maksimalnog podniza u S . Meutim, x moe da produi samo podniz koji se zavrxava sa x , odnosno sufiks niza S . Pretpostavimo da smo pojaqali induktivnu hipotezu tako da obuhvati i nalaee maksimalnog sufiksa, oznaqenog sa S = (x , x , . . . , x ). Pojaqana induktivna hipoteza. U nizovima duine < n umemo da pronaemo maksimalni podniz, i maksimalni sufiks. Ako za podniz S znamo oba ova podniza, algoritam postaje jasan. Maksimalni sufiks proxirujemo brojem x . Ako je dobijena suma vea od sume (globalno) maksimalnog podniza, onda imamo novi maksimalni podniz (takodje i novi maksimalni sufiks). U protivnom, zadravamo prethodni maksimalni podniz. Posao time nije zavrxen: potrebno je odrediti i novi maksimalni sufiks. U opxtem sluqaju novi maksimalni sufiks se ne dobija uvek proxirivaem starog brojem x . Moe se dogoditi da je maksimalni sufiks koji se zavrxava sabirkom x negativan. Tada je novi maksimalni sufiks ustvari prazan podniz, sa sumom 0. Algoritam za nalaee maksimalnog podniza prikazan je na slici 10. n
0
0
n
n−1
0 E
k
k+1
0
n−1
0
n
n
n
Algoritam Ulaz: (niz duine ). Izlaz: (suma maksimalnog podniza). Max uzast podniz(X, n);
X
n
Glob max
begin
poqetna vrednost globalno maks. sume} poqetna vrednost sume maks. sufiksa}
Glob max := 0; { Suf max := 0; {
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
Ris. 10. Algoritam za nalaee maksimalnog podniza zadatog niza.
72
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
4.9. Pojaqavae induktivne hipoteze
Pojaqavae induktivne hipoteze je jedna od najvanijih tehnika za dokazivae teorema indukcijom. Prilikom traea dokaza qesto se nailazi na sledeu situaciju. Neka je teorema koju treba dokazati oznaqena sa P . Induktivna hipoteza moe se oznaqiti sa P (< n), a dokaz teoreme svodi se na dokazivae taqnosti tvrea P (< n) ⇒ P (n). U mnogo sluqajeva moe se uvesti dopunska pretpostavka Q, koja olakxava dokaz. Drugim reqima, lakxe je dokazati [P ∧ Q](< n) ⇒ P (n) nego P (< n) ⇒ P (n). Pretpostavka moe da izgleda korektna, ali nije jasno kako se moe dokazati. Ideja se sastoji u tome da se Q uk uqi u induktivnu hipotezu. Sada je potrebno dokazati da [P ∧ Q](< n) ⇒ [P ∧ Q](n). Konjunkcija P ∧ Q je jaqe tvree nego samo P , ali se qesto jaqa tvrea lakxe dokazuju. Proces se nastav a, i posle odreenog broja uvedenih pretpostavki moe da dovede do zavrxetka dokaza. Problem nalaea maksimalnog podniza je dobar primer kako se ovaj princip moe iskoristiti za usavrxavae algoritama. Najqexa grexka prilikom korixea ove tehnike je previd qienice da je dodata dopunska pretpostavka u trenutku kad treba korigovati dokaz. Drugim reqima, mi dokazujemo tvree [P ∧ Q](< n) ⇒ P (n), zaborav ajui da je uvedena dopunska pretpostavka Q. U primeru sa maksimalnim podnizom do ove grexke bi doxlo ako ne bismo izraqunali novi maksimalni sufiks. Sliqno, u primeru sa nalaeem faktora ravnotee qvorova binarnog stabla, ovakva grexka bila bi ako se ne izraquna visina korena stabla. Prema tome, vano je precizno registrovati promene induktivne hipoteze.
4.10. Dinamiqko programirae, problem ranca
Pretpostavimo da ranac treba napuniti stvarima. Stvari mogu da budu razliqitog oblika i veliqine, a ci je da se u ranac upakuje xto je mogue vixe stvari. Umesto ranca to moe da bude kamion, brod ili silicijumski qip, a problem je pakovae elemenata. Postoji mnogo varijanti ovog problema; ovde e biti razmatrana varijanta sa jednodimenzionalnim predmetima. Problem. Dat je prirodan broj K i n predmeta razliqitih veliqina (teina), tako da i-ti predmet ima veliqinu k , 1 ≤ i ≤ n. Pronai podskup predmeta qija je suma veliqina jednaka taqno K , ili ustanoviti da takav 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 jednostavnosti 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). i
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 ulazi predmet veliqine k . U protivnom, ako ne postoji rexee P (n − 1, K), postav a se pitae | moe li se iskoristiti ovaj negativni rezultat? Najpre 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, trebalo bi pojaqati induktivnu hipotezu. Potrebno je imati rexea ne samo za ranac veliqine K , nego i za rance veliqine mae od K . Induktivna hipoteza (drugi pokuxaj). Umemo da reximo P (n − 1, k) za sve k, 0 ≤ k ≤ K . Ova induktivna hipoteza omoguuje nam da reximo P (n, k) za 0 ≤ k ≤ K . Bazni sluqaj P (1, k) se lako rexava: za k = 0 uvek postoji rexee (trivijalno, nula sabiraka), a u protivnom rexee postoji akko je k = k. Problem P (n, k) svodi se na dva problema P (n−1, k) i P (n−1, k−k ) (drugi problem otpada ako je k − k < 0). Oba ova problema se mogu rexiti indukcijom. Poxto je svoee kompletno, algoritam je konstruisan. Meutim, ovaj algoritam je neefikasan. Problem veliqine n sveden je na dva problema veliqine n−1 (istina, u jednom od potproblema smaena je vrednost k). Svaki od novih problema svodi se na po dva naredna problema, itd, xto dovodi do eksponencijalnog algoritma. Na sreu, u mnogo sluqajeva mogue je pobo xati efikasnost prilikom rexavaa ovakvih problema. Zapaa se da ukupan broj razliqitih problema ne mora biti preveliki: prvi parametar moe da ima najvixe n, a drugi najvixe K razliqitih vrednosti. Ukupno je broj razliqitih problema najvixe nK . Eksponencijalno vreme izvrxavaa algoritma je posledica dupliraa broja problema posle svakog svoea. Poxto ukupno ima nK razliqitih problema, jasno je da su neki od ih (ako je 2 > nK ) vixe puta rexavani. Korisna ideja je pamtiti sva naena rexea da bi se izbeglo ponov ae rexavaa istih 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 dimenzije n × K . Elemenat (i, k) matrice sadri informacije o rexeu P (i, k): Svoee po drugoj varijanti induktivne hipoteze ekvivalentno je izraqunavau jedne vrste na osnovu prethodne vrste matrice. Svaki elemenat se izraqunava 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 . 1
n
n
n
1
n
n
n
74
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
Algoritam Ulaz: (vektor duine sa veliqinama predmeta) i (veliqina ranca). Izlaz: (matrica, tako da je akko postoji rexee problema Ranac(S, K);
S
n
P
K
P [i, k].P ostoji = true
ranca sa prvih i predmeta, za veliqinu ranca k; P [i, k].P ripada = true akko i-ti predmet pripada tom rexeu).
begin
P [0, 0].P ostoji := true; for k := 1 to K do P [0, k].P ostoji := f alse;
elementi P [i, 0] za i ≥ 1 bie izraqunati na osnovu P [0, 0]} for k := 0 to K do {izraqunavae elementa P [i, k]} P [i, k].P ostoji := f alse; {polazna vrednost} {
for i := 1 to n do
if P [i − 1, k].P ostoji then
P [i, k].P ostoji := true; P [i, k].P ripada := f alse else if k − S[i] ≥ 0 then if P [i − 1, k − S[i]].P ostoji then P [i, k].P ostoji := true; P [i, k].P ripada := true; end
Ris. 11. Algoritam za rexavae problema ranca. k1 k2 k3 k4
=8 =5 =4 =3
0 1 -
O O O O
2 -
3 4 5 6 7 8 9 10 11 - - - - - I - - - - I - - O - - - I O - - O I - I O O - I I O - I
Tablica 1. Primer tabele formirane pri rexavau prob-
lema ranca. Ulaz su n = 4 predmeta veliqina 8, 5, 4 i 3, a veliqina ranca je K = 11. Simbol "I " znaqi da postoji rexee koje obuhvata predmet iz odgovarajue vrste; "O": postoji rexee, ali samo bez tog predmeta; "-": ne postoji rexee.
Metod korxen za rexavae ovog problema je specijalni sluqaj opxte tehnike koja se zove dinamiqko programirae. Suxtina dinamiqkog programiraa je formirae velikih tabela (u opxtem sluqaju vixedimenzionalnih) sa svim prethodnim rezultatima. Tabele se konstruixu iterativno. Svaki elemenat se izraqunava na osnovu ve izraqunatih elemenata. Osnovni problem je organizovati izraqunavae elemenata tabele na najefikasniji naqin. Drugi primer dinamiqkog programiraa bie prikazan u ode ku 5.7.
4.11. UOBIQAJENE GREXKE
75
Sloenost. U tabeli ima nK elemenata. Svaki od ih izraqunava se za konstantno vreme na osnovu druga dva elementa, pa je ukupna vremenska sloenost algoritma O(nK). Ako predmeti nisu preveliki, onda K ne moe biti preveliko, pa je nK ¿ 2 . Ako je K jako veliko, ili su veliqine predmeta 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 netaqno, onda se da e na isti naqin posmatra elemenat P [n−1, K−k ], odnosno P [n − 1, K] iz n − 1-e vrste, itd. Podskup se rekonstruixe za O(n) koraka. Prostorna sloenost ovog algoritma je O(nK). Ako se zahteva samo odgovor na pitae da li postoji podskup sa zbirom K , lako je modifikovati algoritam tako da mu prostorna sloenost bude O(K): naredna vrsta se izraqunava na osnovu prethodne, pa je za izraqunavae elementa P [n, K] dovo no imati prostor za smextae dve uzastopne vrste matrice. Da e usavrxavae dovodi do algoritma prostorne sloenosti O(K) koji omoguuje i efektivno pronalaee podskupa sa zbirom K , videti zadatak 4.15. Komentar. Dinamiqko programirae je efikasno kad se problem moe svesti na nekoliko maih, ali ne sasvim malih potproblema. Rexavaju se svi mogui potproblemi. Rezultati izraqunavaa quvaju se u odgovarajuoj tabeli. Dakle, dinamiqko programirae je praktiqno izvod ivo samo ako broj potproblema nije preveliki. Qak i tada dinamiqko programirae radi sa velikim tabelama, pa obiqno zahteva veliki memorijski prostor. U nekim sluqajevima, kao u algoritmu Ranac na slici 11, mogue je rexiti problem koristei mai prostor, tako xto se u memoriji u jednom trenutku quva samo mai deo (dve vrste) matrice. Vremenska sloenost je obiqno bar kvadratna. n
n
n
4.11. Uobiqajene grexke
Osvrnuemo se na neke mogue grexke prilikom induktivne konstrukcije algoritama. Grexke prilikom izvoea dokaza indukcijom ve su razmotrene u ode ku 1.11. Sve te grexke ovde imaju svoje analogone. Na primer, qesto se zaborav a na bazu indukcije. U sluqaju rekurzivne procedure bazni sluqaj je od suxtinskog znaqaja, jer se kroz ega izlazi iz rekurzije. Druga qesta grexka je proxirivae rexea za n na rexee specijalnog, umesto proizvo nog sluqaja problema za n + 1. Nenamerna promena induktivne hipoteze je takoe qesta grexka. Demonstriraemo to na jednom primeru. Graf G je bipartitni ako se egov skup qvorova moe predstaviti kao disjunktna unija dva podskupa, tako da ne postoji grana izmeu dva proizvo na qvora iz istog poskupa. Za povezan bipartitni graf je ovakvo razlagae u disjunktnu uniju jednoznaqno, videti zadatak 6.22.
76
4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
Problem. Za zadati povezani neusmereni graf G ustanoviti da li je bipartitni, a ako jeste, pronai odgovarajue razlagae egovih qvorova u disjunktnu uniju. Pogrexno rexee: Uklaamo qvor v i razlaemo ostatak grafa indukcijom, ako je mogue. Prvi podskup zvaemo beli, a drugi crni. Ako je v povezan samo sa belim qvorovima, prik uqujemo ga crnom skupu, i obrnuto | ako je v povezan samo sa crnim qvorovima, prik uqujemo ga belom skupu. Ako je v povezan sa qvorovima iz oba podskupa, onda graf nije biparititan, jer je razlagae jednoznaqno. Osnovna grexka u ovom rexeu (a to je grexka koju smo nameravali da ilustrujemo) je u tome xto posle uklaaa qvora v graf ne mora da ostane povezan. Prema tome, mai primer problema nije isti kao polazni, pa se indukcija ne moe koristiti. Ako bismo uklonili qvor koji ne "razbija" graf, rexee bi bilo korektno.
4.12. Rezime
U ovom poglav u prikazano je vixe tehnika za konstrukciju algoritama, koje su ustvari varijante jednog istog pristupa. Nove tehnike i brojni primeri bie dati u narednim poglav ima. Najbo i naqin da se te tehnike savladaju je da se one koriste za rexavae problema. Prilikom rexavaa problema korisno je imati na umu sledee sugestije: • Princip indukcije koristi se da se ulaz za problem svede na jedan ili vixe maih. Ako se svoee moe uvek izvesti, a bazni sluqaj se moe rexiti, onda je algoritam definisan indukcijom, odnosno dobijen je rekurzivni algoritam. Osnovna ideja je da se paa skoncentrixe na smaivae problema, a ne na egovo direktno rexavae. • Jedan od najlakxih naqina da se smai problem je eliminacija nekih egovih elemenata, xto se moe pokuxati na vixe naqina. Pored eliminacije elemenata koji su oqigledno suvixni (kao u ode ku 4.3), mogue je spajae dva elementa u jedan, pronalaee elemenata koji se mogu obraditi na poseban naqin, ili uvoee novog elementa koji preuzima ulogu dva ili vixe polaznih elemenata (ode ak 5.5). • Veliqina problema moe se smaiti na vixe naqina. Meutim, ne dobija se svakom od tih redukcija algoritam iste efikasnosti. Zato je korisno razmotriti razliqite redoslede primene induktivne hipoteze. • Jedan od najefikasnijih naqina za smaivae veliqine problema je egova podela na dva ili vixe podjednakih delova. Dekompozicija je efikasna ako se problem moe podeliti, tako da se od rexea potproblema lako dobija rexee celog problema. Algoritmi zasnovani na dekompoziciji razmatrani su u ode cima 5.3, 5.4, 7.2, 7.4, 8.4, 8.5. • Prilikom svoea na mae potprobleme, treba teiti da potproblemi budu xto nezavisniji. Na primer, problem sortiraa moe se
ZADACI
77
svesti na pronalaee i uklaae najmaeg elementa; redosled ostalih ne zavisi od ukloenog elementa (videti ode ke 5.3,6.5). • Na kraju, sve nabrojane tehnike treba koristiti zajedno, kombinujui ih na razne naqine. Na primer, moe se koristiti dekompozicija sa pojaqavaem induktivne hipoteze, tako da se dobijeni potproblemi lakxe kombinuju (ode ak 7.4).
Zadaci
4.1. Konstruisati algoritam za izraqunavae vrednosti polinoma zasnovan na dekompoziciji. Koliki je broj sabiraa i mnoea potreban? 4.2. Razmotriti algoritam Bijekcija sa slike 4. Da li je mogue da skup S postane prazan na kraju izvrxavaa algoritma? Navesti takav primer, ili dokazati da se to ne moe desiti. 4.3. Xta je invarijanta pet e u prvoj while pet i algoritma Zvezda (slika 5)? 4.4. Dato je binarno stablo T . Konstruisati efikasan algoritam koji daje odgovor na pitae da li je T AVL stablo. 4.5. Unutraxi qvor v binarnog stabla je S-AVL qvor ako levo i desno podstablo imaju jednake visine. Konstruisati algoritam linearne sloenosti koji oznaqava sve SAVL qvorove datog binarnog stabla, qiji ni jedan potomak nije S-AVL qvor. 4.6. Za binarno stablo kaemo da je L-AVL stablo ako za svaki egov unutraxi qvor levo podstablo ima visinu za jedan veu od desnog. Konstruisati algoritam linearne sloenosti za proveru da li je dato stablo L-AVL stablo. 4.7. Konstruisati algoritam koji proverava da li su jednaka dva zadata binarna stabla. 4.8. Precizirati rexee problema ranca korixeem po a P ripada (slika 11). 4.9. Neka su date dve funkcije, f (x) i f (x), 0
0
00
f (x)
=
f(x0 ,h0 ),(x0 ,h0 ),...,(x0 ,h0 ) (x),
f 00 (x)
=
f(x00 ,h00 ),(x00 ,h00 ),...,(x00 ,h00 ) (x),
1
1
2
2
k
k
maksimumi dve grupe od po n/2 pravougaonih funkcija (videti ode ak 4.6); k, l ≤ n, h = h = 0. Funkcija f (x) (i sliqno f (x)) ima u intervalima [x , x ) konstantnu vrednost h , 0 ≤ i ≤ k, pri qemu se zbog udobnosti uzima da je x = x = −∞, h = h = 0, x = +∞. Konstruisati algoritam sloenosti O(n) za odreivae funkcije f (x) = max{f (x), f (x)}. 4.10. Modifikacija problema maksimum skupa pravougaonika: Umesto pravougaonika (L, D, V ) sa x-koordinatama levog L i desnog kraja D, odnosno visinom V , koji "lei" na x-osi, sada (L, D, V ) predstav a figuru dobijenu dodavaem "krova" (jednakokrakopravouglog trougla sa hipotenuzom duine D − L na goroj ivici pravougaonika) na pravougaonik. Zadatak ostaje isti | odrediti maksimum n ovakvih funkcija algoritmom sloenosti O(n log n). 4.11. Neka je x , x , . . . , x niz realnih (ne obavezno pozitivnih) brojeva. Konstruisati algoritam sloenosti O(n) za odreivae podniza x , x , . . . , x sa najveim moguim proizvodom, 1 ≤ i ≤ j ≤ n. Proizvod praznog podniza je po definiciji jednak 1. 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). 0 l
0
1
1
2
2
l
00
0 0
1
2
00 0
l
0 i
0 i+1
0 k
0 0
n
i
i+1
j
00 0
0
0 k+1
00
0 i
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 . Konstruisati algoritam sloenosti O(n ) koji rexava ovaj problem ako je stablo zadato listom 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 predstaviti K u obliku zbira nekih brojeva x , 1 ≤ i ≤ n, pri qemu se sabirci mogu ponav ati proizvo an broj puta. 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. Konstruisati algoritam koji ranac puni do vrha, i to predmetima sa najveim zbirom vrednosti; drugim reqima, odrediti nenegativne cele brojeve a , a , . . . , a takve da je P a k = K , a da suma P a v ima maksimalnu vrednost. Neka je dat skup prirodnih brojeva {x , x , . . . , x } i neka je S = P x . Kon4.18. struisati algoritam sloenosti O(nS) koji razlae ovaj skup u dva disjunktna podskupa sa jednakim sumama elemenata, ili utvruje da takvo razlagae nije mogue. 4.19. Na raspolagau nam je algoritam u obliku crne kutije (xto znaqi da ne znamo egove deta e) sa sledeim osobinama: za dati skup od n prirodnih brojeva i prirodni broj k, algoritam daje odgovor "da" ili "ne", zavisno od toga da li postoji podskup datih brojeva sa sumom jednakom k. Kako se moe odrediti podskup brojeva sa sumom k (ako postoji), koristei crnu kutiju O(n) puta? 4.20. Problem hanojskih kula je standardni primer netrivijalnog problema koji ima jednostavno rekurzivno rexee. Ukupno n diskova razliqite veliqine sloeni su na uspravni xtapi A, tako da im veliqine opadaju odozdo navixe. Pored toga, postoje i dva prazna xtapia B i C . Ci je premestiti sve diskove, jedan po jedan, na drugi xtapi (B ili C ), na sledei naqin. Diskovi se premextaju sa vrha jednog na vrh drugog xtapia, ali samo ako disk dolazi na disk vei od sebe (ili na prazan xtapi). Broj premextaa diskova treba da bude najmai mogui. (a) Konstruisati indukcijom algoritam za nalaee najkraeg niza poteza koji rexava problem hanojskih kula sa n diskova. (b) Koliko poteza traje izvrxavae algoritma? Formirati diferencnu jednaqinu za broj poteza i rexiti je. (c) Dokazati da je dobijeni broj poteza u (b) optimalan, odnosno da ne postoji algoritam koji rexava problem u maem broju poteza. 4.21. Razmotrimo sledeu varijantu problema hanojskih kula (zadatak 4.20). U poqetnom poloaju diskovi ne moraju vixe biti na jednom xtapiu. Mogu biti na proizvo an naqin rasporeeni na tri xtapia, uz uslov da im veliqine opadaju (odozdo navixe) na svakom xtapiu. Ci koji treba postii ostaje isti, da se svi diskovi premeste na zadati xtapi (uz ista ograniqea kao i u osnovnom problemu), koristei xto je mae poteza mogue. Konstruisati algoritam za odreivae najkraeg niza poteza koji rexava ovu varijantu problema hanojskih kula sa n diskova. i
2
1
2
j
n
i
1
2
n
i
n i=1
i i
n i=1
1
2
n
i i
1
2
n
n i=1
i
Glava 5
Algoritmi za rad sa nizovima i skupovima 5.1. Uvod
U ovom poglav u baviemo se problemima za koje su ulazi konaqni nizovi ili skupovi. Razlika izmeu nizova i skupova je u tome xto je kod nizova bitan redosled elemenata, a kod skupova nije. Takoe, kod skupova se pretpostav a da se jedan isti elemenat pojav uje najvixe jednom, a kod nizova takve pretpostavke nema. Poxto su ulazni podaci obiqno dati nekim redom, moemo ih smatrati nizom. Ipak, ulaz se moe smatrati skupom ako nas redosled elemenata ne zanima. Ako se drugaqije ne naglasi, u ovom poglav u se pretpostav a da je predstava ulaza (ulaznih podataka) vektor zadate veliqine. Najqexe se pretpostav a da su to elementi potpuno ureenog skupa (npr. celi ili realni brojevi), tako da se mogu uporeivati. Razmatraju se pitaa kao xto su maksimalnost, redosled, specijalni podnizovi, kompresija podataka i uporeivae nizova. Razmatra se vixe algoritama sa xirokom primenom. Navode se novi primeri metodologije konstrukcije algoritama uvedene u poglav u 4, ali i neki vani algoritmi. To su vani i univerzalno primen ivi algoritmi (na primer binarna pretraga i sortirae), vani algoritmi sa primenom u specifiqnim oblastima (kompresija podataka, uporeivae nizova), kao i ne mnogo vani algoritmi koji ilustruju vane tehnike (nalaee dva najvea broja u skupu, problem mucavog podniza). Prvi primer u ovom poglav u je binarna pretraga | fundamentalni i elegantan algoritam koji se pojav uje u mnogo oblika i na koga se nailazi u mnogim situacijama. Zatim se prelazi na sortirae | jedan od najxire prouqavanih problema, rangovske statistike, kompresiju podataka, dva problema povezana sa obradom teksta i probabilistiqke algoritme.
5.2. Binarna pretraga i varijacije
Binarna pretraga je za oblast algoritama ono xto je toqak za mehanizme: ona je jednostavna, elegantna, neizmerno vana, i otkrivana je vixe puta. Osnovna ideja binarne pretrage je podela prostora na dva priblino jednaka dela postav aem samo jednog pitaa. U ovom ode ku razmatra se nekoliko varijacija binarne pretrage. 79
80
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
5.2.1. Qista binarna pretraga. Problem. Neka je x , x , . . . , x niz realnih brojeva takav da je x ≤ x ≤ · · · ≤ x . Za zadati realni broj z treba ustanoviti da li se z pojav uje u nizu, 1
2
n
1
2
a ako je odgovor "da", potrebno je pronai indeks i takav da je x = z. Zbog jednostavnosti, traimo samo jedan indeks i takav da je z = x . U opxtem sluqaju ci moe da bude pronalaee svih takvih indeksa, najmaeg 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 niza. Pronalaee z u prvoj ili drugoj polovini niza je problem veliqine n/2, koji se rexava rekurzivno. Bazni sluqaj n = 1 rexava se neposrednim uporeivaem z sa elementom. Algoritam je dat na slici 1. Algoritam Ulaz: (niz od brojeva, ureenih neopadajue) i (broj koji se trai). Izlaz: (indeks takav da je , ili ako takav indeks ne postoji). n
i
i
n/2+1
Binarna Pretraga(X, n, z);
X
P oz
n
z
i
X[i] = z
0
begin
P oz := N adji(z, 1, n); end function Nadji(z, Levi, Desni) : integer begin if Levi = Desni then if X[Levi] = z then N adji := Levi else N adji := 0 else Srednji = d(Levi + Desni)/2e; if z < X[Srednji] then N adji = N adji(z, Levi, Srednji − 1) else N adji = N adji(z, Srednji, Desni) end
Ris. 1. Binarna pretraga.
Sloenost. Posle svakog uporeivaa opseg moguih indeksa se polovi, pa je potreban broj uporeivaa za pronalaee zadatog broja u nizu veliqine n O(log n). Ova varijanta binarne pretrage odlae proveru jednakosti do samog kraja. Alternativa je provera jednakosti sa z u svakom koraku. Problem sa prikazanom varijantom je u tome xto se pretraga ne moe zavrxiti
5.2. BINARNA PRETRAGA I VARIJACIJE
81
pre nego xto se opseg za pretragu suzi na samo jedan broj; prednost joj je pak da se u svakom koraku vrxi samo jedno uporeivae. Ovakva pretraga je zbog toga obiqno bra. Iako je jednostavnije napraviti rekurzivni program, lako je ovaj program prevesti u nerekurzivni. Binarna pretraga nije tako efikasna za male vrednosti n, pa je tada bo e zadati niz pretraiti linearno, qlan po qlan. Sledei problem svodi se na binarnu pretragu. Problem. Za zadati rastue ureeni niz celih brojeva a , a , . . . , a utvrditi da li postoji indeks i, takav da je a = i. Zaista, niz x = a − i je neopadajui (jer je x − x = a − a − 1 ≥ 0), a uslov a = i je ekvivalentan uslovu x = 0. Prema tome, zadati problem rexava se binarnom pretragom niza x , u kome se trai broj z = 0. 5.2.2. Binarna pretraga cikliqki ureenog niza. Za niz x , x , ..., x kae se da je cikliqki ureen ako vae nejednakosti 1
2
n
i
i
i
i+1
i
i
i+1
i
i
i
1
2
n
xi < xi+1 < · · · < xn < x1 < · · · < xi−1 ,
gde je x najmai elemenat niza. Problem. Za zadati cikliqki ureeni niz pronai poziciju minimalnog elementa niza (zbog jednostavnosti moe se pretpostaviti da je ta pozicija jedinstvena). Da bismo pronaxli minimalni elemenat x u nizu, koristimo ideju binarne pretrage da jednim uporeivaem eliminixeno polovinu niza. Uzmimo proizvo na dva broja x i x takva da je k < m. Ako je x < x , onda i ne moe biti u intervalu k < i ≤ m, jer je x najmai elemenat niza (u tom sluqaju bilo bi x < x < x | suprotno pretpostavci da je x < x ). U protivnom, ako je x > x , onda i mora biti u intervalu k < i ≤ m, jer je tada monotonost niza prekinuta negde u intervalu indeksa [k, m], videti sliku 2. Prema tome, jednim uporeivaem moe se eliminisati mnogo elemenata. Odgovarajuim izborom k i m, i se moe odrediti pomou O(log n) uporeivaa, videti algoritam na slici 3. Invarijanta glavne pet e algoritma je uslov da se i uvek nalazi u intervalu [Levi, Desni]. 5.2.3. Binarna pretraga niza nepoznate duine. Posmatrajmo varijantu problema pretrage kad se zadati broj z trai u ureenom nizu nepoznate duine. Da bi se problem sveo na ve rexen, potrebno je pronai bar jedan indeks i takav da je x > z: tada se moe prei na binarnu pretragu opsega indeksa od 1 do i. Moe se postupiti na sledei naqin. Najpre se z uporeuje sa x . Ako je z ≤ x , onda z moe biti jednako samo broju x . Pretpostavimo da znamo indeks j takav da je z > x . Posle uporeivaa z sa x postoje dve mogunosti. Ako je z ≤ x , onda znamo da je x < z ≤ x , pa se z moe pronai pomou i
i
k
m
k
m
k
m
i
i
k
m
k
m
i
1
1
1
j
2j
2j
j
2j
82
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA xj
6
s
s
s g
s
s
g s
s
s
s
s
j
1
m
i−1 i
k
n
Ris. 2. Cikliqki ureen niz | ilustracija.
Algoritam Ulaz: (vektor sa cikliqki ureenim nizom od razliqitih brojeva). Izlaz: (indeks minimalnog elementa u ). Cikl Binarna Pretraga(X, n);
X
n
poz
X
begin
poz := c N adji(1, n); end function c Nadji(Levi, Desni) : integer begin if Levi = Desni then c N adji := Levi else Srednji = b(Levi + Desni)/2c; if X[Srednji] < X[Desni] then c N adji = c N adji(Levi, Srednji) else c N adji = c N adji(Srednji + 1, Desni) end
Ris. 3. Binarna pretraga cikliqki ureenog niza.
uporeivaa. Ako je pak z > x , onda je prostor za pretraivanje udvostruqen, i treba nastaviti (indukcijom) tako xto se j zameni sa 2j. Pretpostavimo da je i najmai indeks takav da je z ≤ x . Tada je dovo no O(log i) uporeivaa da se (udvostruqavaem) pronae takvo x koje je vee ili jednako od z, i novih O(log i) uporeivaa da se pronae z. Isti algoritam moe se upotrebiti i ako je duina niza poznata, ali oqekujemo da je indeks i vrlo mali. Da bi ovaj algoritam bio bo i od obiqne binarne pretrage, potrebno je da bude priblino 2 log i < log n, odnosno √ i < n.
O(log2 j)
2j
i
j
2
2
2
2
5.2. BINARNA PRETRAGA I VARIJACIJE
83
5.2.4. Problem mucavog podniza. Princip binarne pretrage moe se iskoristiti i u problemima koji na prvi pogled nemaju veze sa binarnom pretragom. Neka su A = a a . . . a i B = b b . . . b dva niza znakova iz konaqnog alfabeta i m ≤ n. Kae se da je B podniz A ako postoje indeksi i < i < · · · < i takvi da je b = a za sve indekse j, 1 ≤ j ≤ m, odnosno ako se niz B moe "uklopiti" u niz A. Lako je ustanoviti da li je B podniz niza A: u nizu A trai se prva pojava znaka b , zatim od te pozicije da e prva pojava znaka b , itd. Ispravnost ovog algoritma lako se dokazuje indukcijom. Poxto se elementi oba niza prolaze taqno po jednom, vremenska sloenost algoritma je O(m + n). Za zadati niz B, neka B oznaqava niz u kome se redom svaki znak niza B ponav a i puta. Na primer, ako je B = xyzzx, onda je B = xxxyyyzzzzzzxxx. Problem. Data su dva niza A i B. Odrediti maksimalnu vrednost i takvu da je B podniz niza A. Ovaj problem moe se nazvati problem mucavog podniza. Iako na prvi pogled teak, on se lako moe rexiti pomou binarne pretrage. Za svaku zadatu vrednost i lako se konstruixe niz B , i proverava da li je B podniz niza A. Pored toga, ako je B podniz A, onda je za svako i, 1 ≤ i ≤ j , B podniz A. Najvea vrednost za i koju treba razmatrati manja je ili jednaka od n/m, jer bi u protivnom niz B bio dui od niza A. Dakle, moe se primeniti binarna pretraga. Poqiemo sa i = dn/(2m)e i proveravamo da li je B podniz A. Zatim nastav amo sa binarnom pretragom, 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 nizova razmatraju se i u ode ku 5.7. Rexee ovog problema lako je uopxtiti. Pretpostavimo da ako broj i zadovo ava uslov P (i), onda i svi brojevi j, 1 ≤ j ≤ i zadovo avaju taj uslov. Ako traimo maksimalnu vrednost i koja zadovo ava uslov P (i), dovo no je da imamo algoritam koji utvruje da li zadato i zadovo ava taj uslov. Tada se problem rexava binarnom pretragom moguih vrednosti za i. Ako se ne zna gora granica za i, moe se iskoristiti postupak sa udvostruqavaem: poqie se sa i = 1, a zatim se i udvostruqava, sve dok se ne dobije neka gornja granica. Rezultujui algoritam, iako efikasan, qesto nije optimalan, i faktor log n iz izraza za vremensku sloenost moe se eliminisati (kao u sluqaju problema mucavog podniza). 5.2.5. Numeriqko rexavae jednaqina. Postupak binarne pretrage sliqan je numeriqkom rexavau jednaqine f (x) = 0 na intervalu [a, b] metodom bisekcije, pri qemu je npr. f (a)f (b) < 0 i funkcija f (x) je neprekidna. Ci je nai rexee jednaqine sa zadatom taqnoxu. Poxto je funkcija neprekidna, u intervalu [a, b] jednaqina ima bar jedno rexee. Izraqunava se vrednost funkcije u taqki x = (a+b)/2. Ako je f (x ) = 0 (u granicama zadate taqnosti), onda je rexee pronaeno. U protivnom, 1 2
1
2
m
n
j
1 2
m
ij
1
2
i
3
i
i
i
j
i
i
i
2
1
1
84
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
funkcija u krajevima jednog od podintervala [a, x ] ili [x , b] ima vrednosti suprotnog znaka, pa u tom podintervalu postoji bar jedno rexee jednaqine. Posle k koraka dolazi se do intervala duine (b − a)/2 koji sadri rexee. Sa polov eem intervala nastav a se do postizaa zahtevane taqnosti. 5.2.6. Interpolaciona pretraga. U okviru binarne pretrage prostor pretrage se svaki put polovi, xto garantuje logaritamsku vremensku sloenost. Meutim, ako se u toku pretrage naie na vrednost vrlo blisku traenom broju z, izgleda razumno da se pretraga usredsredi na "okolinu" tog indeksa umesto da se nastavi sa polov eem naslepo. Specijalno, ako je vrednost z vrlo mala, moe se zapoqeti sa pretragom negde na poqetku niza umesto od sredeg indeksa. Posmatrajmo naqin na koji otvaramo kigu kad traimo neku stranicu. Neka, na primer, u kizi od 800 strana traimo stranu 200. Ona se nalazi oko prve qetvrtine kige, pa mi tu qienicu koristimo kad otvaramo kigu. Verovatno je da neemo odmah pogoditi stranu 200; pretpostavimo da smo kigu otvorili na strani 250. Sada je pretraga suena na opseg od 250 strana, a traena strana je na oko 4/5 opsega. Mi pokuxavamo da otvorimo kigu na oko petine pre kraja opsega. Proces nastav amo dok se ne pribliimo dovo no strani 200, posle qega do e dolazimo okreui stranu po stranu. Opisani postupak je upravo suxtina interpolacione pretrage. Umesto da polovimo prostor pretrage, mi ga delimo tako da bude najvea "verovatnoa" uspeha. Odnos u kome se opseg indeksa deli odreuje se interpolacijom, xto je ilustrovano na slici 4. Prvom interpolacijom dobija se indeks 6; ispostav a da je X[6] < z. Sledea interpolacija u intervalu indeksa [6, 17] dovodi do rexea X[7]. Algoritam, zajedno sa izrazom po kome se vrxi interpolacija, dat je na slici 5. 1
1
k
b
z
1
2
3
4
5
6
b
7
8
9 10 11 12 13 14 15 16 17
Ris. 4. Interpolaciona pretraga | ilustracija.
5.3. SORTIRA E
Algoritam Ulaz: (niz od neopadajue ureenih brojeva) i (broj koji se trai). Izlaz: (indeks takav da je , ili ako takav indeks ne postoji).
85
Interpolaciona Pretraga(X, n, z);
X
n
P oz
z
i
X[i] = z
begin
0
neuspexna pretraga}
if z < X[1] or z > X[n] then P oz := 0 { else P oz := i N adji(z, 1, n); end function i Nadji(z, Levi, Desni) : integer begin if X[Levi] = z then i N adji := Levi
else if Levi = Desni or X[Levi] = X[Desni] then i N adji := 0 else
» ¼ (z − X[Levi])(Desni − Levi) Srednji := Levi + ; X[Desni] − X[Levi] if z < X[Srednji] then i N adji = i N adji(z, Levi, Srednji − 1) else i N adji = i N adji(z, Srednji, Desni)
end
Ris. 5. Interpolaciona pretraga.
Sloenost. Efikasnost interpolacione pretrage ne zavisi samo od duine niza, nego i od svih egovih elemenata, odnosno od kompletnog ulaza. Postoje ulazi za koje interpolaciona pretraga proverava praktiqno svaki qlan niza (videti zadatak 5.5). S druge strane, interpolaciona pretraga je vrlo efikasna za ulaze sa priblino uniformno raspode enim elementima (odnosno ako su taqke (i, x ) grupisane u okolini prave; primer sa stranama u kizi oqigledno spada u ovu kategoriju). Pokazuje se da je sredi broj uporeivaa u toku interpolacione pretrage (usredavae po svim moguim nizovima) jednak O(log log n). Ipak, interpolaciona pretraga nije mnogo bo a od obiqne binarne pretrage iz dva razloga. Najpre, sem za jako velike vrednosti n, ve je log n mala vrednost, pa en logaritam nije mnogo mai. Drugo, kod izbora narednog indeksa u toku interpolacione pretrage potrebno je izvrxiti nexto komplikovanije aritmetiqke operacije. i
2
5.3. Sortirae
Sortirae je jedan od najxire prouqavanih problema u raqunarstvu. Sortirae je osnova za mnoge algoritme i troxi veliki deo raqunarskog vremena
86
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
u mnogim tipiqnim aplikacijama. Postoje mnoge verzije problema sortiraa, kao i desetine algoritama za sortirae. Ovde emo razmotriti samo nekoliko poznatijih algoritama. Problem. Datih n brojeva x , x , . . . , x treba urediti u neopadajui niz. Drugim reqima, treba pronai niz razliqitih indeksa 1 ≤ i , i , . . . i ≤ n takvih da je x ≤ x ≤ · · · ≤ x . Zbog jednostavnosti, ako se ne naglasi drugaqije, pretpostav amo da su brojevi x razliqiti. Svi opisani algoritmi rade ispravno i sa brojevima koji nisu razliqiti. Za algoritam sortiraa kae se da je u mestu ako se ne koristi dopunski memorijski prostor (osim onog u kome je smexten ulazni niz). 1
2
n
1
i1
i2
2
n
in
i
5.3.1. Sortirae razvrstavaem i sortirae vixestrukim razvrstavaem. Najjednostavniji postupak sortiraa sastoji se u tome da se obezbedi dovo an broj lokacija, i da se onda svaki elemenat smesti na svoju
lokaciju. Taj postupak zove se sortirae razvrstavaem. Ako se, na primer, sortiraju pisma prema odredixtima, onda je dovo no obezbediti jednu pregradu za svako odredixte, i sortirae je vrlo efikasno. Ali ako pisma treba sortirati prema petocifrenom poxtanskom broju, onda ovaj metod zahteva oko 100000 pregrada, xto postupak qini nepraktiqnim. Prema tome, sortirae razvrstavaem radi dobro ako su elementi iz malog, jednostavnog opsega, koji je unapred poznat. Prelazimo na deta niji opis ovog algoritma. Neka je dato n elemenata, koji su celi brojevi iz opsega od 1 do m ≥ n. Rezervixe se m lokacija, a onda se za svako i broj x stav a na lokaciju x koja odgovara egovoj vrednosti. Posle toga se pregledaju sve lokacije i iz ih se redom pokupe elementi. Sloenost ovog jednostavnog algoritma je dakle O(m + n). Ako je m = O(n), dobijamo algoritam za sortirae linerne sloenosti. S druge strane, ako je m veliko u odnosu na n (kao u sluqaju poxtanskih brojeva), onda je i O(m) takoe veliko. Pored toga, algoritam zahteva memoriju veliqine O(m), xto je jox vei problem za velike m. Prirodno uopxtee ove ideje je sortirae vixestrukim razvrstavaem. Razmotrimo jox jednom primer sa poxtanskim brojevima. Sortirae razvrstavaem u ovom sluqaju nije pogodno, jer je preveliki opseg moguih poxtanskih brojeva. Kako smaiti potreban opseg? Primeniemo indukciju po opsegu na sledei naqin. Najpre koristimo 10 pregrada i sortiramo pisma prema prvoj cifri poxtanskog broja. Svaka pregrada sada pokriva 10000 razliqitih poxtanskih brojeva (odreenih sa preostale qetiri cifre poxtanskog broja). Broj operacija za ovu etapu je O(n). Na kraju prve etape imamo 10 pregrada, od kojih svaka odgovara maem opsegu. Da e se problem za svaku pregradu rexava indukcijom. Poxto se opseg posle svake etape smauje za faktor 10, i poxto poxtanski brojevi imaju pet cifara, dovo no je pet etapa. Kad se sadraji pregrada sortiraju, lako ih je objediniti u sortiranu (ureenu) listu. i
i
5.3. SORTIRA E
87
Razmotrimo sada drugu varijantu iste ideje. Napomenimo da se opseg moe podeliti na bilo koji odgovarajui naqin. U primeru sa poxtanskim brojevima podela je izvrxena u skladu sa dekadnim prikazom poxtanskih brojeva. Ako su elementi stringovi koje treba sortirati leksikografski, moemo ih uporeivati znak po znak, pa se dobija leksikografsko sortirae. Razmotrena verzija sortiraa vixestrukim razvrstavaem (cifre se prolaze sleva udesno) poznata je kao sortirae obratnim vixestrukim razvrstavaem . Rekurzivna realizacija sortiraa obratnim vixestrukim razvrstavaem zahteva pomone lokacije (oko 50 pregrada u primeru sa poxtanskim brojevima; svaki nivo rekurzije ima svoje pregrade). Drugi naqin realizacije sortiraa vixestrukim razvrstavaema zasniva se na primeni indukcije obrnutim redosledom: sortirae se radi zdesna ulevo, polazei od najniih umesto od najvixih cifara. Pretpostav amo da su elementi veliki brojevi, predstavljeni sa k cifara u sistemu sa osnovom d (cifre su iz opsega od 0 do d − 1). Induktivna hipoteza je vrlo prirodna. Induktivna hipoteza. Umemo da sortiramo elemente sa mae od k cifara. Razlika izmeu ovog metoda i sortiraa obratnim vixestrukim razvrstavaem je u naqinu na koji se proxiruje hipoteza (ideja primene induktivne hipoteze obrnutim redosledom sliqna je kao kod Hornerove xeme, ode ak 4.2). Kod datih brojeva sa k cifara mi najpre ignorixemo najvixu (prvu) cifru i sortiramo brojeve prema ostatku cifara indukcijom. Tako dobijamo listu elemenata sortiranih prema najniih k −1 cifara. Zatim prolazimo jox jednom kroz sve elemente, i razvrstavamo ih prema najvixoj cifri u d pregrada. Konaqno, objediujemo redom sadraje pregrada. Ovaj algoritam zove se sortirae direktnim vixestrukim razvrstavaem. Pokazaemo da su elementi na kraju sortirani po svih k cifara. Tvrdimo da su dva elementa svrstana u razliqite pregrade u ispravnom poretku. Za to nam nije potrebna induktivna hipoteza, jer je najvixa cifra prvog od ih vea od najvixe cifre drugog. S druge strane, ako dva elementa imaju iste najvixe cifre, onda su oni prema induktivnoj hipotezi dovedeni u ispravan redosled pre posledeg koraka. Bitno je da elementi stav eni u istu pregradu ostaju u istom redosledu kao i pre razvrstavaa. Ovo se moe postii upotrebom liste za svaku pregradu i objediavaem d lista na kraju svake etape u jednu globalnu listu od svih elemenata (sortiranih prema i najniih cifara). Algoritam je prikazan na slici 6. Sloenost. Potrebno je n koraka za kopirae elemenata u globalnu listu GL, i d koraka za inicijalizaciju lista Q[i]. U glavnoj pet i algoritma, koja se izvrxava k puta, svaki elemenat se vadi iz globalne i stav a u neku od lista Q[i]. Na kraju se sve liste Q[i] ponovo objediavaju u GL. Ukupna vremenska sloenost algoritma je O(nk).
88
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
Algoritam Ulaz: (niz od celih nenegativnih brojeva sa po cifara). Izlaz: (sortirani niz). DVR sort(X, n, k);
X
n
k
X
begin
end
Pretpostav amo da su na poqetku svi elementi u globalnoj listi GL {GL se koristi zbog jednostavnosti; lista se moe realizovati u X} for i := 0 to d − 1 do {d je broj moguih cifara; d = 10 u dekadnom sluqaju} inicijalizovati listu Q[i] kao praznu listu; for i := k downto 1 do while GL nije prazna do {razvrstavae po i-toj cifri} skini x iz GL; {x je prvi elemenat sa liste} c := i{ta cifra x; {gledano sleva udesno} ubaci x u Q[c]; for t := 0 to d − 1 do {objediavae lokalnih lista} uk uqi Q[t] u GL; {dodavae na kraj liste} for i := 1 to n do {prepisivae elemenata iz GL u niz x} skini X[i] iz GL
Ris. 6. Sortirae direktnim vixestrukim razvrstavaem. U nastavku emo razmatrati tehnike sortiraa koje koriste uporeivae elemenata, ne uzimajui u obzir ihovu strukturu. Radi se dakle o opxtijim algoritmima, koji za elemente pretpostav aju samo da se mogu uporeivati. 5.3.2. Sortirae umetaem i sortirae izborom. Koristiemo direktnu indukciju. Pretpostavimo da umemo da sortiramo n − 1 elemenata i da je dato n elemenata. Posle sortiraa prvih n − 1 elemenata, n-ti elemenat se umee na mesto koje mu pripada, tako xto se pregleda n − 1 sortiranih brojeva, do pronalaea pravog mesta za umetae. Ovakav postupak zove se sortirae umetaem. On je jednostavan i efikasan samo za male vrednosti n. U najgorem sluqaju n-ti broj uporeuje se sa svih prethodnih n − 1 brojeva. Ukupan broj uporeivaa pri sortirau n elemenata moe da bude dakle 1 + 2 + · · · + n = n(n − 1)/2 = O(n ). Pored toga, umetae n-tog broja uk uquje pomerae ostalih brojeva. U najgorem sluqaju u n-tom koraku premexta se n−1 brojeva, pa je i broj premextaa (kopiraa) O(n ). Sortirae umetaem moe se pobo xati smextaem elemenata u vektor i korixeem binarne pretrage n − 1 sortiranih brojeva da bi se pronaxlo mesto za umetae. Pretraga se sastoji od O(log n) uporeivaa po umetau, pa je ukupan broj uporeivaa tada O(n log n). Meutim, broj premextaa podataka ostaje nepromeen, pa je sloenost algoritma i da e kvadratna. 2
2
5.3. SORTIRA E
89
Induktivni pristup moe se pobo xati izborom posebnog n-tog broja. Najvei broj je dobar izbor, jer se zna gde mu je mesto | na kraju niza. Algoritam se sastoji od izbora najveeg broja i egovog postav aa na pravo mesto zamenom sa brojem koji je trenutno na tom mestu; posle toga se rekurzivno sortira ostatak brojeva. Ovaj algoritam zove se sortirae izborom. egova prednost nad sortiraem umetaem je u tome xto koristi samo n − 1 zamena brojeva, u odnosu na O(n ) kopiraa u najgorem sluqaju kod sortiraa umetaem. S druge strane, poxto je potrebno n − 1 uporeivae da se pronae najvei elemenat (nalaee najveeg broja razmatra se u ode ku 5.4.1), ukupan broj uporeivaa je uvek O(n ), dok je kod sortiraa umetaem sa binarnom pretragom potrebno samo O(n log n) uporeivaa. Za efikasno umetae i izbor mogu se koristiti uravnoteena stabla (videti poglav e 3). Ako se, na primer, iskoriste AVL stabla, svako umetae zahteva O(log n) koraka. Iwitavae svih brojeva iz AVL stabla u sortiranom redosledu moe se izvesti u O(n) koraka rekurzivnom procedurom koja iwitava sve elemente levog podstabla, pa koren, pa sve elemente desnog podstabla. Ako umemo da formiramo AVL stablo za n−1 brojeva, onda je potrebno samo umetnuti n-ti broj, odnosno O(log n) koraka. Ukupno je dakle potrebno O(n log n) koraka za umetae n brojeva u prazno AVL stablo i O(n) koraka za ihovo iwitavae u sortiranom redosledu. Za velike n ovo je mnogo efikasnije i od sortiraa umetaem i od sortiraa izborom, ali zahteva vixe prostora za smextae pokazivaqa. Ovaj algoritam sortiraa nije u mestu, komplikovan je, i nije tako dobar kao algoritmi koji emo razmotriti. 5.3.3. Sortirae objediavaem. Efikasnost sortiraa umetaem moe se pobo xati na sledei naqin. Za vreme potrebno za pregledae ve sortiranih brojeva i pronalaee mesta za umetae jednog broja, mogu se nai mesta za vixe brojeva. Ova ideja je ve korixena u ode ku 4.6. Dva sortirana niza mogu se objediniti u sortirani niz jednim prolazom. Objediavae se vrxi tako xto se brojevi iz drugog niza razmatraju redom: trai se mesto u prvom nizu za najmai broj, pa za sledei itd. Preciznije, oznaqimo nizove sa a , a , . . . , a , odnosno b , b , . . . , b , i pretpostavimo da su oba niza sortirana u rastuem poretku. Elementi prvog niza se pregledaju dok se ne pronae mesto za b , pa se umee b . Zatim se nastav a sa pregledaem od te pozicije da e, dok se ne pronae mesto za b , itd. Poxto su brojevi u drugom nizu sortirani, nema potrebe za vraaem u prvom nizu. Ukupan broj uporeivaa u najgorem sluqaju jednak je zbiru duina dva niza. Problem su premextaa: neefikasno je premextati elemente pri svakom umetau, jer se tada elementi moraju premextati vixe puta. Umesto toga, poxto objediavae daje jedan po jedan elemenat u sortiranom redosledu, elemente kopiramo u privremeni niz; svaki elemenat se kopira taqno jednom. Ukupno je za objediavae dva sortirana niza duina n i m potrebno O(n + m) uporeivaa i premextaa podataka. Pretpostav a se da je raspoloiv memorijski prostor za pomoni niz. 2
2
1
2
n
1
1
2
m
1
2
90
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
Opisani postupak objediavaa moe se iskoristiti kao osnova za algoritam sortiraa zasnovan na dekompoziciji, poznat kao sortirae objediavaem. Algoritam radi na sledei naqin. Najpre se niz podeli na dva jednaka ili priblino jednaka dela (ako mu je duina neparna). Zatim se oba dela rekurzivno sortiraju. Na kraju se sortirani delovi objediavaju u jedan sortirani niz na prethodno opisani naqin. Deta nije je algoritam prikazan na slici 7, a primer egovog izvrxavaa u tabeli 1 (kopiraa nisu prikazana). Sloenost. Neka je T (n) broj uporeivaa potrebnih za sortirae objediavaem u najgorem sluqaju. Pretpostavimo zbog jednostavnosti da je n stepen dvojke. Da bi se izraqunalo T (n), treba rexiti sledeu diferencnu jednaqinu: T (2n) = 2T (n) + cn, T (2) = 1. eno rexee je T (n) = O(n log n) (videti poglav e 2), xto je asimptotski bolje od O(n ), vremenske sloenosti sortiraa umetaem i sortiraa izborom. 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 mestu. 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 2
6 2
2 6
2
5
1
2
8
5
5 6
8 8
5
6
10
9
9
10
1 8
9 9
12
1
1 10 10
12 12 12
15
7
7
15
3
7
3 9
4 10
3
13
3 13
13 15
7 11
11 12
4
11
4
11
4 13 13
11 14 14
16
14
14 14 15 15
16 16 16 16
Tablica 1. Primer sortiraa objediavaem. Prva vrsta je 1
2
3
4
5
6
7
8
ulazni niz. U svakoj vrsti prikazani su samo brojevi sa kojima se trenutno radi.
5.3. SORTIRA E
Algoritam Ulaz: (niz od brojeva). Izlaz: (sortirani niz).
Sort Objed(X, n);
X
n
X
begin
M sort(1, n) end procedure M Sort(Levi, Desni); begin if Desni − Levi = 1 then
provera koja nije neophodna, ali qini program efikasnijim}
{
if X[Levi] > X[Desni] then zameni (X[Levi], X[Desni])
else if Levi 6= Desni then Srednji := d(Levi + Desni)/2e; M Sort(Levi, Srednji − 1); M Sort(Srednji, Desni);
sada se dva sortirana dela niza objediavaju} pokazivaq na levu polovinu niza} j := Srednji; {pokazivaq na desnu polovinu niza} k := 0; {pokazivaq na pomoni vektor P om} {
i := Levi; {
while (i ≤ Srednji − 1) and (j ≤ Desni) do k := k + 1; if X[i] ≤ X[j] then P om[k] := X[i]; i := i + 1 else P om[k] := X[j]; j := j + 1 if j > Desni then
kopirae ostatka leve polovine na kraj vektora P om} ako je i ≥ Srednji onda je desna strana ve na svom mestu}
{ {
for t := 0 to Srednji − 1 − i do
X[Desni − t] := X[Srednji − 1 − t];
kopirae pomonog vektora P om nazad u X}
{
for t := 0 to k − 1 do
X[Levi + t] := P om[t + 1] end
Ris. 7. Sortirae objediavaem.
91
92
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
dva priblino jednaka potproblema, reximo svaki od ih nezavisno i ihova rexea kombinujemo za linearno vreme O(n), dobijamo algoritam sloenosti O(n log n). Nedostatak sortiraa objediavaem je potreba za dopunskom memorijom, jer se prilikom objediavaa ne moe predvideti koji e elemenat gde zavrxiti. Moe li se dekompozicija primeniti na drugi naqin, tako da se poloaji elemenata mogu predvideti? Ideja sortiraa razdvajaem je da se glavnina vremena utroxi na fazu podele, a vrlo mali deo na objediavae. Pretpostavimo da znamo broj x, takav da je pola elemenata niza mae ili jednako, a pola vee od x. Broj x moe se uporediti sa svim elementima niza (n − 1 uporeivae) i time ih podeliti u dve grupe, prema rezultatu uporeivaa. Poxto dve grupe imaju isti broj elemenata, jedna od ih se moe smestiti u prvu, a druga u drugu polovinu niza. Kao xto emo odmah videti, ovo razdvajae moe se izvrxiti bez dopunskog memorijskog prostora; to je faza podele. Zatim se oba podniza rekurzivno sortiraju. Faza objediavaa je trivijalna, jer oba dela zauzimaju svoja mesta u nizu. Prema tome, nije potreban dopunski memorijski prostor. Pri opisanoj konstrukciji pretpostav eno je da je vrednost x poznata, xto obiqno nije sluqaj. Lako se uvia da isti algoritam dobro radi bez obzira na to koji se broj koristi za razdvajae. Broj x je tzv. pivot. Ci je razdvojiti elemente niza na dva dela, jedan sa brojevima maim ili jednakim, a drugi sa brojevima veim od pivota. Razdvajae (particija) se moe se ostvariti pomou sledeeg algoritma. Koriste se dva pokazivaqa na niz, L i D. Na poqetku L pokazuje na levi, a D na desni kraj niza. Pokazivaqi se "pomeraju" jedan prema drugom. Sledea induktivna hipoteza (tj. invarijanta pet e) garantuje ispravnost razdvajaa. Induktivna hipoteza. U koraku k algoritma vai pivot ≥ x za sve indekse i < L i pivot < x za sve indekse j > D. Hipoteza je trivijalno ispuena na poqetku, jer ni jedno i, odnosno j, ne zadovo avaju navedene uslove. Ci je u koraku k + 1 pomeriti L udesno, ili D ulevo, tako da hipoteza i da e bude taqna. U trenutku kad se desi L = D, razdvajae je skoro zavrxeno, izuzev eventualno elementa x , na xta emo se kasnije vratiti. Pretpostavimo da je L < D. Postoje dve mogunosti. Ako je bilo x ≤ pivot bilo x > pivot, odgovarajui pokazivaq moe se pomeriti, tako da hipoteza i da e bude zadovo ena. U protivnom je x > pivot i x ≤ pivot. Tada zameujemo x sa x i pomeramo oba pokazivaqa da e prema unutra. U oba sluqaja imamo pomerae bar jednog pokazivaqa. Prema tome, pokazivaqi e se u jednom trenutku susresti, i ci je postignut. Ostaje problem izbora dobrog pivota i preciziraa posledeg koraka algoritma kad se pokazivaqi sretnu. Algoritmi zasnovani na dekompoziciji najbo e rade kad delovi imaju priblino iste veliqine, xto sugerixe da xto je pivot blii sredini, to e algoritam biti efikasniji. Mogue je nai medijanu niza (o tome e biti reqi u sledeem ode ku), ali to nije vredno i
j
L
L
L
D
D
L
D
5.3. SORTIRA E
93
truda. Kao xto emo videti iz analize algoritma, izbor sluqajnog elementa niza je dobro rexee. Ako je polazni niz dobro ispreturan, onda se za pivot moe uzeti prvi elemenat niza. Zbog jednostavnosti je u algoritmu na slici 8 upravo tako i uraeno. Ulaz: (niz), Izlaz: i
function Razdvajanje(X, Levi, Desni);
(leva granica niza) i Desni (desna granica niza). , takav indeks da je X[i] ≤ X[S] za sve i ≤ S i X[j] > X[S] za sve j > S . X
X
Levi
S = Razdvajanje
begin
pivot := X[Levi]; L := Levi; D := Desni; while L < D do while X[L] ≤ pivot and L ≤ Desni do L := L + 1; while X[D] > pivot and D ≥ Levi do D := D − 1; if L < D then
zameni X[L] i X[D]; zameni X[Levi] sa X[S] Razdvajanje := D;
end
Ris. 8. Algoritam razdvajae.
Ako se prvi elemenat izabere za pivot, on se moe zameniti sa X u posledem koraku razdvajaa, i tako postaviti na svoje mesto. Druge mogunosti bie razmotrene prilikom analize sloenosti. U svakom sluqaju, pivot koji je izabran na neki drugi naqin, moe se najpre zameniti sa prvim elementom niza, posle qega se moe primeniti opisani algoritam. Primer rada algoritma Razdvajanje dat je u tabeli 2. Pivot je prvi broj (6). Brojevi koji upravo treba da budu zameeni su podeb ani Posle tri zamene i pomeraa L pokazuje na X[7] = 1, a D na X[6] = 1 (pokazivaq D preskaqe L). Posleda je zamena sredeg broja (X[D] = 1) i pivota (6). Posle ove zamene svi brojevi levo od pivota su mai ili jednaki od ega, a svi brojevi desno su vei od ega. Dva podniza (od 1 do 6 i od 7 do 16) mogu da se rekurzivno sortiraju. Sortirae razdvajaem je prema tome sortirae u mestu. Algoritam je prikazan na slici 9, a primer egovog rada u tabeli 3. Sloenost. Vreme izvrxea sortiraa razdvajaem zavisi od konkretnog ulaza i izbora pivota. Ako pivot uvek razdvaja niz na dva jednaka dela, onda je diferencna jednaqina za sloenost T (n) = 2T (n/2) + cn, T (2) = 1, xto za posledicu ima T (n) = O(n log n). Uveriemo se kasnije da je vremenska sloenost ovog algoritma O(n log n) i pod mnogo slabijim pretpostavkama. Ako je pak pivot blizu nekom od krajeva niza, onda je broj koraka mnogo vei. L
94
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA 6 6 6 6 1
2 2 2 2 2
8 4 4 4 4
5 5 5 5 5
10 10 3 3 3
9 9 9 1 6
12 12 12 12 12
1 1 1 9 9
15 15 15 15 15
7 7 7 7 7
3 3 10 10 10
13 13 13 13 13
4 8 8 8 8
11 11 11 11 11
16 16 16 16 16
Tablica 2. Razdvajae niza oko pivota 6.
14 14 14 14 14
Algoritam Ulaz: (niz od brojeva). Izlaz: (sortirani niz).
Quicksort(X, n);
X
n
X
begin
Q sort(1, n) end procedure Q Sort(Levi, Desni); begin if Levi < Desni then S = Razdvajanje(X, Levi, Desni); {S Q Sort(Levi, S − 1);
je indeks pivota posle razdvajaa}
Q Sort(S + 1, Desni); end
Ris. 9. Sortirae razdvajaem. 6 1 1
2 2 2 2
8 4 4 4 3
5 5 5 5 4
10 3 3 3 5
9 6
12 12
1 9
15 15
7 7
3 10
13 13
4 8
11 11
16 16
14 14
8 7
9 8
11 11 10 9
7 9 9 10
10 10 11
12
13
15
16
14
13
15 14
16 15
14 16
Tablica 3. Primer sortiraa razdvajaem. Pivoti su pode1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
b ani. Elementi koji se u nekoj fazi ne meaju, nisu prikazani.
Na primer, ako je pivot najmai elemenat u nizu, onda prvo razdvajae zahteva 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 algoritma O(n ). Kvadratna sloenost u najgorem sluqaju za sortirane ili skoro sortirane nizove moe se izbei uporeivaem prvog, posledeg i sredeg elementa niza i izborom sredeg meu ima (drugog po veliqini) za pivot. Jox pouzdaniji metod je sluqajni izbor nekog elementa niza za pivot. Vremenska sloenost sortiraa e i tada u najgorem sluqaju biti O(n ), jer i da e postoji mogunost da pivot bude najmai elemenat niza. Ipak, verovatnoa da doe do ovog najgoreg sluqaja je mala. Razmotriemo to sada malo preciznije. Pretpostavimo da se svaki elemenat x sa jednakom verovatnoom moe izabrati za pivot. Ako je pivot i-ti najmai elemenat, onda posle razdvajaa treba rekurzivno sortirati dva dela niza duina redom i − 1, odnosno 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 razdvajaa moe biti svako i = 1, 2, . . . , n sa jednakom verovatnoom 1/n, proseqan broj koraka je 2
2
i
n
T (n) =
n−1+
1X (T (i − 1) + T (n − i)) = n i=1
=
n−1+
n n n−1 1X 1X 2X 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 uporeuje 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. Sortirae 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 nizove. 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 izvrxava 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 sortirae. U praksi on, za velike n, obiqno nije tako brz kao sortirae razdvajaem, ali nije ni mnogo sporiji. S druge strane, za razliku od sortiraa razdvajaem, egova efikasnost je garantovana. Kao kod sortiraa objediavaem, 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 | formirae hipa. Algoritam za formirae hipa ilustruje naqin na koji treba kombinovati 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). Izlaz: (sortirani niz). Hipsort(X, n);
X
n
X
begin
Preurediti X tako da bude hip; {videti nastavak teksta} for i := n downto 2 do
zameni (X[1], X[n]); P reuredi Hip(i − 1) { end
procedura sliqna algoritmu Skini max sa hipa na slici 3.10 }
Ris. 10. Algoritam hipsort.
5.3. SORTIRA E
97
5.3.5.1. Formirae hipa. Sada emo se pozabaviti problemom formiraa hipa od proizvo nog niza. Problem. Dat je niz A[1], A[2], . . . , A[n] proizvo no ureenih brojeva. Preurediti egove elemente tako da zadovo avaju uslov hipa. Postoje dva prirodna pristupa formirau hipa: odozgo nadole i odozdo nagore. Oni odgovaraju prolasku kroz vektor A sleva udesno, odnosno zdesna ulevo (videti sliku 11). Poxto ovi metodi budu opisani primenom indukcije. bie pokazano da izmeu ih postoji znatna razlika u efikasnosti.
-
Ris. 11. Formirae hipa odozgo nadole i odozdo nagore.
Razmotrimo najpre prolazak kroz vektor sleva udesno, tj. izgradu hipa odozgo nadole. Induktivna hipoteza (odozgo nadole). Niz A[1], A[2], . . . , A[i] predstav a hip. Bazni sluqaj je trivijalan, jer A[1] jeste hip. Osnovni deo algoritma je ugrada elementa A[i + 1] u hip A[1], A[2], . . . , A[i] (videti poglav e 3). Elemenat A[i + 1] uporeuje se sa svojim ocem, i zameuje se sa im ako je vei od ega; novi elemenat se premexta navixe, sve dok ne postane mai ili jednak od oca, ili dok ne dospe u koren hipa. Broj uporeivaa je u najgorem sluqaju blog (i + 1)c. Razmotrimo sada prolazak niza zdesna ulevo, xto odgovara prolasku hipa 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. 2
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 zak uqiti i nexto vixe. Elementi vektora A sa indeksima od bn/2c + 1 do 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 vrednost 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 A[n]
2
2
n X
blog2 ic ≥
i=1
n X
blog2 ic ≥ (n/2)blog2 (n/2)c = Ω(n log n).
Sloenost (odozdo nagore). Broj uporeivaa u svakom koraku mai je ili jednak od dvostruke visine razmatranog qvora (poxto se qvor mora uporediti sa veim od sinova, eventualno zameniti, i tako da e niz stablo do lista). Prema tome, sloenost je maa ili jednaka od dvostruke sume visina svih qvorova u stablu. Izraqunajmo dakle sumu visina svih qvorova, ali najpre samo za kompletna stabla. Neka je H(i) suma visina svih qvorova kompletnog binarnog stabla visine i. Niz H(i) zadovo ava diferencnu jednaqinu H(i) = 2H(i − 1) + i, jer se kompletno binarno stablo visine i sastoji i=n/2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2 2 2 2 2 2 2 2 16
6 6 6 6 6 6 6 15 15
8 8 8 8 8 8 16 16 13
5 5 5 5 5 15 15 14 14
10 10 10 10 10 10 10 10 10
9 9 9 13 13 13 13 13 9
12 12 16 16 16 16 12 12 12
1 14 14 14 14 14 14 6 6
15 15 15 15 15 5 5 5 5
7 7 7 7 7 7 7 7 7
3 3 3 3 3 3 3 3 3
13 13 13 9 9 9 9 9 2
4 4 4 4 4 4 4 4 4
11 11 11 11 11 11 11 11 11
16 16 12 12 12 12 8 8 8
14 1 1 1 1 1 1 1 1
Tablica 4. Primer formiraa hipa odozdo nagore. Brojevi u prvoj vrsti su indeksi. Brojevi koji su upravo uqestvovali u zameni, podeb ani su.
5.3. SORTIRA E
99
od dva kompletna binarna podstabla visine i − 1 i korena, qija je visina i. Pored toga, H(0) = 0. Qlan i iz diferencne jednaqine moe se ukloniti enim prepisivaem u obliku H(i) + i = 2(H(i − 1) + (i − 1)) + 2, odnosno G(i) = 2G(i − 1) + 2, gde je uvedena oznaka G(i) = H(i) + i; G(0) = H(0) = 0. Da bi se uklonio preostali konstantni qlan 2, obema stranama treba dodati odgovarajuu konstantu, tako da bude korisna smena F (i) = G(i) + a; odatle se dobija a = 2: G(i)+2 = 2(G(i−1)+2), tj. F (i) = 2F (i−1) i F (0) = G(0)+2 = 2. Rexee poslede diferencne jednaqine je F (i) = 2 , pa konaqno dobijamo H(i) = 2 − (i + 2). Poxto je ukupan broj qvorova kompletnog binarnog stabla visine i jednak 2 − 1, zak uqujemo da je za hipove sa n = 2 − 1 qvorova vremenska sloenost formiraa hipa odozdo nagore O(n). Sloenost za hip sa n qvorova, pri qemu je 2 ≤ n ≤ 2 − 1 maa je ili jednaka od sloenosti za hip se 2 − 1 qvorova, koja je i da e O(n). Osnovni razlog zbog koga je pristup odozdo nagore efikasniji je u tome da je veliki deo qvorova stabla na egovom dnu, a vrlo mali deo pri vrhu, u blizini korena. Zato je bo e minimizirati obradu qvorova na dnu. Ovo je jox jedan primer koji pokazuje da se dobrim izborom redosleda indukcije moe konstruisati efikasan algoritam. Metod formiraa hipa odozgo nadole je direktniji i oqigledniji, ali se ispostav a da je pristup odozdo nagore bo i. 5.3.6. Doa granica za sortirae. Polazei od algoritama za sortirae sloenosti O(n ), usavrxavaem smo doxli do algoritma sloenosti O(n log n). Da li je mogue da e pobo xae, odnosno da li je sloenost svakog algoritma za sortirae Ω(n log n)? Funkcija f (n) je doa granica sloenosti nekog problema ako za sloenost T (n) proizvo nog algoritma koji rexava taj problem vai T (n) = Ω(f (n)) (ili: ne postoji algoritam sloenosti mae od O(f (n)), koji rexava problem). Dokazati da je neka funkcija doa granica sloenosti razmatranog problema nije lako, jer se dokaz odnosi na sve mogue algoritme, a ne samo na jedan konkretan pristup. Neophodno je najpre specificirati model koji odgovara proizvo nom algoritmu, a zatim dokazati da je vremenska sloenost proizvo nog algoritma obuhvaenog tim modelom vea ili jednaka od doe granice. U ovom ode ku razmotriemo jedan takav model koji se zove stablo odluqivaa. Stablo odluqivaa modelira izraqunavaa koja se sastoje najveim delom od uporeivaa. Stablo odluqivaa nije opxti model izraqunavaa kao xto je npr. Tjuringova maxina, pa su doe granice nexto slabije; ali s druge strane, stabla odluqivaa su jednostavnija i sa ima se lakxe operixe. Stablo odluqivaa definixe se kao binarno stablo sa dve vrste qvorova, unutraxim qvorovima i listovima. Svaki unutraxi qvor odgovara pitanju sa dva mogua odgovora, koji su pak pridrueni dvema granama koje izlaze iz qvora. Svakom listu pridruen je jedan od moguih izlaza. Ako se radi o i+1
i+1
i+1
i
i
i+1
2
i+1
100
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
problemu sortiraa, pretpostav amo da je ulazni niz x , x , . . . , x . Izraqunavae poqie od korena stabla. U svakom qvoru postav a se jedno pitae u vezi sa ulazom, i u zavisnosti od dobijenog odgovora, nastav a se levom ili desnom izlaznom granom. Kad se dostigne list, izlaz pridruen listu je izlaz izraqunavaa. Na slici 12 prikazano je sortirae pomou stabla odluqivaa za n = 3. Vremenska sloenost (u najgorem sluqaju) algoritma definisanog stablom T jednaka je visini T , odnosno najveem moguem broju pitaa koja treba postaviti za neki ulaz. Stablo odluqivaa prema tome odgovara algoritmu. Iako stablo odluqivaa ne moe da modelira svaki algoritam (npr. ne moe se izraqunati kvadratni koren iz nekog broja korixeem stabla odluqivaa), ono je prihvat iv model za algoritme zasnovane na uporeivau. Doa granica dobijena za model stabla odluqivaa odnosi se naravno sano na algoritme tog oblika. Sada emo iskoristiti stabla odluqivaa da bismo odredili dou granicu za sortirae. 1
x1 < x3
da x n) then print else
"grexka"
S := Sel(1, n, k) end function Sel(Levi, Desni, k); begin if Levi = Desni then Sel := Levi else S = Razdvajanje(X, Levi, Desni); { if S − Levi + 1 ≥ k then
videti sliku 8}
Sel := Sel(Levi, S, k) else Sel := Sel(S + 1, Desni, k − (S − Levi + 1)) end
Ris. 13. Algoritam za odreivae k-tog najmaeg elementa.
Sloenost. Kao i kod sortiraa razdvajaem, lox izbor pivota vodi kvadratnom algoritmu. Sreda sloenost ovog algoritma moe se oceniti na
104
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
sliqan naqin kao kod sortiraa razdvajaem. Neka je sa T (n, k) oznaqen proseqan broj uporeivaa u algoritmu na ulazima duine n kad se trai k-ti najmai elemenat. Pretpostavimo da posle razdvajaa (n − 1 uporeivae) pivot sa jednakom verovatnoom 1/n moe doi na svaku poziciju i = 1, 2, . . . , n. Razmatraemo malo izmeenu varijantu algoritma, u kojoj se da e izvrxavae odmah prekida ako je pozicija pivota k (i sliqno u da im rekurzivnim pozivima), jer je tada pronaen k-ti najmai elemenat. Za i < k (odnosno i > k ) dolazi se do rekurzivnog poziva algoritma sloenosti T (n − i, k − i) (odnosno T (i, k)) jer preostaje pronalaee (k − i)-tog najmaeg elementa od ih n−i (odnosno k-tog najmaeg elementa od ih i). Prema tome, diferencna jednaqina za T (n, k) je T (n, k) =
n−1 1X 1 T (i, k) + n n i=k
n−1 X
T (i, n − k + 1) + n − 1.
i=n−k+1
Indukcijom se moe dokazati da je T (n, k) ≤ 4n za svako k = 1, 2, . . . , n. Za n = 2 ovo se neposredno proverava, a iz induktivne hipoteze da za i < n i proizvo no m, 1 ≤ m ≤ i, vai T (i, m) ≤ 4i sledi T (n, k) ≤ = = =
n−1 n−1 1X 1 X n−1+ 4i + 4i n n i=k i=n−k+1 µ ¶ 4 n−1+k 2n − k n−1+ (n − k) + (k − 1) n 2 2 ¢ 2¡ 2 n−1+ n + 2nk − 2k 2 − 3n + 2k n ¢ 1¡ (n − 2k)2 + 3(n − k) + 4n < 4n. 4n − n k O(n)
Prema tome, za proizvo no je proseqna sloenost ovog algoritma . Komentar. Veina primena rangovskih statistika zahteva odreivae medijane, odnosno n/2-tog najmaeg elementa. Algoritam Selekcija je odliqan algoritam za tu svrhu. Ne postoji jednostavniji algoritam za nalaee samo medijane. Drugim reqima, uopxtee problema nalaea medijane na nalaenje k-tog najmaeg elementa qini algoritam jednostavnijim. Ovo je takoe primer pojaqavaa induktivne hipoteze, jer rekurzija zahteva proizvo ne vrednosti za k.
5.5. Kompresija podataka
Kompresija podataka je postupak smaea prostora koji zauzimaju podaci. Kompresija podataka je takoe vana prilikom ihovog prenosa, kad je cena obrade podataka maa od cene ihovog prenosa. Kompresija podataka xiroko se primeuje i predstav a oblast koja se brzo razvija. U ovom ode ku razmotriemo samo jedan algoritam pogodan za kompresiju.
5.5. KOMPRESIJA PODATAKA
105
Zbog jednostavnosti pretpostavimo da su podaci koje treba komprimovati tekst smexten u fajl. Svaki znak teksta predstav en je jedinstvenim nizom bita | kodom tog znaka. Ako su duine kodova svih znakova jednake (xto je upravo sluqaj sa standardnim kodovima, kao xto je ASCII ), broj bita koji predstav aju fajl zavisi samo od broja znakova u emu. Da bi se postigla uxteda, moraju se neki znaci kodirati maim, a neki veim brojem bita. Neka se u fajlu pojav uje n razliqitih znakova, i neka se znak s pojav uje f puta, 1 ≤ i ≤ n. Ako sa l oznaqimo broj bita u kodu znaka s , u kodu oznaqenom sa E, onda je ukupan broj bita upotreb enih za predstavljae kodiranog fajla L(E, F ) = P l f , gde je sa F = f , f , . . . , f oznaqen niz uqestanosti (frekvencija) znakova u fajlu. Kodirae fajla je postupak egove transformacije, zamenom znakova odgovarajuim kodovima iz E. Inverzna transformacija koja kodove zameuje znacima je dekodirae. Osnovni uslov koji kod E mora da zadovo i je da omoguuje jednoznaqno dekodirae, odnosno rekonstrukciju polaznog fajla na osnovu egove kodirane verzije. Pre nego xto preemo na traee optimalnog koda, razmotrimo uslove koje kˆo d treba da zadovo i da bi bilo mogue jednoznaqno dekodirae. Jedan od naqina da se jednonaqnost obezbedi, je da se kodu nametne uslov da ni jedna kodna req nije prefiks nekoj drugoj. Kodovi koji zadovo avaju ovaj uslov zovu se prefiksni kodovi. Svaki binarni prefiksni (onaj koji znake kodira nizovima bita) kˆo d moe se predstaviti binarnim stablom, videti primer na slici 14. Polazei od binarnog stabla u kome su grane ka levim, odnosno desnim sinovima oznaqene sa 0, odnosno 1, na prirodan naqin se svakoj kodnoj reqi jednoznaqno pridruuje qvor. Polazi se od korena, a kretae se kontrolixe kodnom reqi: ako je naredni bit 0, prelazi se u levog, a ako je 1, u desnog sina. Kod prefiksnih kodova kodnim reqima oqigledno odgovaraju listovi kodnog stabla. Vai i obrnuto, kˆo d zadat kodnim stablom, u kome su kodne reqi listovi, prefiksni je kˆo d. Dekodirae prefiksnog koda je jednostavno: iz niza bita koji predstav aju kodirani fajl redom se izdvaja jedna po jedna kodna req. Proces je jednoznaqno odreen upravo zato xto je kˆo d prefiksni. Na primer, niz bita 011100010001, moe se u kodu predstav enim stablom na slici 14 dekodirati samo na jedan naqin: 011 − 1 − 00 − 010 − 00 − 1. Problem efikasnog kodiraa moe se sada formulisati na sledei naqin. Problem. Zadat je tekst sa n razliqitih znakova, tako da su uqestanosti znakova zadate nizom F = f , f , . . . , f . Odrediti prefiksni kˆo dE koji minimizira broj bita L(E, F ) upotreb enih za kodirae. Za prefiksni kˆo d koji minimizira vrednost L(E, F ) kae se da je optimalni kˆo d; on oqigledno zavisi od niza uqestanosti znakova F . Ci je za dati niz F odrediti optimalni prefiksni kˆo d (bilo koji; u opxtem sluqaju postoji vixe razliqitih optimalnih kodova). Razmotrimo zbog toga malo deta nije osobine optimalnih kodova. Jasno je najpre da u optimalnom kodu qexi znaci moraju biti kodirani maim brojem bita, odnosno, ako je i
i
i
n i=1 i i
1
2
n
i
1
2
n
106
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA t 0 t
t 1
t 01
t 00
t
t
010 011
Ris. 14. Predstav ae prefiksnog koda stablom. za proizvo na dva znaka c , c , znak c qexi od znaka c (tj. f > f ), onda za odgovarajue duine kodnih reqi l , l mora da vai l ≤ l . Zaista, pretpostavimo suprotno, da je f > f i l > l . Tada je (f − f )(l − l ) > 0, ili f l + f l > f l + f l . Ova nejednakost suprotna je pretpostavci da se radi o optimalnom kodu: zamenom kodnih reqi za znakove c i c dobija se kˆo d sa maom vrednoxu L(E, F ) od polazne: i
j
i
i
i
i i
j j
j i
j
i
j
j
i
i
j
i
j
j
j
i
j
i j
i
j
f1 l1 + f2 l2 + · · · + fj li + · · · + fi lj + · · · + fn ln < < f1 l1 + f2 l2 + · · · + fi li + · · · + fj lj + · · · + fn ln .
U kodnom stablu optimalnog prefiksnog koda svaki unutraxi qvor mora da ima oba sina: u protivnom bi se kˆo d mogao pojednostaviti skraivaem kodnih reqi u listovima podstabla ispod qvora sa samo jednim sinom, videti primer na slici 15. Odatle sledi druga karakteristika optimalnih prefiksnih kodova: postoji optimalni prefiksni kˆo d u kome su kodne reqi za dva znaka sa najmaim frekvencijama | listovi sa istim ocem, na najveem moguem rastojau od korena (drugim reqima, te kodne reqi se razlikuju samo po posledem bitu). Zaista, dva znaka c , c sa najmaim uqestanostima moraju biti kodirana sa najvixe bita, odnosno moraju biti predstav eni listovima u najda em sloju (na najveem rastojau od korena). Znaci c , c moraju biti u istom sloju; ako ti znaci nisu sinovi istog oca, onda se mogu izvrxiti zamene kodova znakova u posledem sloju (ta zamena ne mea broj upotreb enih bita L(E, F )), tako da u novom optimalnom kodu znaci c , c budu sinovi istog oca (videti primer na slici 16). Algoritam kodiraa (nalaea optimalnog koda) zasniva se na svoeu problema sa n znakova na problem sa n − 1 znakom; bazni sluqaj je trivijalan. Kao i obiqno, problem je kako definisati induktivnu hipotezu i kojim redosledom eliminisati znakove. Svoee je u ovom sluqaju nexto drukqije od dosad vienih. Umesto da prosto eliminixemo jedan znak, mi uvodimo jedan novi znak umesto dva postojea. Ova tehnika je malo komplikovanija, ali vodi ci u: veliqina ulaza se smauje. Neka su c i c dva proizvo na znaka sa najmaim uqestanostima. Prema gore dokazanom tvreu, postoji optimalni kˆo d u kome znacima c i c odgovaraju listovi na maksimalnom rastojau od korena. Dva znaka c i c zameujemo novim znakom koji moemo da oznaqimo sa i
i
i
j
j
i
i
i
j
j
j
j
5.5. KOMPRESIJA PODATAKA
107
d
d
0
0
1
d
d
d d
-
d d
d
A B 000 001
d d
d
C D 100 101
E 111
1
d
d
d
d
A 00
B 01
d d
d d
E 11
C D 100 101
Ris. 15. Kodno stablo u kome neki qvor ima samo jednog sina nije kodno stablo optimalnog koda. b
b -
b
b
b
b
b
b
b
b
b
b
fi
fr
fs
fj
fi
fj
b
b
fs fr
Ris. 16. Transformacija kodnog stabla, posle koje dva znaka
sa najmaim frekvencijama f i f postaju sinovi istog oca. c c i qija je frekvencija f + f . Alfabet sada ima n − 1 znak, pri qemu zbir uqestanosti znakova nije promeen, pa se za ega prema induktivnoj hipotezi moe odrediti optimalni kˆo d. Optimalni kˆo d za polazni alfabet dobija se tako xto se listu c c u kodu za n − 1 znak dodaju dva sina, lista koji odgovaraju znacima c i c . Optimalni kˆo d dobijen opisanom konstrukcijom zove se Hofmanov kˆo d (prema imenu autora algoritma, D. Huffman ). Realizacija. Operacije koje se izvrxavaju prilikom formiraa Hofmanovog koda su • umetae u strukturu podataka, • brisae dva znaka sa najmaim frekvencijama iz strukture, i • konstrukcija kodnog stabla. Hip je pogodna struktura podataka za prve dve operacije, jer se tada te operacije u najgorem sluqaju izvrxavaju za O(log n) koraka. Algoritam za formirae Hofmanovog koda prikazan je na slici 17. Primer 5.1. Neka je dat fajl u kome se pojav uju znaci A, B, C, D, E i F sa frekvencijama redom 5, 2, 3, 4, 10 i 1. Dva znaka sa najmaim frekvencijama su F i B; oni se zameuju novim znakom BF sa frekvencijom 1 + 2 = 3. Da a i
i j
i
j
i j
i
j
j
108
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
Algoritam Ulaz: (string znakova koji se pojav uju u tekstu) i (frekvencije). Izlaz: (kodno stablo Hofmanovog koda za ). Hofman(S, F );
S
F
T
S
begin
ubaciti sve znake u hip H prema ihovim frekvencijama; while H neprazan do if H sadri samo jedan znak X then formiraj stablo T koje ima samo koren, qvor X else skini sa hipa H znakove X , Y sa najmaim frekvencijama f , f zameni X i Y novim znakom Z sa frekvencijom f = f + f ; ubaci Z u hip H; povei X i Y tako da budu sinovi Z u T ; {Z jox nema oca} X
Z
end
X
Y
;
Y
Ris. 17. Algoritam za formirae Hofmanovog koda. zameivaa prikazana su u sledeoj tabeli. 1 2 A B 5 2 A C 5 3 A D 5 4 E CBF 10 6 E CBF AD 10 15
3 C 3 D 4 E 10 AD 9
4 D 4 E 10 CBF 6
5 E 10 BF 3
6 F 1
novi znak
BF 3 CBF 6 AD 9 CBF AD 15 ECBF AD 25
Na slici 18 prikazano je dobijeno kodno stablo. Sloenost. Sloenost dodavaa novog qvora stablu ograniqena je konstantom. Umetaa i brisaa iz hipa izvrxavaju se u O(log n) koraka. Sloenost algoritma je dakle O(n log n).
5.6. Traee uzorka u tekstu
Neka su S = s s . . . s i P = p p . . . p dva stringa (niza znakova iz konaqnog alfabeta). Za prvi od ih rei emo da je tekst, a za drugi da je uzorak. Podstring stringa S je string s s . . . s od uzastopnih znakova S. 1 2
n
1 2
i i+1
m
j
5.6. TRAE E UZORKA U TEKSTU
109
ECBF AD
t
0 CBF AD t 0 CBF t 1 0 FB t t C 1 0 001 t B F t 0000 0001
1
t E
1 1
1
t AD 1
A t
t D
010
011
Ris. 18. Stablo Hofmanovog koda iz primera 5.1.
Problem. Za dati tekst S = s s . . . s i uzorak P = p p . . . p ustanoviti da li postoji podstring S jednak P , a ako postoji, pronai prvu pojavu uzorka u tekstu, odnosno najmai indeks k takav da je s = p za i = 1, 2, . . . , m. Tipiqna situacija u kojoj se nailazi na ovaj problem je kad se trai neka req u tekstualnom fajlu. Problem ima primenu i u drugim oblastima, na primer u molekularnoj biologiji, gde je korisno pronai neke uzorke u okviru velikih molekula rnk ili dnk. Na prvi pogled problem izgleda jednostavno. Dovo no je uporediti uzorak P sa svim moguim podstringovima S oblika s s ...s duine m, pri qemu k uzima vrednosti redom 1, 2, . . . , n − m + 1. Uporeivae uzorka sa podstringom vrxi se znak po znak sleva udesno, sve dok se ne ustanovi da su svi znaci uzorka jednaki odgovarajuim znacima podstringa (u tom trenutku prekida se da e pregledae podstringova), ili dok se ne naie na neslagae p 6= s za neko i, 1 ≤ i ≤ m: 1 2
n
1 2
k+i−1
k k+1
i
m
i
k+m−1
k+i−1
s1
...
sk p1
... ...
j =k+i−1 ↓ sj pi ↑ i
... ...
sk+m−1 pm
. . . sn
U drugom sluqaju uzorak se "pomera" za jedan znak udesno, odnosno nastav a se sa proverom jednakosti p sa s . Ovaj jednostavan algoritam za traee uzorka u stringu prikazan je na slici 19. Broj uporeivaa znakova mai je od mn, pa je sloenost ovog algoritma O(mn) u najgorem sluqaju. Neracionalnost ovog algoritma ogleda se u vraau unazad pokazivaqa na tekst posle nailaska na neslagae. Pretpostavimo da je do neslagaa doxlo na poziciji i u uzorku, tj. za neki indeks j u tekstu je p 6= s i p p ...p =s s ...s (videti sliku 20). Postav a se pitae: koliko uzorak najmae treba pomeriti udesno, odnosno koji znak p uzorka treba postaviti ispod znaka s teksta, tako da se (mai) deo uzorka p p . . . p , 1
k+1
i
1 2
i−1
j−i+1 j−i+2
j
j−1
l
j
1 2
l−1
110
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
Algoritam Ulaz: (string duine ) i (uzorak duine ). Izlaz: (indeks poqetka prvog podstringa jednakog , ako takav postoji, Nadji uzorak(S, n, P, m);
S
n
P
m
Start
S
odnosno 0 u protivnom).
P
begin
Start := 0;
pokazivaq na uzorak} j := 1; {pokazivaq na string} while i ≤ m and j ≤ n do {dok ima nade da se nae podstring jednak uzorku} if P [i] = S[j] then i := i + 1; j := j + 1 {poklapae: napredovae i u stringu i u uzorku} else j := j − i + 2; i := 1 {neslagae: uzorak klizi za jedno mesto udesno} if i > m then Start := j − i + 1 {pronaen je podstring jednak uzorku} i := 1; {
end
Ris. 19. Najjednostavniji algoritam za traee uzorka u tekstu. , i da e slae sa delom teksta s s . . . s , i da pri tome bude ? Poxto je l < i, bie p p . . . p = s s . . . s . Zbog toga je jednakost p p . . . p = s s . . . s ekvivalentna sa slagaem p p ...p =p p ...p prefiksa uzorka duine l −1 sa delom uzorka koji se zavrxava sa p | xto je uslov koji ne zavisi od teksta, nego samo od uzorka! Poxto i uslov p 6= p zavisi samo od uzorka, jasno je da indeks l zavisi samo od indeksa i i znakova uzorka p , p ,..., p . Mogue je dakle najpre obraditi uzorak, tako da se u poseban vektor h na poziciju h[i] smesti izraqunati indeks l, i = 1, 2, . . . , m. Ako ni za jedno l < i nije istovremeno p p ...p = p p ...p i p 6= p , onda se stav a h[i] = 0: p se postav a ispod s . Vratimo se na traee uzorka u tekstu, i to na situaciju na slici 20, kad je prvo neslagae p 6= s . Tada se oqitava vrednost l = h[i] i uzorak pomera udesno za i − h[i], pa se (ako je l > 0) proverava da li je p = s . Ako jeste, onda se uporeuju p i s , a ako nije, onda se postupa na ve poznat naqin: oqitava vrednost h[l] a uzorak se pomera da e udesno za l − h[l], itd. Ukoliko je pak l = 0, onda se napreduje u tekstu, tj. p se postav a ispod s . Opisani algoritam, koji je dobio ime KMP po svojim autorima Knutu, Morisu i Pratu (Knuth, Moris, Pratt ), prikazan je na slici 21. Algoritam najpre uqitava uzorak i formira tabelu h, koja odreuje koliko znakova treba pomeriti uzorak udesno u sluqaju neslagaa. Zatim se prelazi na traee uzorka u tekstu. Poxto nema vraaa, ulaz se moe uqitavati znak po znak. Operator cand u unutraxoj pet i je "uslovna konjunkcija" l 0. U unutraxoj while-pet i se, posle otkrivaa neslagaa p 6= s , uzorak pomera udesno za i−h[i] pozicija, tj. pokazivaq na uzorak umesto i dobija novu vrednost h[i]; pri tome se pretpostav a da su elementi vektora ve izraqunati. Ovaj korak se ponav a sve dok ne bude i = 0 (xto znaqi da ni jedan poqetak uzorka ne moe biti jednak prefiksu ulaznog teksta koji se zavrxava sa s ) ili p = s (xto znaqi da je p . . . p p = s . . . s s za novu vrednost i). Spo axa while-pet a pomera za po jedno mesto pokazivaqe na uzorak i tekst. i
i
j
j
j
i
j
S
1
?k
?j
61
6i
i−1 i
j−i+1
j−1 j
P P
6l = h[i]
Ris. 20. Ilustracija ideje na kojoj se zasniva algoritam KMP. Algoritam Ulaz: (tekst | string duine ) i (uzorak duine ). Pretpostav a se da je niz izraqunat Izlaz: (indeks poqetka prvog podstringa jednakog , ako takav postoji, KMP(S, n, P, m);
S
n
{
h
P
m
}
Start
S
odnosno 0 u protivnom).
P
begin
Start := 0;
pokazivaq na uzorak} pokazivaq na tekst} while i ≤ m and j ≤ n do {dok ima nade da se nae podstring jednak uzorku} while i > 0 cand P [i] 6= S[j] do i := h[i]; {pomerae uzorka udesno za i − h[i]} i := i + 1; j := j + 1; {napredovae u tekstu i u uzorku} if i > m then Start := j − i + 1 {pronaen je podstring jednak uzorku} i := 1; {
j := 1; {
end
Ris. 21. Algoritam KMP za nalaee uzorka u tekstu.
Razmotrimo sada kako se efektivno mogu izraqunati elementi vektora h. Kao xto je reqeno, ako je p 6= s , onda je l = h[i] indeks znaka uzorka koga i
j
112
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
sledeeg treba uporediti sa znakom teksta s . Drugim reqima, l je najvei indeks za koji je p p . . . p = p p . . . p i p 6= p . Uz uslov h[1] = 0 ovim su odreeni svi qlanovi vektora h. Da bismo pojednostavili problem, uvedimo vektor g iste duine, tako da bude g[1] = 0, a za i > 1 je g[i] najvei indeks l, takav da je p p . . . p = p p . . . p . Koji su sledei indeksi l > l > · · · , takvi da se p moe postaviti naspram p , odnosno takvi da je p p . . . p = p p . . . p (tj. sufiks duine l − 1 stringa p p ...p jednak je prefiksu tog stringa iste duine), r = 2, 3, . . .? Jasno je da su to indeksi l = g[g[l]] = g [l], l = g [l], ...koji qine opadajui, pa dakle konaqan niz prirodnih brojeva. Koristei ovu qienicu, lako je izraqunati elemente vektora h kad se zna g. Neka je g[i] = l; tada je j
1 2
l−1
i−l+1 i−l+2
1 2
2
1 2
1 2
l−1
3
i−1
l
i−l+1 i−l+2
i
i−1
lr
lr −1
i
i−lr +1 i−lr +2
i−1
2
2
½ h[i] =
i−1
3
l, h[l],
r
3
ako ako
pi 6= pl , pi = pl
tj. h[i] je jednako g[i], ili se izraava preko ve izraqunatog elementa h[l], l < i. Elementi vektora g se takoe mogu izraqunavati rekurzivno, polazei od jednakosti g[1] = 0. Neka su ve izraqunati g[1], g[2],..., g[i]. Tada je g[i + 1] najvei indeks l + 1, takav da je p p . . . p = p p . . . p . Ova jednakost za posledicu ima p p . . . p = p p . . . p , pa je l ∈ {h[i], h [i], . . .}; podrazumeva se da ovaj skup ne obuhvata nulu. Prema tome, za vrednosti l iz ovog skupa redom se proverava da li je p = p , pa se za g[i + 1] uzima se prvo l za koje je p = p . Ako ni za jedno l iz skupa nije p = p , onda je g[i + 1] = 1. Algoritam P omaci za izraqunavae vektora h (i usput vektora g), koji je praktiqno identiqan sa algoritmom za traee uzorka u tekstu, prikazan je na slici 22. Pri tome se pokazivaq j zameuje sa h[j] umesto sa g[j], xto predstav a pobo xae, jer se smauje broj iteracija. Time se postie "autonomija" izraqunavaa h, tj. naredbe u kojima se pojav uje vektor g postaju nepotrebne. Na slici 23 je xematski prikazana unutraxa pet a algoritma. Sloenost. Broj izvrxavaa naredbe j := h[j] u unutraxoj pet i (druga naredba while na slici 22) koja smauje j, mai je ili jednak od broja izvrxavaa naredbe j := j + 1 u spo axoj pet i, koja za po jedan poveava j : j je uvek pozitivno. Meutim, broj inkrementiraa j jednak je broju inkrementiraa i, pa je dakle mai od m. Prema tome, izraqunavae h obav a se za vreme O(m). Na sliqan naqin naredba i := h[i] u unutraxoj pet i na slici 21 (koja smauje i bar za 1) ne moe se izvrxiti vixe puta od naredbe j := j + 1 (a time i naredbe i := i + 1 koja poveava i za 1) u spo axoj pet i. Prema tome, u unutraxoj pet i se uzorak pomera udesno najvixe n puta, pa je vremenska sloenost ovog algoritma O(n). Primetimo da vremenska sloenost algoritma KMP ne zavisi od veliqine alfabeta. 1 2
1 2
l−1
l
l
l
i
i−l+1 i−l+2
i−l+1 i−l+2
i−1
i
l
i
i
2
5.6. TRAE E UZORKA U TEKSTU
Algoritam Ulaz: (uzorak, string duine ). Izlaz: (niz duine ).
113
Pomaci(P, m);
P
m
h
m
begin
indeks elementa h koji se izraqunava} pokazivaq na smaknuti uzorak; uskakae u pet u} h[1] := 0; g[1] := 0; {neslagae na prvom znaku u KMP: pomerae udesno} while i < m do {na ovom mestu je P [i − j + k] = P [k] za k = 12, . . . j − 1] | invarijanta pet e} while j > 0 cand P [i] 6= P [j] do j := h[j]; {smaivae indeksa j ; moe i j := g[j];, ali je ovako bo e!} i := i + 1; j := j + 1; {paralelno napredovae pokazivaqa} g[i] := j; {neka je s simbol u tekstu, sa kojim se P [i] uporeuje u algoritmu KMP} if P [i] = P [j] then h[i] := h[j] {ako P [i] 6= s, onda je i P [j] 6= s; udesno na h[j]} else h[i] := j {ako P [i] 6= s, onda proveriti da li je P [j] 6= s; udesno na j} i := 1; {
j := 0; {
end
Ris. 22. Algoritam za izraqunavae tabele h. ?l
S
? ?i
P P
¾ ?i + 1
j 6 pi 6= pj ? i ?
pi = pj
6j +½1 h[i + 1] =
h[j + 1], j + 1,
pi+1 = pj+1 pi+1 6= pj+1
6h[j]
Ris. 23. Unutraxa pet a i izraqunavae jednog elementa tabele h u algoritmu P omaci.
114
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
Primer 5.2. Neka je uzorak P = abaababaabaab. Algoritam sa slike 22 daje sledee vektore h i g: i pi j pj pi = pj ? h[i] g[i]
1
2 3 b a 1 0 1 a a 6 = = 1 0 1 1
0
0 0
4 a 2 b 6 = 2 2
5 6 b a 1 2 3 a b a = = = 1 0 2 3
7 8 9 10 11 12 13 b a a b a a b 4 2 3 4 5 6 7 4 5 a b a a b a b a b 6 = = = = = = 6= = = 4 0 2 1 0 7 1 4 3 4 5 6 7 5
Primenimo algoritam KMP da bismo pronaxli ovaj uzorak u tekstu S = abaababaabacabaababaabaab. Posle slagaa 11 znakova, dolazi se do neslagaa na znaku c u S . U tom trenutku je i =prvih j = 12: a a
b b
a a
a a
b b
a a
b b
a a
a a
b b
a a
j = 12 ↓ c a ↑ i = 12
a b
b
a
a
b
a
b
a
...
Prvaodgovara iteracija u unutraxoj pet i na slici 21time postav a i = h = 7, xto pomerau uzorka pet znakova udesno; se sedmi znak uzorka postav a ispod 12-tog znaka teksta: 12
a
b
a
a
b
a a
b b
a a
a a
b b
a a
j = 12 ↓ c b ↑ i=7
a a
b a
a b
a a
b a
a b
b
a
...
je i poziciji da e p 6=nastav aju s , pa se i postav a na novu vrednost h = 4. Neslagaa sejeSada na ovoj i zapai se= 4,u 2,spo axoj 1, 0. Unutraxa pet a zavrxena bez nalaea uzorka u tekstu, pet i postav a i = 1, j = 13: i
...
a
b
a
j
a
b
7
a
c
j = 13 ↓ a a ↑ i=1
b b
a a
a a
b b
a a
b b
a a
a a
b b
a a
a a
b b
Na ovom mestu algoritam pronalazi uzorak u tekstu. Drugi efikasan algoritam za nalaee uzorka u stringu razvili su Bojer i Mur 1977. (Boyer, Moore ). Prikazaemo ga ukratko. Razlika izmeu ovog i algoritma KMP je u tome xto se uzorak i tekst prolaze u razliqitim smerovima. Najpre se uporeuje p sa s . Ako su ta dva znaka jednaka, nastavlja se sa uporeivaem p sa s , itd. U sluqaju neslagaa, prikup ene informacije se koriste kao i u algoritmu KMP da se uzorak pomeri udesno. m
m−1
m−1
m
5.7. UPOREIVA E NIZOVA
115
Ako je, na primer, s ="Z ", a znak "Z " se ne pojav uje u uzorku, onda se uzorak pomera udesno za m pozicija i sledee uporeivae je s sa p . Ako se "Z " pojav uje u P kao npr. p , unda se uzorak pomera m − i pozicija udesno. Odluka o tome koliko uzorak treba pomeriti udesno postaje komplikovanija ako je prethodno doxlo do nekoliko slagaa znakova uzorka sa odgovarajuim znacima teksta; pri tome se uzima u obzir i eventualni sufiks pronaenog dela uzorka jednak prefiksu uzorka, kao kod algoritma KMP. Na ovom mestu neemo se upuxtati u deta e algoritma. Zanim ivo je da u tekstu sa velikim alfabetom ovaj algoritam najqexe izvrxava mnogo mae od n uporeivaa znakova, u proseku qak n/m uporeivaa, xto znaqi da su qesta pomeraa uzorka za m pozicija udesno. m
2m
m
i
5.7. Uporeivae nizova
Problemu uporeivaa nizova tek se od nedavno posveuje vea paa. Osnovni razlog su primene u molekularnoj biologiji. Ovde emo se baviti samo jednim problemom | nalaeem minimalnog broja edit operacija koje prevode jedan string u drugi. Osnovna tehnika koja se u vezi sa tim koristi je dinamiqko programirae (videti ode ak 4.10). Neka su A = a a . . . a i B = b b . . . b dva stringa, niza qiji su elementi znakovi iz konaqnog alfabeta. Ci je transformisati A u B, znak po znak. Dozvo ene su tri vrste elementarnih transformacija (ili edit operacija), koje imaju cenu 1: • umetae | umetae znaka; • brisae | brisae znaka, i • zamena | zamena jednog znaka drugim znakom. Problem. Za zadate stringove A = a a . . . a i B = b b . . . b pronai niz edit operacija najmae cene koji A transformixe u B. Na primer, da se string abbc transformixe u string babb, moe se prvo obrisati a (dobija se bbc), umetnuti a izmeu dva b (dobija se babc), i na kraju zameniti c sa b | ukupno tri promene. Isti rezultat moe se postii sa samo dve promene: umetaem novog b na poqetku (dobija se babbc) i brisaem posledeg c. Ci je pronai transformaciju koja se sastoji od minimalnog broja edit operacija (takva transformacija u opxtem sluqaju nije jedinstvena). Najmai broj edit operacija koji transformixe string A u string B zvaemo edit rastojaem d(A, B) stringova A i B. Funkcija d(A, B) je metrika: oqigledno je d(A, A) = 0 i d(A, B) = d(B, A), za proizvo ne stringove A i B (ako postoji niz edit operacija duine k koji transformixe A u B , onda inverznih k operacija, primeenih obrnutim redosledom, transformixu B u A). Ako su A, B i C proizvo ni stringovi, tada vai nejednakost trougla: d(A, B) + d(B, C) ≥ d(A, C). Zaista, postoji niz od d(A, B) edit operacija koje prevode A u B, i postoji niz od d(B, C) edit operacija koje prevode B u C . Posmatrane zajedno, ovih d(A, B) + d(B, C) edit operacija prevode A u C ; 1 2
n
1 2
m
1 2
n
1 2
m
116
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
iz qienice da je d(A, C) najmai broj edit operacija koje A prevode u C sledi traena nejednakost. Rastojae d(A, B) poznato je kao Levenxtajnovo rastojae (Levenstein ). Razmotrimo kako moe da izgleda minimalni niz edit operacija koji A transformixe u B. Na neke znakove a , a ,..., a iz A primeuje se operacija zamene znacima b , b ,..., b iz B. Isk uqivaem ovih znakova, stringovi A i B su pode eni na k + 1 (eventualno praznih) grupa znakova, tako da se i-ta (prazna) grupa u B dobija brisaem znakova iz i-te grupe u A, ili se od i-te (prazne) grupe u A umetaem dobija i-ta grupa u B , i = 1, 2, . . . , k + 1. Zbog minimalnosti su sve edit operacije u okviru jedne grupe istog tipa | ili brisae ili umetae, jer se brisae jednog znaka, pa umetae drugog znaka na isto mesto (dve edit operacije sa ukopnom cenom 2), moe zameniti samo jednom zamenom, cene 1. Uzimajui u obzir ove qienice, niz edit operacija koji je kandidat za optimalni, moe se predstaviti na sledei pregledan naqin. Uvedimo novi znak φ. Naspram obrisanih znakova iz A u B se umee znak φ, a naspram znakova u B, dobijenih umetaem, u A se umee znak φ. Time su A, B produeni do nizova A¯, B¯ jednake duine, a sve edit operacije svedene su na zamenu: brisau znaka a iz A ¯odgovara zamena¯ a iz A¯ sa φ u B¯ , a umetau znaka b u B odgovara zamena φ u A znakom b u B. Znak φ smatra se razliqitim od svih ostalih znakova, pa je cena zamene istim, odnosno razliqitim znakom i da e 0, odnosno 1. Dva gore navedena primera nizova edit operacija mogu se dakle predstaviti sa i1
j1
odnosno
j2
i2
ik
jk
a φ 1+
b b 0+
φ a 1+
b b 0+
c b 1
= 3,
φ b 1+
a a 0+
b b 0+
b b 0+
c φ 1
= 2.
Problem transformisaa stringova ima takoe primenu u vezi sa uporeivaem fajlova i quvaem razliqitih verzija fajla. Pretpostavimo da imamo tekstualni fajl (npr. program) i drugi fajl koji je modifikacija prvog. Zgodno je izdvojiti razlike dva fajla. To mogu biti razliqite verzije istog programa, pa ako su verzije sliqne i treba da budu arhivirane, efikasnije je quvati samo jednu verziju i razlike umesto obe verzije programa. U takvim sluqajevima (ovde znacima stringa odgovaraju linije u fajlu) dozvo ene operacije su samo umetaa i brisaa. U drugim situacijama mogu se razliqitim edit operacijama dodeliti razliqite cene. Moguih nizova edit operacija koje A prevode u B, ima mnogo, pa je na prvi pogled texko meu ima nai najbo i. Za poqetak, ograniqiemo se na nalaee edit rastojaa d(A, B), odnosno najmaeg broja edit operacija koje prevode A u B (a ne i samog niza edit operacija). Kao i obiqno, pokuxaemo
5.7. UPOREIVA E NIZOVA
117
da problem reximo indukcijom. Za zadati string A oznaqimo sa A(i) egov prefiks duine i. Problem je odrediti rastojae d(A(n), B(m)). Za n = 0 potrebno je prazan prefiks A(0) transformisati u string B(m) duine m. Oqigledno je za to potrebno najmae m operacija umetaa znakova; prema tome, d(A(0), B(m)) = m za m ≥ 0. Sliqno, d(A(n), B(0)) = n za n ≥ 0, jer se najkrai niz edit operacija koje string A(n) duine n prevodi u prazan string B(0) sastoji od n brisaa. Da bismo problem rexili indukcijom, potrebno je da izraqunavae rastojaa d(A(i), B(j)) izmeu nekih prefiksa svedemo na izraqunavae rastojaa izmeu nekih "kraih" prefiksa. Ovaj ci moe se postii ako razmotrimo koja edit operacija moe biti posleda u nizu edit operacija koje prevode A(i) u B(j). Postoje tri mogunosti: znaka a (istim ili razliqitim) znakom b , poxto je prethod(a)nozamena prefiks A(i − 1) transformisan u B(j − 1), (b)u umetae znaka b poxto je prethodno prefiks A(i) transformisan B(j − 1); (c)u brisae znaka a , poxto je prethodno prefiks A(i−1) transformisan B(j), xto je ilustrovano na slici 24. Neka je ½ 0, za a = b . c(i, j) = 1, za a 6= b Najmai broj edit operacija koje A(i) prevode u B(j) jednak najmaem od tri izraza d(A(i − 1), B(j − 1)) + c(i, j), d(A(i), B(j − 1)) + 1 i d(A(i − 1), B(j)) + 1. Neka je C matrica qiji su elementi rastojaa svih podstringova A od svih podstringova B, tj. C[i, j] = d(A(i), B(j)), 0 ≤ i ≤ n, 0 ≤ j ≤ m. Elementi ove matrice zadovo avaju diferencnu jednaqinu i
j
j
i
i
j
i
j
C[i, j] = min{C[i − 1, j − 1] + c(i, j), C[i, j − 1] + 1, C[i − 1, j] + 1},
koja en proizvo an elemenat izraava preko tri druga: iznad, levo i gore{ levo: j ..
↓
i→
··· ···
C[i − 1, j − 1] C[i, j − 1]
C[i − 1, j] . . . C[i, j] ...
Ova jednakost omoguuje izraqunavae svih elemenata matrice C , poxto se znaju ena 0-ta kolona i 0-ta vrsta. Time je rexen problem izraqunavaa edit rastojaa stringova A i B: d(A, B) = C[n, m]. Opisani algoritam je primer dinamiqkog programiraa. Realizacija. Za izraqunavaa se koristi matrica C dimenzije (n + 1) × (m + 1), pri qemu prvi, odnosno drugi indeks uzimaju vrednosti iz opsega [0, n], odnosno [0, m]. Neka M [i, j] oznaqava posledu edit operaciju koja dovodi do minimalne vrednosti C[i, j]. Dovo no je zapamtiti samo tu posledu
118
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA A(i − 1)
?
ai
A(i)
?
B(j − 1)
φ
?
bj
?
B(j − 1)
(a) zamena
A(i − 1)
?
bj
(b) umetae
ai
? φ
B(j)
(b) brisae
Ris. 24. Nizovi edit operacija koje transformixu A u B razvrstani prema posledoj operaciji. edit operaciju (brisae A[i], umetae B[j] ili zamena A[i] sa B[j]), jer se do kompletnog niza edit operacija dolazi prolazei elemente matrice "unazad", polazei od M [n, m]. Za izraqunavae C[i, j], potrebno je znati C[i−1, j], C[i, j −1] i C[i−1, j −1]. Posleda promena M [i, j] odreena je time koja od tri mogunosti daje minimalnu vrednost za C[i, j]; izbor nije uvek jednoznaqan! Algoritam je prikazan na slici 25. Algoritam Ulaz: (string duine ), i (string duine m). Izlaz: (matrica rastojaa podstringova i ). Edit rastojanje(A, n, B, m);
A
n
B
C
A
B
begin
for i := 0 to n do C[i, 0] := i; for j := 0 to m do C[0, j] := j; for i := 1 to n do for j := 1 to m do x := C[i − 1, j] + 1; y := C[i, j − 1] + 1; if ai = bj then z := C[i − 1, j − 1] else z := C[i − 1, j − 1] + 1; C[i, j] := min(x, y, z)
izabrana edit operacija pamti se u M [i, j]}
{ end
Ris. 25. Algoritam za nalaee edit rastojaa dva niza.
Primer 5.3. Razmotrimo rad algoritma na gore navedenom primeru stringova A = abbc i B = babb. Matrica rastojaa podstringova A i B, zajedno sa strelicama koje prikazuju mogue puteve dobijaa C[i, j] ( : zamena A[i] sa &
5.8. PROBABILISTIQKI ALGORITMI
B[j]
, : umetae B[j] ili : brisae A[i]), data je sledeom tabelom: →
119
↓
B A 0 1
a
0 0
→
↓
&
1 ↓
2
b
3
b
3
1
&
c
4
→
3 b 3
→
4 b 4
2
→
3
1
→
&
↓
&
1
→
2
↓
&
2
↓
4
→
2 a 2
&
&
2 ↓
1 b 1
2 &
3
&
&
1
→
↓
&
2
↓
&
3
2 1
↓
↓
3
2
U doem desnom uglu tabele pronalazimo d(A, B) = 2. Do doeg desnog ugla dolazi se samo samo iz po a iznad ega operacijom . Na sliqan naqin idui unazad, vidimo da se do goreg levog ugla tabele unazad moe doi samo na jedan naqin, nizom operacija (unazad) . Prema tome, u ovom primeru postoji samo jedan niz od dve edit transformacije koji prevodi A = abbc u B = babb. Sloenost. Svaki elemenat matrice C izraqunava se za konstantno vreme, pa je vremenska sloenost algoritma O(nm). Problem sa ovom verzijom algoritma je u tome xto je i egova prostorna sloenost O(nm). Ako se matrica C popuava vrstu po vrstu, poxto vrsta zavisi samo od prethodne, ovaj algoritam moe se preraditi tako da mu prostorna sloenost bude O(m). Primedba. Dinamiqko programirae je korisno u situaciji kad se rexee problema izraava preko nekoliko rexea nexto maih problema. Korixee tabele za smextae prethodnih rezultata je uobiqajeno kod dinamiqkog programiraa. Tabela se obiqno prolazi nekim redosledom (obiqno po vrstama), pa je sloenost algoritma najmae kvadratna. Zbog toga je pristup sa dinamiqkim programiraem obiqno mae efikasan od, na primer, pristupa zasnovanog na dekompoziciji. ↓
↓&&&→
5.8. Probabilistiqki algoritmi
Algoritmi koje smo do sada razmatrali bili su deterministiqki | svaki naredni korak je unapred odreen. Kad se deterministiqki algoritam izvrxava dva puta sa istim ulazom, naqin izvrxavaa je oba puta isti, kao i dobijeni izlazi. Probabilistiqki algoritmi su drugaqiji. Oni sadre korake koji zavise ne samo od ulaza, nego i od nekih sluqajnih dogaaja. Postoji mnogo varijacija probabilistiqkih algoritama. Ovde emo razmotriti dve od ih. Razmotriemo najpre jedan jednostavan primer. Pretpostavimo da je dat skup brojeva x , x , . . . , x i da meu ima treba izabrati neki broj iz "gore polovine", odnosno broj koji je vei ili jednak od bar n/2 ostalih. Na primer, potrebno je izabrati "dobrog" studenta, pri 1
2
n
120
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
qemu je kriterijum proseqna ocena. Jedna mogunost je uzeti najvei broj (koji je uvek u goroj polovini). Ve smo videli da je za odreivae maksimuma potrebno n − 1 uporeivae. Druga mogunost je zapoqeti sa izvrxavaem algoritma za nalaee maksimuma, i zaustaviti se kad se proe polovina brojeva. Broj koji je vei ili jednak od jedne polovine brojeva je sigurno u goroj polovini. Algoritam zahteva oko n/2 uporeivaa. Moe li se ovaj posao obaviti efikasnije? Nije texko pokazati da je nemogue garantovati da broj pripada goroj polovini ako je izvrxeno mae od n/2 uporeivaa. Prema tome, opisani algoritam je optimalan. Ovaj algoritam je, meutim, optimalan samo ako insistiramo na garanciji. U mnogo sluqajeva garancija nije neophodna, dovo na je pristojna verovatnoa da je rexee dovo no taqno. Na primer, kod hex tablica nije mogue garantovati da do kolizija nee doi, ali postoji naqin za rexavae problema izazvanih pojavom kolizija (operacije sa hex tablicama se takoe mogu smatrati probabilistiqkim algoritmima). Ako odustanemo od garancije, onda postoji bo i algoritam za nalaee elementa iz gore polovine. Izaberimo na sluqajan naqin dva broja x i x iz skupa, tako da je i 6= j. Pretpostavimo da je x ≥ x . Verovatnoa da sluqajno izabrani broj iz skupa pripada goroj polovini je bar 1/2 (ona e biti vea od 1/2 ako je vixe brojeva jednako medijani). Verovatnoa da ni jedan od brojeva x , x ne pripada goroj polovini je najvixe 1/4. Zbog x ≥ x ova verovatnoa jednaka je verovatnoi da x ne pripada goroj polovini. Prema tome, verovatnoa da x pripada goroj polovini je bar 3/4. Verovatnoa 3/4 da je dobijeni rezultat taqan obiqno nije dovo na. Meutim, opisani pristup moe se uopxtiti. Na sluqajan naqin biramo k brojeva iz skupa i biramo najvei od ih. Na isti naqin kao u specijalnom sluqaju, zak uqujemo da najvei od k elemenata pripada goroj polovini sa verovatnoom najmae 1 − 2 (on ne pripada goroj polovini akko goroj polovini ne pripada ni jedan od izabranih brojeva, odnosno sa verovatnoom najvixe 2 ). Na primer, ako je k = 10, verovatnoa uspeha je priblino 0.999, a za k = 20 ta verovatnoa je oko 0.999999. Ako je pak k = 100, onda je verovatnoa grexke za sve praktiqne svrhe zanemar iva. Verovatnoa grexke u programu, hardverske grexke, ili qak zem otresa za vreme izvrxavaa programa, vea je od 2 ' 10 . Imamo dakle algoritam koji bira broj iz gore polovine sa proizvo no velikom verovatnoom, a koji izvrxava najvixe 100 uporeivaa nezavisno od veliqine ulaza. Pri tome se pretpostav a da se sluqajni izbor jednog broja moe izvrxiti za konstantno vreme; generisae sluqajnih brojeva bie razmotreno u ode ku 5.8.1. Za ovakav algoritam obiqno se kae da je Monte Karlo algoritam. Netaqan rezultat moe se dobiti sa jako malom verovatnoom, ali je vreme izvrxavaa ovog Monte Karlo algoritma bo e nego za najbo i deterministiqki algoritam. Drugi tip probabilistiqkog algoritma je onaj koji nikad ne daje pogrexan rezultat, ali mu vreme izvrxavaa nije garantovano. Algoritam se moe izvrxiti brzo, ali se moe izvrxavati i proizvo no dugo. i
i
j
j
i
i
j
j
i
i
−k
−k
−100
−30
5.8. PROBABILISTIQKI ALGORITMI
121
Ovaj tip algoritma, koji sa obiqno zove Las Vegas, koristan je ako mu je oqekivano vreme izvrxavaa malo. U ode ku 5.8.2 bie razmotren Las Vegas algoritam koji rexava jedan problem bojea elemenata skupa. Ideja probabilistiqkih algoritama tesno je povezana sa izvoeem dokaza. Korixee verovatnoe za dokazivae kombinatornih tvrea je mona tehnika. U osnovi, ako se dokae da neki objekat iz skupa objekata ima verovatnou veu od nule, onda je to indirektan dokaz da postoji objekat sa tim osobinama. Ova ideja moe se iskoristiti za konstrukciju probabilistiqkog algoritma. Pretpostavimo da traimo objekat sa nekim osobinama, a znamo da ako generixemo sluqajni objekat, on e zadovo avati e eni uslov sa verovatnoom veom od nule (xto je probabilistiqki dokaz da traeni objekat postoji). Mi zatim pratimo probabilistiqki dokaz, generixui sluqajne dogaaje kad je potrebno, i na kraju nalazimo e eni objekat se nekom pozitivnom verovatnoom. Ovaj postupak moe se ponav ati vixe puta, sve do uspexnog pronalaea e enog objekta. 5.8.1. Sluqajni brojevi. Bitan elemenat probabilistiqkih algoritama je generisae sluqajnih brojeva. Potrebno je imati efikasne metode za rexavae ovog problema. Deterministiqka procedura generixe brojeve na fiksirani naqin, pa tako dobijeni brojevi ne mogu biti sluqajni u pravom smislu te reqi. Ti brojevi su meusobno povezani na sasvim odreeni naqin. Na sreu, to u praksi nije veliki problem: dovo no je koristiti tzv. pseudosluqajne brojeve. Ti brojevi generixu se deterministiqkom procedurom (pa dakle nisu pravi sluqajni brojevi), ali procedura generisaa je dovo no sloena, da druge aplikacije ne "oseaju" meuzavisnosti izmeu tih brojeva. Ovde neemo deta nije razmatrati dobijae sluqajnih brojeva. Jedan od naqina za dobijae pseudosluqajnih brojeva je linearni kongruentni metod. Prvi korak je izbor celog broja X kao prvog qlana niza, sluqajnog broja izabranog na neki nezavisan naqin (na primer, tekue vreme u mikrosekundama). Ostali brojevi izraqunavaju se na osnovu diferencne jednaqine X = aX + b (mod m), gde su a, b i m konstante, koje se moraju oprezno izabrati. I pored pa ivog izbora, ovakvi nizovi nisu dovo no kvalitetni ("sluqajni"). Alternativa su diferencne jednaqine vixeg stepena, odnosno vixeg reda (sa zavisnoxu od vixe prethodnih qlanova). Dobija se niz brojeva iz opsega od 0 do m − 1. Ako su potrebni sluqajni brojevi iz opsega od 0 do 1, onda se qlanovi ovog niza mogu podeliti sa m. 5.8.2. Jedan problem sa bojeem. Neka je S skup od n elemenata, i neka je S , S , . . . S kolekcija egovih razliqitih podskupova, od kojih svaki sadri taqno r elemenata, pri qemu je k ≤ 2 . Problem. Obojiti svaki elemenat skupa S jednom od dve boje, crvenom ili plavom, tako da svaki podskup S sadri bar jedan plavi i bar jedan crveni elemenat. 0
n
n−1
1
2
k
r−2
i
122
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
Bojee koje zadovo ava taj uslov zvaemo ispravnim bojeem. Ispostavlja se da pod navedenim uslovima ispravno bojee uvek postoji. Jednostavan probabilistiqki algoritam dobija se prepravkom probabilistiqkog dokaza postojaa takvog bojea: Obojiti svaki elemenat S sluqajno izabranom bojom, plavom ili crvenom, nezavisno od bojea ostalih elemenata. Jasno je da ovaj algoritam ne daje uvek ispravno bojee. Izraqunaemo verovatnou neuspeha. Verovatnoa da su svi elementi S obojeni crveno je 2 , a verovatnoa da su svi obojeni istom bojom (crvenom ili plavom) je 2 · 2 = 2 . Sluqajni dogaaj (podskup skupa svih 2 sluqajnih bojea | elementarnih dogaaja) A: "neki od skupova S je neispravno obojen" je unija svih sluqajnih dogaaja A : "skup S je neispravno obojen", za i = 1, 2, . . . , k, pa vai nejednakost i
−r
−r
1−r
n
i
i
P (A) ≤
k X
i
P (Ai ) =
k X
21−r = k21−r ≤ 2r−2 21−r =
1 . 2
Time je dokazano da ispravno bojee postoji (u protivnom bi verovatnoa neispravnog bojea bila taqno 1). Pored toga, vidi se da je ovaj probabilistiqki algoritam dobar. Ispravnost zadatog bojea lako se proverava: proveravaju se elementi svakog podskupa dok se ne pronau dva razliqito obojena elementa. Verovatnoa uspexnog bojea p = 1−P (A) je bar 1/2. Ako se u jednom pokuxaju ne dobije neispravno bojee, postupak (bojee) se ponav a. Oqekivani broj pokuxaja bojea je mai ili jednak od dva. Zaista, verovatnoa da se ispravno bojee pronae u j-tom pokuxaju je (1 − p) p, pa je matematiqko oqekivae broja pokuxaja i=1
i=1
j−1
∞ X j=1
j(1 − p)j−1 p =
1 ≤ 2. p
Opisani algoritam bojea je oqigledno Las Vegas algoritam, jer se bojea proveravaju jedno za drugim, a se traeem se zavrxava kad se naie na ispravno bojee. Ne postoji garancija uspexnog bojea u bilo kom fiksiranom broju pokuxaja, ali je ovaj algoritam u praksi ipak vrlo efikasan.
5.9. Rezime
U ovom poglav u razmatrano je dosta razliqitih oblasti | pretraga, sortirae, rangovske statistike, kompresija podataka, uporeivae stringova i probabilistiqki algoritmi. U svakoj oblasti prikazano je samo nekoliko osnovnih algoritama. U praksi problemi najqexe nisu tako jednostavni i nije ih tako lako formulisati. Zbog toga je neophodno izdvojiti samo glavne delove zadatog problema. Tehnike iskorixene u ovom poglav u sliqne su onima uvedenim u poglav u 4. Indukcija ponovo igra najvaniju ulogu. Mnogi problemi razmatrani u ovom poglav u imaju direktno rexee koje se moe dobiti uz malo napora; primeri su linearna pretraga i sortirae
ZADACI
123
izborom. Za male veliqine ulaza ova rexea su najqexe ne samo dovo no dobra, nego su i bo a od savrxenijih, komplikovanijih rexea. Meutim, kad je veliqina ulaza velika, vano je pokuxati sa pronalaeem bo ih rexea. Korixee linearne pretrage i kvadratnih algoritama za sortirae je uobiqajeno. Na nesreu, ti i drugi neefikasni algoritmi suvixe qesto se koriste i za velike ulaze.
Zadaci
5.1. Igraqi A i B igraju igru pogaaa brojeva: A zamix a proizvo an prirodni broj n, a B pokuxava da pogodi n postav aem xto maeg broja pitaa oblika "da li je broj x vei (mai) od n?". Predloite efikasnu strategiju za igraqa B. 5.2. Igraq A izabrao je na sluqajan naqin, sa ravnomernom raspodelom verovatnoa, prirodan broj k, 1 ≤ k ≤ 97. Igraq B pogaa broj k primeujui sledei algoritam: (1) na poqetku je a = 1, b = 97; (2) ako je a = b, traeni broj je k = a; (3) izraqunati m := b(a + b)/2c i postaviti pitae "Da li je k > m?"; ako jeste, a := m + 1; ako nije, b := m; u oba sluqaja nastaviti od (2). Koliki je oqekivani broj pitaa igraqa B? 5.3. Kiga ima 1999 strana. Zadatak je binarnom pretragom pronai stranicu x. Meutim, binarna pretraga nije idealna: kad se pretrauje opseg strana od m do n, onda se zbog grexke samo zna da je moduo razlike neparne strane na kojoj je kiga otvorena i b(m + n)/2c mai ili jednak od desetine broja strana u intervalu, odnosno od (n − m + 1)/10. Koliki broj otvaraa kige je dovo an? 5.4. Pretpostavimo da radimo sa programom koji obrauje velike tekstove. Program obrauje tekst sa ulaza kao niz znakova, i daje neki izlaz. U jednom trenutku program nailazi na grexku, posle koje ne moe da nastavi sa radom; pri tome program ne saopxtava kakva je grexka u pitau, ni gde je do e doxlo. Drugim reqima, jedino se vidi da se program zaustavio i odxtampao poruku "Grexka". Pretpostavimo da je grexka lokalna, tj. da do e dolazi zbog nekog kratkog dela teksta koji se programu ne svia, iz nepoznatog razloga | grexka ne zavisi od konteksta u kome se taj deo teksta nalazi. Na koji naqi se moe ustanoviti u kom delu teksta dolazi do grexke? 5.5. Navesti primer interpolacione pretrage (traee datog prirodnog broja z u ureenom nizu prirodnih brojeva x < x < · · · < x ) koja koristi Ω(n) uporeivaa. 5.6. Za svako n oblika n = 2 navesti primer niza x , x , . . . , x kod koga se pri sortirau objediavaem (slika 7) izvrxava maksimalni broj uporeivaa. 5.7. Uporedite sortirae objediavaem sa problemom odreivaa maksimuma skupa pravougaonih funkcija iz ode ka 4.6. Moe li se rexee jednog od tih problema iskoristiti kao "crna kutija" za rexavae drugog? 5.8. Formulisati invarijantu pet e u osnovnoj pet i algoritma Razdvajanje (slika 8), i dokazati korektnost algoritma. 5.9. Konstruisati ulaz na kome sortirae razdvajaem koristi Ω(n) uporeivaa, ako se za pivot uvek bira medijana prvog, posledeg i sredeg elementa niza. 5.10. Konstruisati algoritam za nalaee maksimalnog i minimalnog elementa u skupu, zasnovan na dekompoziciji. Za n = 2 algoritam treba da koristi najvixe 3n/2 uporeivaa. 5.11. Kodirati sledeu reqenicu optimalnim binarnim prefiksnim kodom: "Na vrh brda vrba mrda". 1
n
2
k
1
k
2
n
124
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
5.12. Odrediti edit rastojae stringova aabccbba i baacbabacc i nai bar jedan niz edit operacija minimalne duine koji prvu req transformixe u drugu. 5.13. Dat je niz prirodnih brojeva A[1], A[2], . . . , A[n] takav da je |A[i] − A[i + 1]| ≤ 1 za svako i, 1 ≤ i ≤ n. Neka je A[1] = x, A[n] = y, x < y i neka je dat broj z, x ≤ z ≤ y. Konstruisati efikasan algoritam za nalaee indeksa j takvog da je A[j] = z. Koliki maksimalni broj uporeivaa sa z se izvrxava? 5.14. Korixeem stabla odluqivaa izvesti dou granicu za broj koraka (u najgorem sluqaju) u algoritmu koji rexava problem iz zadatka 5.13, i uporediti ga sa sloenoxu konstruisanog algoritma. 5.15. Dat je skup S od n realnih brojeva. Konstruisati algoritam sloenosti O(n) za nalaee nekog broja koji nije u S. Dokazati da je Ω(n) doa granica za broj koraka potrebnih da se rexi ovaj problem. 5.16. Dat je skup S od n realnih brojeva, i realni broj x. (a) Konstruisati algoritam sloenosti O(n log n) za utvrivae da li u S postoje dva elementa kojima je zbir jednak x. (b) Ako su elementi S dati u rastuem redosledu, konstruisati algoritam koji rexava isti problem, a ima sloenost O(n). 5.17. Data su dva skupa realnih brojeva S i S i realni broj x. Ustanoviti da li postoje realni brojevi y ∈ S i y ∈ S takvi da im je zbir jednak x. Vremenska sloenost algoritma treba da bude O(n log n), gde je n ukupan broj elemenata u oba skupa. 5.18. Konstruisati algoritam sloenosti O(n log n) za nalaee unije dva skupa od po najvixe n elemenata. Izlaz treba da bude niz razliqitih elemenata unije (ni jedan elemenat se ne sme u nizu pojaviti vixe nego jednom). 5.19. Zadat je niz realnih brojeva x , x , . . . , x , pri qemu je n parno. Konstruisati algoritam za razlagae niza u n/2 parova na sledei naqin. Neka su sa s , s , . . . , s oznaqene sume brojeva u parovima, i neka je s = max{s , s , . . . , s }. Parove treba formirati tako da s ima najmau moguu vrednost. 5.20. Dat je niz brojeva x , x , . . . , x i niz razliqitih brojeva a , a , . . . , a iz skupa {1, 2, . . . , n} (permutacija tog skupa). Konstruisati algoritam sloenosti O(n log n) koji ureuje prvi niz u skladu sa redosledom odreenim drugim nizom, tj. na poziciji a u prvom nizu treba da se nae broj x , i = 1, 2, . . . , n. Prostorna sloenost algoritma treba da bude O(1). 5.21. Dato je d rastue ureenih nizova sa ukupno n elemenata. Konstruisati algoritam sloenosti O(n log d) za objediavae svih ovih nizova u jedan rastue ureeni niz. 5.22. Dat je niz od n prirodnih brojeva sa vixe ponav aa elemenata, tako da je broj razliqitih elemenata u nizu O(log n). (a) Konstruisati algoritam za sortirae ovakvih nizova, u kome se izvrxava najvixe O(n log log n) uporeivaa brojeva. (b) Zbog qega je sloenost ovog algoritma maa od doe granice Ω(n log n) za sortirae? 5.23. Binarno stablo sa n qvorova je uravnoteeno ako odgovara implicitno predstav enom stablu pomou niza duine n. Dokazati da je zbir f (n) visina svih qvorova uravnoteenog binarnog stabla sa n qvorova mai ili jednak od n − 1. Za koja stabla se u ovoj nejednakosti dostie jednakost? 5.24. Suma visina svih qvorova u hipu predstav enom implicitno (videti odeljak 5.3.5) moe se izraqunati direktno, koristei qienicu da je visina qvora na poziciji i u vektoru duine n jednaka blog (n/i)c. Odrediti sumu visina qvorova na ovaj naqin. 5.25. Dat je hip sa n elemenata (sa najveim elementom u korenu), i realni broj x. Konstruisati algoritam koji utvruje da li je k-ti najvei elemenat hipa mai ili jednak od x. Vremenska sloenost algoritma treba da bude O(k) (nezavisno od veliqine hipa), a 1
1
1
2
2
2
1
n
2
1
max
1
2
2
n/2
n/2
max
1
n
2
1
2
n
i
i
2
ZADACI
125
moe se koristiti memorijski prostor veliqine O(k) (nije potrebno odrediti k-ti najvei elemenat, nego samo ustanoviti egov odnos sa x). 5.26. Neka je A algoritam koji odreuje k-ti najvei od n elemenata x , x , . . . , x nizom uporeivaa. Pokazati da A prikup a dovo no informacija da se moe ustanoviti koji su elementi vei, a koji mai od k-tog najveeg (drugim reqima, skup se moe razloiti na vee i mae od k-tog najveeg, bez novih uporeivaa) 5.27. Ci je odrediti k-ti najmai elemenat sliqno kao u zadatku 5.26, ali ovog puta elimo da minimiziramo vreme izvrxavaa, i da pri tome koristimo vrlo mali prostor (ne obavezno minimalni). Ulaz je niz brojeva x , x , . . . , x koji se dobijaju jedan po jedan. Konstruisati algoritam srede vremenske sloenosti O(n) za izraqunavae k-tog najmaeg elementa, koji koristi samo O(k) memorijskih lokacija. Vrednost k unapred je poznata (pa se moe rezervisati dovo an memorijski prostor), ali se vrednost n ne zna do pojave posledeg elementa niza. 5.28. Neka su A i B dva skupa od po n elemenata, pri qemu se A quva u raqunaru P , a B u raqunaru Q. Raqunari mogu da komuniciraju razmeujui poruke, a mogu i da izvrxe bilo kakvo lokalno izraqunavae. Konstruisati algoritam koji odreuje n-ti najmai elemenat skupa A ∪ B (tj. medijanu). Moe se, zbog jednostavnosti, pretpostaviti da je A ∩ B = ∅. Ci je minimizirati broj poruka, pri qemu poruka moe da sadri jedan elemenat ili jedan celi broj. Koliki je broj poruka potreban u najgorem sluqaju? 5.29. Korixeem teorijsko-informacione granice pokazati da je Ω(log n) doa granica broja uporeivaa pri pronalaeu vrednosti i takve da je x = i u nizu x , x , . . . , x , ili utvrivau da takva vrednost ne postoji (problem je razmatran u ode ku 5.2). 5.30. Traee uzorka u tekstu u realnom vremenu. Pretpostavimo da se uzorak unosi (ukucava) znak po znak malom brzinom, a tekst je ve dat. Oqekuje se da traee u svakom trenutku napreduje koliko je najvixe mogue, ne qekajui da bude unesen kompletan uzorak. Drugim reqima, elimo da se pri unoxeu k-tog znaka uzorka ve nalazimo na prvoj poziciji u tekstu odakle se tekst poklapa sa prvih k − 1 znakova uzorka. Kako treba promeniti algoritam KMP da bi se postigao ovaj ci ? 5.31. Modifikovati algoritam KMP tako da pronae najvei prefiks uzorka P koji kao podstring postoji u tekstu S (drugim reqima, u tekstu S treba pronai najvei mogui prefiks uzorka P ). 5.32. Najvei zajedniqki podniz (LCS, skraenica od largest common subsequence ) dva niza T i P je najdui niz L koji je podniz oba niza T i P . Najmai zajedniqki nadniz (SCS, skraenica od smallest common supersequence ) dva niza T i P je najkrai niz L takav da su T i P egovi podnizovi. (a) Konstruisati efikasne algoritme za odreivae LCS i SCS dva data niza. (b) Neka je d(T, P ) edit rastojae izmeu T i P , pri qemu zamene nisu dozvo ene (dozvo ena su samo umetaa i brisaa znakova). Dokazati da je d(T, P ) = |SCS(T, P )| − |LCS(T, P )|, gde su |SCS(T, P )|, odnosno |LCS(T, P )| duine SCS, odnosno LCS nizova T i P. 5.33. Uopxtiti algoritam za nalaee edit rastojaa iz ode ka 5.6 na sluqaj kad se umetaa znakova na poqetku ili na kraju kraeg niza ne raqunaju. Drugim reqima, raquna se samo edit rastojae B i bilo kog ("najblieg") podniza A. 5.34. Problem uporeivaa nizova moe se uopxtiti na tri (ili vixe) nizova na sledei naqin. Data su tri niza A = a a . . . a , B = b b . . . b i C = c c . . . c . Potrebno je odrediti najmai skup edit operacija koji sva tri niza transformixe u jedan isti niz. Neka su A = a a . . . a i B = b b . . . b dva niza znakova. Oznaqimo sa A{i} niz 5.35. aa . . . a (tj. i-ti sufiks A). Neka je d edit rastojae nizova B i A{i}. Konstruisati algoritam sloenosti O(n ) za nalaee najmae vrednosti d , i = 1, 2, . . . , n. 1
1
n
2
1
i
1 2
1 2
i i+1
n
2
n
1 2
m
1 2
n
2
n
m
i
i
1 2
p
2
n
126
5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
5.36. Na raspolagau nam je procedura, koja za proizvo no k, 1 ≤ k ≤ n, generixe sluqajne brojeve iz opsega od 1 do k sa uniformnom raspodelom verovatnoe (RV). Zadatak je konstruisati algoritam za generisae sluqajne permutacije brojeva {1, 2, . . . , n} sa uniformnom RV. 5.37. Neka je E zadati niz brojeva x , x , . . . , x . Vixestrukost broja x u E je broj pojav ivaa x u E. Odrediti elemenat E vixestrukosti vee od n/2 ("preovlaujui elemenat") ili ustanoviti da takav elemenat ne postoji. 5.38. Neka je dat niz od n elemenata. Konstruisati algoritam sloenosti O(n) za pronalaee elementa koji se u nizu pojav uje vixe od n/4 puta. 1
2
n
Glava 6
Grafovski algoritmi 6.1. Uvod
U prethodnom poglav u razmatrali smo algoritme za rad sa nizovima i skupovima objekata. Analizirani su odnosi ureea, vixestrukosti, preklapaa i sliqni. U ovom poglav u razmatraemo komplikovanije odnose izmeu objekata. Za modelirae tih odnosa koristiemo grafove. Grafovi mogu da modeliraju mnogo situacija, i koriste se u razliqitim oblastima, od arheologije do socijalne psihologije. Prikazaemo vixe vanih osnovnih algoritama za obradu grafova i za izraqunavae nekih ihovih karakteristika. Pogledajmo najpre neke primere modeliraa pomou grafova. (1) Nalaee dobrog puta do nekog odredixta u gradu je grafovski problem. Ulice odgovaraju granama (usmerene grane u sluqaju jednosmernih ulica), a raskrsnice qvorovima. Svakom qvoru i svakoj grani (delu ulice) moe se pridruiti vreme potrebno za prolazak, pa se problem svodi na nalaee "najbreg" puta izmeu dva qvora. (2) Proces izvrxavaa nekog programa moe se podeliti na staa. Iz svakog staa moe se nastaviti na nekoliko naqina. Neka staa smatraju se nepoe nim. Problem utvrivaa koja staa mogu dovesti u nepoe na staa je grafovski problem u kome staima odgovaraju qvorovi, a grane ukazuju na mogue prelaske iz jednog u drugo stae. (3) Prav ee rasporeda qasova na fakultetu moe se posmatrati kao grafovski problem. Qvorovi odgovaraju grupama, a dve grupe su povezane ako postoji student koji namerava da ih obe pohaa, ili ako imaju zajedniqkog predavaqa. Problem je kako napraviti raspored po grupama tako da se minimiziraju konflikti. To je teak problem, za koji nije lako nai dobra rexea. Predstav ae grafova razmatrano je u ode ku 3.8. Najqexe emo koristiti predstav ae listom povezanosti, koja je efikasnija za retke grafove (odnosno grafove sa relativno malim brojem grana). Uvexemo najpre neophodne pojmove. Graf G = (V, E) sastoji se od skupa V qvorova, i skupa E grana . Svaka grana odgovara paru razliqitih qvorova (ponekad su dozvo ene pet e, odnosno grane koje vode od qvora ka emu samom; mi emo pretpostav ati da one nisu dozvo ene). Graf moe biti usmeren ili usmeren. Grane 127
128
6. GRAFOVSKI ALGORITMI
usmerenog grafa su ureeni parovi qvorova (koji se zovu krajevi grane); redosled dva qvora koje povezuje grana je bitan. Grane usmerenog grafa crtaju se kao strelice usmerene od jednog qvora (poqetka) ka drugom qvoru (kraju). Grane neusmerenog grafa su neureeni parovi: one se crtaju kao obiqne dui (linije). Stepen d(v) qvora v je broj grana susednih qvoru v (odnosno broj grana koje v povezuju sa nekim drugim qvorom). U usmerenom grafu razlikujemo ulazni stepen, broj grana za koje je qvor v kraj, i izlazni stepen, broj grana za koje je qvor v poqetak. Put od v do, vv );jeovenizgrane qvorova v , v , . . . , v povezanih granama (v , v ), (v , v ), . . . , (v se obiqno takoe smatraju delom puta. Put je prost, ako se svaki qvor u emu pojav uje samo jednom. Za qvor u se kae da je dostian iz qvora v ako postoji put (usmeren, odnosno neusmeren, zavisno od grafa) od v do u. Po definiciji je qvor v dostian iz v. Ciklus je put qiji se prvi i posledi qvor poklapaju. Ciklus je prost ako se, sem prvog i posledeg qvora, ni jedan drugi qvor u emu ne pojav uje dva puta. Neusmereni oblik usmerenog grafa G = (V, E) je isti graf, bez smerova na granama. Za graf se kae da je povezan ako (u egovom neusmerenom obliku) postoji put izmeu proizvo na dva qvora. Xuma je graf koji (u svom neusmerenom obliku) ne sadri cikluse. Stablo ili drvo je povezana xuma. Korensko stablo je usmereno stablo sa jednim posebno izdvojenim qvorom, koji se zove koren pri qemu su sve grane usmerene od korena. Graf H = (U, F ) je podgraf grafa G = (V, E) ako je U ⊂ V i F ⊂ E. Povezujue stablo neusmerenog grafa G je egov podgraf koji je stablo i sadri sve qvorove G. Povezujua xuma neusmerenog grafa G je egov podgraf koji je xuma i sadri sve qvorove G. Indukovani podgraf grafa G = (V, E) je egov podgraf H = (U, F ) takav da je U ⊂ V i F sadri sve grane iz E qija su oba kraja u U . Ako graf G = (V, E) nije povezan, onda se on moe na jedinstven naqin razloiti u skup povezanih podgrafova, koji se zovu komponente povezanosti grafa G. Skup qvorova komponente povezanosti je klasa ekvivalencije u odnosu na relaciju dostinosti za qvorove: komponentu povezanosti G kojoj pripada qvor v qine svi qvorovi dostini iz v. Komponenta povezanosti grafa G je maksimalni povezani podgraf G (odnosno takav podgraf koji nije pravi podgraf ni jednog drugog povezanog podgrafa G). Bipartitni graf je graf qiji se qvorovi mogu podeliti na dva disjunktna podskupa tako da u grafu postoje samo grane izmeu qvorova iz razliqitih podskupova. Teinski graf je graf qijim su granama pridrueni realni brojevi (teine, cene, duine, eng. weight, cost, length ). Mnoge definicije za usmerene i neusmerene grafove su sliqne, izuzev nekih oqiglednih razlika. Na primer, usmereni i neusmereni putevi definixu se na isti naqin, sem xto se kod usmerenih grafova specificiraju i smerovi grana. Znaqee takvih termina zavisi od konteksta; ako se, na primer, radi o putevima u usmerenom grafu, onda se misli na usmerene puteve. Razmotriemo najpre jednostavan problem, koji se smatra prvim problemom teorije grafova | obilazak Keningsberxkih mostova. Zatim emo se 1
2
3
k
k−1
k
1
2
k
1
2
6.2. OJLEROVI GRAFOVI
129
baviti obilascima grafova, ureeem qvorova grafa, nalaeem najkraih puteva u grafu i drugim problemima. U poglav u 8 razmatraju se veze grafovskih i algoritama sa matricama, pa je prikazano i nekoliko grafovskih algoritama.
6.2. Ojlerovi grafovi
Pojam Ojlerovih grafova u vezi je sa, kako se smatra, prvim rexenim problemom teorije grafova. Xvajcarski matematiqar Leonard Ojler naixao je na sledei zadatak 1736. godine. Grad Kenigsberg, danas Kaliingrad, lei na obalama i na dva ostrva na reci Pregel, kao xto je prikazano na slici 1. Grad je bio povezan sa sedam mostova. Pitae (koje je muqilo mnoge tadaxe graane Kenigsberga) bilo je da li je mogue poqeti xetu iz bilo koje taqke u gradu i vratiti se u polaznu taqku, prelazei pri tome svaki most taqno jednom. Rexee je dobijeno uopxtavaem problema. "Graf" na istoj slici, bar xto se ovog problema tiqe, ekvivalentan je sa planom grada (navodnici su upotreb eni jer ovaj "graf" ima vixestruke grane, pa strogo gledano po definiciji i nije graf; to je tzv. multigraf). Problem se moe ekvivalentno formulisati kao sledei problem iz teorije grafova: da li je mogue u povezanom grafu pronai ciklus, koji svaku granu sadri taqno jednom (Ojlerov ciklus). Ili: da li je mogue nacrtati graf sa slike 1 ne diui olovku sa papira, tako da olovka svoj put zavrxi na mestu sa koga je i krenula. Ojler je rexio problem, dokazavxi da je ovakav obilazak mogu ako i samo ako je graf povezan i svi egovi qvorovi imaju paran stepen. Takvi grafovi zovu se Ojlerovi grafovi. Poxto "graf" na slici 1 ima qvorove neparnog stepena, zak uqujemo da problem Kenigsberxkih mostova nema rexee. Dokaz teoreme indukcijom, koji sledi, daje efikasan algoritam za nalaee Ojlerovog ciklusa u grafu. A ®
C
© ª B
² D ±
Ab
¯ °
C b
bD b B
Ris. 1. Problem Kenigsberxkih mostova, i odgovarajui graf.
Problem. U zadatom neusmerenom povezanom grafu G = (V, E) qiji svi qvorovi imaju paran stepen, pronai zatvoreni put P , takav da se u emu svaka grana iz E pojav uje taqno jednom. Lako je pokazati da ako u grafu postoji Ojlerov ciklus, onda svi qvorovi grafa moraju imati paran stepen. Za vreme obilaska zatvorenog ciklusa, u svaki qvor se ulazi isto toliko puta koliko puta se iz ega izlazi. Poxto
130
6. GRAFOVSKI ALGORITMI
se svaka grana prolazi taqno jednom, broj grana susednih proizvo nom qvoru mora biti paran. Da bismo indukcijom dokazali da je uslov dovo an, moramo najpre da izaberemo parametar po kome e biti izvedena indukcija. Taj izbor treba da omogui smaivae problema, bez egove promene. Ako uklonimo qvor iz grafa, stepeni qvorova u dobijenom grafu nisu vixe svi parni. Trebalo bi da uklonimo takav skup grana S, da za svaki qvor v grafa broj grana iz S susednih sa v bude paran (makar i 0). Proizvo an ciklus zadovo ava ovaj uslov, pa se postav a pitae da li Ojlerov graf uvek sadri ciklus. Pretpostavimo da smo zapoqeli obilazak grafa iz proizvo nog qvora v proizvo nim redosledom. Sigurno je da e se obilazak ranije ili kasnije zavrxiti u qvoru v, jer kad god uemo u neki qvor, smaujemo egov stepen za jedan, qinimo ga neparnim, pa ga uvek moemo i napustiti. Naravno, ovakav obilazak ne mora da sadri sve grane grafa. Sada moemo da formulixemo induktivnu hipotezu i dokaemo teoremu. Induktivna hipoteza. Povezani graf sa < m grana qiji svi qvorovi imaju paran stepen, sadri Ojlerov ciklus, koji se moe pronai. Posmatrajmo graf G = (V, E) sa m grana. Neka je P neki ciklus u G, i neka je G graf dobijen uklaaem grana koje qine P iz grafa G. Stepeni svih qvorova u G su parni, jer je broj ukloenih grana susednih bilo kom qvoru paran. Ipak se induktivna hipoteza ne moe primeniti na graf G , jer on ne mora biti povezan, videti primer na slici 2. Neka su G , G , ..., G komponente povezanosti grafa G . U svakoj komponenti stepeni svih qvorova su parni. Pored toga, broj grana u svakoj komponenti je mai od m (ihov ukupan broj grana mai je od m). Prema tome, induktivna hipoteza moe se primeniti na sve komponente: u svakoj komponenti G postoji Ojlerov ciklus P , i mi znamo da ga pronaemo. Potrebno je sada sve ove cikluse objediniti u jedan Ojlerov ciklus za graf G. Polazimo iz bilo kog qvora ciklusa P ("magistralnog puta") sve dok ne doemo do nekog qvora v koji pripada komponenti G . Tada obilazimo komponentu G ciklusom P ("lokalnim putem") i vraamo se u qvor v . Nastav ajui na taj naqin, obilazei cikluse komponenti u trenutku nailaska na ih, na kraju emo se vratiti u polaznu taqku. U tom trenuku sve grane grafa G proene su taqno jednom, xto znaqi da je konstruisan Ojlerov ciklus. Algoritam ipak nije sasvim kompletan: potreban nam je efikasan metod za izdvajae komponenti povezanosti grafa, odnosno za obilazak grafa. Oba ova problema bie razmatrana u sledeem ode ku. 0
0
0
0 1
0
0 2
0 k
0 i
0 i
0 j
0 j
j
j
j
6.3. Obilasci grafova
Prvi problem na koji se nailazi pri konstrukciji bilo kog algoritma za obradu grafa je kako pregledati ulaz. U prethodnom poglav u taj problem bio je trivijalan zbog jednodimenzionalnosti ulaza | nizovi i skupovi mogu se lako pregledati linearnim redosledom. Pregledae grafa, odnosno egov
6.3. OBILASCI GRAFOVA e
e
e
131 e
e
e e
e
e
e
Ris. 2. Primer konstrukcije Ojlerovog puta indukcijom. Punom linijom izvuqene su grane pomonog ciklusa. Izbacivaem grana ovog ciklusa iz grafa, dobija se graf sa dve komponente povezanosti.
obilazak , nije trivijalan problem. Postoje dva osnovna algoritma za obilazak grafa: pretraga u dubinu i pretraga u xirinu. Vixe algoritama
iz ovog poglav a zasniva se na jednoj od ove dve tehnike. 6.3.1. Pretraga u dubinu. Pretraga u dubinu je praktiqno ista za neusmerene i usmerene grafove. Meutim, poxto elimo da ispitamo neke osobine grafova, koje nisu iste za neusmerene i usmerene grafove, razmatrae e biti pode eno na dva dela. 6.3.1.1. Neusmereni grafovi. Pretpostavimo da graf G = (V, E) odgovara umetniqkoj galeriji, koja se sastoji od niza hodnika sa slikama na zidovima. Grane G odgovaraju hodnicima, a qvorovi odgovaraju presecima hodnika. Mi hoemo da obiemo galeriju i vidimo sve slike. Pretpostavka je da u toku prolaska kroz hodnik u bilo kom smeru vidimo slike na oba egova zida. Ako je graf Ojlerov, mogue je obii galeriju poseujui svaki hodnik taqno jednom. Ovde se ne pretpostav a da je graf Ojlerov, a dozvo ava se prolazak iste grane vixe nego jednom (kao xto e se videti, svaka grana bie pregledana taqno dva puta). Ideja na kojoj se zasniva pretraga u dubinu je sledea. Prolazimo kroz galeriju trudei se da uemo u novi hodnik uvek kad je to mogue. Kada prvi put uemo u neku raskrsnicu, ostav amo kamenqi i nastav amo kroz neki drugi hodnik (izuzev ako je to hodnik { slepa ulica). Kad doemo do raskrsnice u kojoj ve postoji kamenqi, vraamo se istim putem nazad, i pokuxavamo kroz neki drugi hodnik. Ako su svi hodnici koji vode iz raskrsnice pregledani, onda uklaamo kamenqi iz raskrsnice i vraamo se hodnikom kroz koji smo prvi put uxli u raskrsnicu. Ovu raskrsnicu vixe neemo poseivati (kamenqi se uklaa zbog odravaa reda u galeriji; uklaae nije suxtinski deo algoritma). Uvek se trudimo da ispitujemo nove hodnike; kroz hodnik kojim smo prvi put uxli u raskrsnicu vraamo se tek kad smo proxli sve hodnike iz raskrsnice. Ovaj pristup zove se pretraga utendencijom dubinu (DFS , skraenica od depth–first–search ), xto je u vezi sa da se poseuju uvek novi hodnici (idui sve dub e u galeriju). Osnovni razlog upotreb ivosti pretrage u dubinu lei u enoj jednostavnosti i prilagod ivosti rekurzivnim algoritmima.
132
6. GRAFOVSKI ALGORITMI
Posle opisa pretrage u dubinu zasnovanog na obilasku galerije i ostav au kamenqia, razmotrimo isti problem za neusmereni graf zadat listom povezanosti. Obilazak zapoqie iz proizvo nog zadatog qvora r, korena pretrage u dubinu. Koren se oznaqava kao poseen. Zatim se bira proizvo ni neoznaqeni qvor r , susedan sa r, pa se iz qvora r rekurzivno startuje pretraga u dubinu. Iz nekog nivoa rekurzije izlazi se kad se naie na qvor v kome su svi susedi (ako ih ima) ve oznaqeni. Ako su u trenutku zavrxetka pretrage iz r , svi susedi qvora r oznaqeni, onda se pretraga za qvor r zavrxava. U protivnom, bira se sledei proizvo ni neoznaqeni sused r qvora r, izvrxava se pretraga polazei od r , itd. Pretraga grafa uvek se vrxi sa nekim ci em. Da bi se razliqite aplikacije uklopile u pretragu u dubinu, poseti qvora ili grane pridruuju se dve vrste obrade, ulazna obrada i izlaznu obradu. Ulazna obrada vrxi se u trenutku oznaqavaa qvora. Izlazna obrada vrxi se posle povratka nekom granom, ili kad se otkrije da neka grana vodi ve oznaqenom qvoru. Ulazna i izlazna obrada zavise od konkretne primene DFS. Ovi pojmovi omoguie nam rexavae nekoliko problema jednostavnim definisaem ulazne i izlazne obrade. Algoritam pretrage u dubinu dat je na slici 3. Polazni qvor za rekurzivnu pretragu je v. Zbog jednostavnosti se za poqetak pretpostav a da je graf povezan. Primer pretrage grafa u dubinu dat je na slici 4, pri qemu brojevi uz qvorove pokazuju redosled obilaska. Algoritam Ulaz: (neusmereni povezani graf) i (qvor grafa ). Izlaz: zavisi od primene. 1
1
1
2
2
DFS(G, v);
G = (V, E)
v
G
begin
end
oznaqi v; izvrxi ulaznu obradu na v; {ulazna obrada zavisi od primene DFS} for sve grane (v, w) do if w je neoznaqen then DF S(G, w); izvrxi izlaznu obradu za (v, w) {izlazna obrada zavisi od primene DFS} {ona se ponekad vrxi samo za grane ka novooznaqenim qvorovima}
Ris. 3. Pretraga u dubinu.
Lema 6.1. Ako je graf G povezan, onda e algoritmom pretrage u dubinu svi egovi qvorovi biti oznaqeni, a sve egove grane bie u toku izvrxavaa algoritma pregledane bar po jednom. Dokazatel~stvo. Pretpostavimo suprotno, i oznaqimo sa U skup neoznaqenih qvorova zaostalih posle izvrxavaa algoritma. Poxto je G povezan,
6.3. OBILASCI GRAFOVA
133
a : 1/10
d
a : b, g, c, d b : a, e, f, g c : a, h, i, d
b : 2/5
d
c : 7/9
d
d : 10/6
d
d : a, c, h, i e: b f : b, j, g
e : 3/1
d
f : 4/4
d
d g : 6/2
d h : 8/8
d i : 9/7
g : a, b, f, j h : c, i, d i : d, c, h j : f, g
j : 5/3
d
Ris. 4. Primer pretrage u dubinu. Dva broja uz qvor jednaka
su egovim rednim brojevima pri dolaznoj, odnosno odlaznoj DFS numeraciji. bar jedan qvor iz U mora biti povezan granom sa nekim oznaqenim qvorom. Meutim, ovako nexto je nemogue, jer kad god se poseti qvor, moraju biti poseeni (pa dakle i oznaqeni) svi egovi neoznaqeni susedi. Poxto su svi qvorovi poseeni, a kad se qvor poseti, onda se pregledaju sve grane koje vode iz ega, zak uqujemo da su i sve grane grafa pregledane. ¤ Za nepovezane grafove se algoritam DFS mora promeniti. Ako su svi qvorovi oznaqeni posle prvog pokretaa opisanog algoritma, onda je graf povezan, i obilazak je zavrxen. U protivnom, moe se pokrenuti nova pretraga u dubinu polazei od proizvo nog neoznaqenog qvora, itd. Prema tome, DFS se moe iskoristiti da bi se ustanovilo da li je graf povezan, odnosno za pronalaee svih egovih komponenti povezanosti. Odgovarajui algoritam dat je na slici 5. Mi emo najqexe razmatrati samo povezane grafove, jer se u opxtem sluqaju problem svodi na posebnu obradu svake komponente povezanosti. Dakle, koristiemo DFS u obliku sa slike 3, ne spomiui eksplicitno da se pretraga mora vixe puta pokretati kao na slici 5. Sloenost. Lako je uveriti se da se svaka grana pregleda taqno dva puta, po jednom sa svakog kraja. Prema tome, vremenska sloenost je proporcionalna broju grana. S druge strane, broj rekurzivnih pokretaa algoritma je |V |, pa se sloenost algoritma moe opisati izrazom O(|V | + |E|). 6.3.1.2. Konstrukcija DFS stabla. Prikazaemo sada dve jednostavne primene DFS | numeraciju qvorova grafa DFS brojevima, i formirae specijalnog povezujueg stabla, takozvanog DFS stabla. DFS brojevi i DFS stablo imaju posebne osobine, koje su korisne u mnogim algoritmima. Qak i ako se stablo ne formira eksplicitno, mnoge algoritme je lakxe razumeti razmatrajui DFS stablo. Da bi se opisali ovi algoritmi, dovo no je zadati bilo
134
6. GRAFOVSKI ALGORITMI
Algoritam Ulaz: (neusmereni graf). Izlaz: za svaki qvor dobija vrednost jednaku rednom broju komponente Komponente povezanosti(G);
G = (V, E) v.Komp
v
povezanosti koja sadri v.
begin
Rb komp := 1;
postoji neoznaqen qvor v do {sa sledeom ulaznom obradom:}
while
DF S(G, v);
{v.Komp := Rb komp;}
Rb komp := Rb komp + 1; end
Ris. 5. Algoritam za nalaee komponenti povezanosti grafa.
ulaznu, bilo izlaznu obradu. Postoje dve varijante DFS numeracije: qvorovi se mogu numerisati prema redosledu oznaqavaa (dolazna DFS numeracija, ili prema redosledu napuxtaa (odlazna DFS numeracija. Algoritam za dobijae obe DFS numeracije qvorova grafa dat je na slici 6, a primer grafa sa qvorovima numerisanim na dva naqina prikazan je na slici 4. Algoritam za formirae DFS stabla prikazan je na slici 7. Naravno, ova dva algoritma ne moraju se izvrxavati odvojeno. Algoritam Ulaz: (neusmereni graf) i (qvor ). Izlaz: za svaki qvor raqunaju se egovi redni brojevi i DFS numeracija(G, v);
G = (V, E)
v
G
v
pri dolaznoj, odnosno odlaznoj numeraciji. Inicijalizacija DF S pre := 1; DF S post := 1; Pokrenuti DFS sa sledeom ulaznom i izlaznom obradom: ulazna obrada:
v.P re
v.P ost
v.P re := DF S pre;
DF S pre := DF S pre + 1;
izlazna obrada: if w je posledi na listi suseda v
then
v.P ost := DF S post;
DF S post := DF S post + 1;
Ris. 6.
numeracija qvorova grafa. Qvor v zove se predak qvora w u stablu T sa korenom r ako je v na jedinstvenom putu od w do r u T . Ako je v predak w, onda je w potomak v. DFS stablo obuhvata sve qvorove grafa G. Redosled sinova svakog qvora u stablu DFS
6.3. OBILASCI GRAFOVA
Algoritam Ulaz: (neusmereni graf) i (qvor ). Izlaz: ( stablo grafa ; na poqetku je prazno).
135
DFS stablo(G, v);
G = (V, E)
v
T DFS
G
G
T
Pokrenuti DFS sa sledeom izlaznom obradom: izlazna obrada: if w je bio neoznaqen then dodati granu (v, w) u T ; {goru naredbu treba dodati u if naredbu algoritma DF S}
Ris. 7. Formirae DFS stabla grafa.
zadat je listom povezanosti koja specificira graf G, pa se za svaka dva meu ima moe rei koji je od ih levi (prvi po tom redosledu), a koji desni. Relacija levi{desni se prenosi na proizvo na dva qvora u i v koji nisu jedan ispod drugog (odnosno u relaciji predak{potomak), videti sliku 8. Za ih tada postoji jedinstveni zajedniqki predak w u DFS stablu, kao i sinovi u i v qvora w takvi da je u predak u i v predak v . Kaemo da je u levo od v ako i samo ako je u levo od v . Jasna je geometrijska interpretacija ove relacije: moemo da zamislimo da se DFS stablo iscrtava nanie dok se prelazi u nove { neoznaqene qvorove (koraci u dubinu), odnosno sleva udesno prilikom dodavaa novih grana posle povratka u ve oznaqene qvorove. Dolazna DFS numeracija qvorova neposredno je povezana sa uvedenom relacijom. Neka su u.P re, v.P re redni brojevi u, v prema dolaznoj DFS numeraciji. Ako je qvor u levo od qvora v , onda je on prilikom pretrage dostignut pre qvora v , pa je u.P re < v.P re. Obrnuto ne vai uvek: ako je u.P re < v.P re, onda je u levo od v , ili je u predak v u DFS stablu (tj. iznad v ). 0
0
0
0
0
0
r d
dw
d d
d 0 u
d
v0 d d
u d
d dv
Ris. 8. Uz definiciju relacije "levo{desno" na skupu qvorova DFS stabla. Lema 6.2 (Osnovna osobina DFS stabla neusmerenog grafa). Neka je G = (V, E) povezan neusmeren graf, i neka je T = (V, F ) DFS stablo grafa G dobijeno algoritmom DF S stablo. Svaka grana e ∈ E pripada T (tj. e ∈ F ) ili spaja dva qvora grafa G, od kojih je jedan predak drugog u T .
136
6. GRAFOVSKI ALGORITMI
Dokazatel~stvo. Neka je (v, u) grana u G, i pretpostavimo da je u toku
poseen pre u. Posle oznaqavaa v, u pet i se rekurzivno pokree DFS iz svakog neoznaqenog suseda v. U trenutku kad doe red na suseda u, ako je u oznaqen, onda je u potomak v u T , a u protivnom, se iz u startuje DFS, pa u postaje sin v. ¤ DFS v
Tvree leme moe se preformulisati na sledei naqin: grane grafa ne mogu biti popreqne grane za DFS stablo, odnosno grane koje povezuju qvorove na razliqitim putevima od korena (ili: takva dva qvora u i v da je npr. u levo od v). Poxto je DFS vrlo vaan algoritam, dajemo i nerekurzivnu varijantu egove realizacije. Osnovna alatka za realizaciju rekurzivnog programa je stek, na kome se quvaju informacije potrebne za "razmotavae" rekurzivnih poziva. Prevodilac obezbeuje prostor na steku za lokalne podatke pridruene svakoj kopiji rekurzivne procedure. Zbog toga, kad se zavrxi sa jednim rekurzivnim pozivom procedure, mogu je povratak na taqno odreeno mesto u pozivajuoj proceduri (koja moe da bude druga kopija iste rekurzivne procedure). Qesto nije neophodno sve lokalne podatke quvati na steku, pa se ispostav a da su nerekurzivne procedure efikasnije. Osnovna potexkoa pri prevoeu rekurzivne u nerekurzivnu verziju potiqe od neophodnosti eksplicitnog pamea podataka, koji se inaqe quvaju na steku. DFS proceduru pozivali smo rekurzivno unutar for pet e, a od programa smo oqekivali da zapamti taqno mesto u pet i, gde treba nastaviti posle rekurzivnog poziva. U nerekurzivnoj verziji se ti podaci moraju eksplicitno pamtiti. Pretpostav amo da svaki qvor v ima povezanu listu susednih grana (DFS prati redosled grana u listi). Pokazivaq na poqetak teˇliste je v.P rvi. ˇSvaki elemenat liste je slog koji sadri dve promen ive: Cvor i N aredni; Cvor je ime qvora na drugom kraju grane, a N aredni je pokazivaq na naredni elemenat liste. Posledi elemenat liste N aredni ima vrednost nil. DFS se izvrxava kao i ranije, silazei niz stablo sve do dolaska u "slepu ulicu". Za registrovae dostignutog nivoa pretrage koristi se stek. U toku obilaska na steku se quvaju svi qvorovi na putu od korena do tekueg qvora, onim redom kojim su na putu. Izmeu svaka dva qvora Otac i Sin stek sadri pokazivaq na granu iz Otac koja e biti sledea pregledana posle povratka iz Sin. Nerekurzivna verzija DFS prikazana je na slici 9. 6.3.1.3. Usmereni grafovi. Procedura pretrage u dubinu usmerenih grafova ista je kao za neusmerene grafove. Meutim, usmerena DFS stabla imaju nexto drugaqije osobine. Za ih, na primer, nije taqno da nemaju popreqne grane, xto se moe videti iz primera na slici 10. Grane grafa mogu se podeliti na qetiri vrste: grane stabla, povratne, direktne i popreqne. Prve tri vrste grana povezuju dva qvora od kojih je jedan potomak drugog u stablu: grana stabla povezuje oca sa sinom, povratna grana potomka sa pretkom, a direktna grana pretka sa potomkom. Jedino popreqne grane povezuju qvorove
6.3. OBILASCI GRAFOVA
Algoritam Ulaz: (neusmereni graf) i (qvor grafa ). Izlaz: zavisi od primene.
137
Nerek DFS(G, v);
G = (V, E)
begin
v
G
postoji neoznaqeni qvor w do neoznaqen then w := v; {pretraga poqie od v} oznaqi w; izvrxi ulaznu obradu na w; Grana := w.P rvi; {pokazivaq na prvu granu iz w} upixi na stek w i Grana; Otac := w; {poqetak osnovne pet e rekurzije} while stek nije prazan do skini Grana sa vrha steka; while Grana 6= nil do {dok ima nepregledanih grana iz qvora} ˇ Sin := Granaˆ.Cvor; if Sin nije oznaqen then {korak u dubinu} oznaqi Sin; izvrxi ulaznu obradu na Sin; upixi Granaˆ.N aredni na vrh steka; {sledea, kad se obradi Sin} {za nastavak po zavrxetku obrade Sin}
while
if v
Grana := Sin.P rvi; Otac := Sin;
end
upixi Otac na vrh steka {novooznaqeni qvor}; else {Grana je povratna grana}; izvrxi izlaznu obradu za (Otac, Sin); {ovo se preskaqe ako se izlazna obrada radi samo za grane stabla} Grana := Granaˆ.N aredni; {na vrhu steka su posledi oznaqeni qvor i sledea grana iz ega} skini Sin sa vrha steka; {korak nazad} if stek nije prazan then {stek postaje prazan kad je Sin koren} neka su Grana i Otac na vrhu steka; {ne uklaati ih sa steka} izvrxi izlaznu obradu za (Otac, Sin)
Ris. 9. Nerekurzivni algoritam pretrage u dubinu. koji nisu "srodnici" u stablu. Popreqne grane, meutim, moraju biti usmerene "zdesna ulevo", kao xto pokazuje sledea lema.
138
6. GRAFOVSKI ALGORITMI d
grana stabla dª K
R
d direktna povratna
? d
dª ¾
Ris. 10.
grana ulevo
d?
R? dª
stablo usmerenog grafa. Lema 6.3 (Osnovna osobina usmerenih DFS stabala). Neka je G = (V, E) usmereni graf, i neka je T = (V, F ) DFS stablo grafa G. Ako je (v, w) ∈ E grana grafa G za koju vai v.P re < w.P re, onda je w potomak v u stablu T . Dokazatel~stvo. Poxto je prema dolaznoj DFS numeraciji v ispred w, w je oznaqen posle v . Grana grafa (v, w) mora biti razmatrana u toku rekurzivnog poziva DFS iz qvora v. Ako u tom trenutku qvor w nije bio oznaqen, onda se grana (v, w) mora uk uqiti u stablo, tj. (v, w) ∈ F , pa je tvree leme taqno. U protivnom, w je oznaqen u toku izvoea rekurzivnog poziva DFS iz v , pa w mora biti potomak v u stablu T . ¤ DFS za povezan neusmereni graf, startovana iz proizvo nog qvora, obilazi ceo graf. Analogno tvree ne mora biti taqno za usmerene grafove. Posmatrajmo usmereni graf na slici 11. Ako se DFS zapoqne iz qvora v, onda e biti dostignuti samo qvorovi u desnoj koloni. DFS moe da dostigne sve qvorove grafa samo ako se zapoqne iz qvora a. Ako se qvor a ukloni iz grafa zajedno sa dve grane koje izlaze iz ega, onda vixe nee postojati qvor iz koga DFS obilazi ceo graf. Prema tome, uvek kad govorimo o DFS usmernog grafa, smatraemo da je DFS pokrenuta toliko puta koliko je potrebno da bi svi qvorovi bili oznaqeni i sve grane bile razmotrene. Dakle, u opxtem sluqaju graf umesto DFS stabla ima DFS xumu. Nepostojae grana grafa koje idu sleva udesno govori nexto zanim ivo i korisno o odlaznoj numeraciji qvorova grafa i o qetiri vrste grana u odnosu na DFS stablo. Na slici 12(a) prikazana su tri qvora grafa u, v i w u DFS obilasku grafa. Qvorovi v i w su potomci qvora u, a qvor w je desno od qvora v . Na slici 12(b) prikazani su vremenski intervali trajaa rekurzivnih poziva DFS za svaki od ovih qvorova. Zapaamo da DFS za potomka, kao xto je v, aktivna samo u podintervalu vremena za koje je DFS aktivna za pretka, kao xto je u. Specijalno, DFS iz v zavrxava se pre DFS iz u. Prema tome, iz qienice da je v potomak u sledi da je v.P ost < u.P ost. Pored toga, ako DFS
6.3. OBILASCI GRAFOVA a d
-d
v -d
? d
d -?
- d?
? d
-? d
- d?
139
Ris. 11. Primer kad DFS usmerenog grafa ne obilazi kompletan graf. je w desno od v, onda poziv DFS iz w ne moe biti aktiviran pre nego xto se zavrxi DFS iz v. Prema tome, ako je v levo od w, onda je v.P ost < w.P ost. Iako to nije pokazano na slici 12, isti zak uqak je taqan i ako su v i w u razliqitim stablima DFS xume, pri qemu je stablo qvora v levo od stabla qvora w. º· u
¹¸ º·
º·
v
w
¹¸
¹¸
(a) Tri qvora u DFS stablu trajae DFS iz v
trajae DFS iz w
trajae DFS iz u (b) Aktivni intervali za ihove pozive DFS
Ris. 12. Odnos izmeu poloaja qvora u DFS stablu i trajaa rekurzivnih poziva. Razmotrimo sada za svaku granu (u, v) odnos odlaznih DFS brojeva qvorova u i v. (1) Ako je (u, v) grana stabla ili direktna grana, onda je v potomak u, pa je v.P ost < u.P ost.
140
6. GRAFOVSKI ALGORITMI
(2) Ako je (u, v) popreqna grana, onda je zbog toga xto je v levo od u, ponovo v.P ost < u.P ost. (3) Ako je (u, v) povratna grana i v 6= u, onda je v pravi predak u i v.P ost > u.P ost. Meutim, v = u je mogue za povratnu granu, jer je i pet a povratna grana. Prema tome, za povratnu granu (u, v) znamo da je v.P ost ≥ u.P ost. Prema tome, dokazano je sledee tvree. Lema 6.4. Grana (u, v) usmerenog grafa G = (V, E) je povratna ako i samo ako prema odlaznoj numeraciji qvor u prethodi qvoru v, odnosno u.P ost ≤ v.P ost. Pokazaemo sada kako se DFS moe iskoristiti za utvrivae da li je zadati graf acikliqki. Problem. Za zadati usmereni graf G = (V, E) ustanoviti da li sadri usmereni ciklus. Lema 6.5. Neka je G = (V, E) usmereni graf, i neka je T DFS stablo grafa G. Tada G sadri usmereni ciklus ako i samo ako G sadri povratnu granu (u odnosu na T ). Dokazatel~stvo. Ako je grana (u, v) povratna, onda ona zajedno sa granama stabla na putu od v do u zatvara ciklus. Suprotno tvree je takodje taqno: ako u grafu postoji ciklus, tada u emu mora da postoji povratna grana. Zaista, pretpostavimo da u grafu postoji ciklus koji qine grane (v , v ), (v , v ),... (v , v ). Ako je k = 1, odnosno ciklus je pet a, onda je grana (v, v) povratna grana. Ako je pak k > 1, pretpostavimo da ni jedna od grana (v , v ), (v , v ),... (v , v ) nije povratna. Prema prethodnoj lemi je tada v .P ost > v .P ost > · · · > v .P ost, odnosno v .P ost < v .P ost, pa je grana (v , v ) povratna. Time je dokazano da u svakom ciklusu postoji povratna grana. ¤ Algoritam za proveru da li graf sadri ciklus svodi se na DFS numeraciju i proveru postojaa povratne grane na osnovu leme, videti sliku 13. 6.3.2. Pretraga u xirinu. Pretraga u xirinu (ili BFS, xto je skraenica od breadth–first–search ) je obilazak grafa na sistematiqan naqin, nivo po nivo. Ako polazimo od qvora v, onda se najpre poseuju svi susedi v (deca u stablu pretrage, nivo jedan). Zatim se dolazi do svih "unuka" (nivo dva), i tako da e (videti sliku 14). Obilazak se realizuje sliqno kao u nerekurzivnoj verziji DFS, sem xto je stek zameen listom FIFO (skraenica od first–in–first–out queue ). Prilikom obilaska qvorovi se mogu numerisati BFS brojevima, sliqno kao pri DFS. Preciznije, qvor w ima BFS broj k ako je on k-ti qvor oznaqen u toku BFS. BFS stablo grafa moe se formirati uk uqivaem samo grana ka novooznaqenim qvorovima. Algoritam BFS dat je na slici 15. Zapaa se da ovde nema smisla izlazna obrada 1
2
2
3
1
1
k
k
2
2
2
1
1
3
k−1
k
k
k
1
Algoritam Ulaz: Izlaz:
6.3. OBILASCI GRAFOVA
141
Acikl(G);
(usmereni graf). P ostoji ciklus (taqno ako G sadri ciklus i netaqno u protivnom). Inicijalizacija: v.N a putu := f alse za sve qvorove i P ostoji ciklus := f alse; Pokrenuti DFS iz proizvo nog qvora, sa sledeom ulaznom i izlaznom obradom: ulazna obrada: if iz v izlazi bar jedna grana then v.N a putu := true; {x.N a putu je taqno ako je x na putu od korena do tekueg qvora} izlazna obrada: if w.N a putu then P ostoji ciklus := true; halt; if w posledi qvor u spisku suseda v then v.N a putu := f alse; G = (V, E)
Ris. 13. Algoritam za proveru da li graf sadri ciklus.
kao kod DFS; pretraga nema povratak "navixe", ve se kree samo nanie od korena. d Nivo 0 dª K
Rd
? d
dª ¾
Ris. 14.
? d
Nivo 1 Nivo 2
R? dª
stablo usmerenog grafa. Lema 6.6. Ako grana (u, w) pripada BFS stablu i qvor u je otac qvora w, onda qvor u ima minimalni BFS broj meu qvorovima iz kojih postoji grana ka w. Dokazatel~stvo. Ako bi u grafu postojala grana (v, w), pri qemu v ima mai BFS broj od u, onda bi u trenutku obrade v na listu morao biti stav en qvor w, pa bi grana (v, w) morala biti uk uqena u stablo, suprotno pretpostavci. ¤ Lema 6.7. Put od korena r BFS stabla do proizvo nog qvora w kroz BFS stablo najkrai je put od r do w u grafu G. BFS
142
6. GRAFOVSKI ALGORITMI
Algoritam Ulaz: (neusmereni povezani graf) i (qvor grafa ). Izlaz: zavisi od primene. BFS(G, v);
G = (V, E)
v
G
begin
end
oznaqi v; upixi v u listu; {FIFO lista, prvi unutra { prvi napo e} while lista je neprazna do skini prvi qvor w sa liste; izvrxi ulaznu obradu na w; {ulazna obrada zavisi od primene BFS} for sve grane (w, x) za koje x nije oznaqen do oznaqi x; dodaj (w, x) u stablo T ; upixi x u listu;
Ris. 15. Pretraga u xirinu (BFS). Dokazatel~stvo. Indukcijom po d dokazaemo da do svakog qvora w na
rastojau d od korena r (jedinstveni) put kroz stablo od r do v ima duinu . Za d = 1 tvree je taqno: grana (r, w) je obavezno deo stabla, pa izmeu i w postoji put kroz stablo duine 1. Pretpostavimo da je tvree taqno za qvorove koji su na rastojau maem od d od korena, i neka je w neki qvor na rastojau d od korena, tj. postoji niz qvorova w = r, w , w , . . . , w = w koji qine put duine d od r do w. Prema induktivnoj hipotezi put od r do w kroz stablo ima duinu d − 1. U trenutku obrade qvora w , poxto u G postoji grana (w , w ), ta grana se uk uquje u BFS stablo, pa do qvora w postoji put duine d kroz stablo. ¤ Nivo qvora w je duina puta u stablu od korena do w. Pretraga u xirinu obilazi graf nivo po nivo. Lema 6.8. Ako je (v, w) grana iz E koja ne pripada T , onda ona spaja dva qvora qiji se nivoi razlikuju najvixe za jedan. Dokazatel~stvo. Neka je npr. qvor v prvi dostignut pretragom i neka je egov nivo d. Tada je nivo qvora w vei ili jednak od d. Taj nivo jednak je rastojau w od korena, pa je mai ili jednak od d + 1, jer do w postoji put duine d + 1 (put od korena do v produen granom (v, w)). ¤ Razmotriemo sada nekoliko algoritama za obradu grafova. d r
0
d−1
1
2
d
d−1
d−1
d
6.4. Topoloxko sortirae
d
Pretpostavimo da je zadat skup poslova na qiji redosled izvrxavaa su zadata neka ograniqea. Neki poslovi zavise od drugih, odnosno ne mogu se
6.4. TOPOLOXKO SORTIRA E
143
zapoqeti pre nego xto se ti drugi poslovi zavrxe. Sve zavisnosti su poznate, a ci je napraviti takav redosled izvrxavaa poslova koji zadovo ava sva zadata ograniqea; drugim reqima, trai se takav raspored, da se po emu svaki posao zapoqie tek kad budu zavrxeni svi poslovi od kojih on zavisi. Potrebno je konstruisati efikasni algoritam za formirae takvog rasporeda. Problem se zove topoloxko sortirae. Zadatim poslovima i ihovim meuzavisnostima moe se na prirodan naqin pridruiti graf. Svakom poslu pridruuje se qvor, a usmerena grana od posla x do posla y postoji ako se posao y ne moe zapoqeti pre zavrxetka posla x. Jasno je da graf mora biti acikliqki, (bez usmerenih ciklusa), jer se u protivnom neki poslovi nikada ne bi mogli zapoqeti. Problem. U zadatom usmerenom acikliqkom grafu G = (V, E) sa n qvorova numerisati qvorove od 1 do n, tako da ako je proizvo an qvor v numerisan sa k, onda svi qvorovi do kojih postoji usmereni put iz v imaju broj vei od k. Prirodna je sledea induktivna hipoteza. Induktivna hipoteza. Umemo da numerixemo na zahtevani naqin qvorove svih usmerenih acikliqkih grafova sa mae od n qvorova. Bazni sluqaj jednog qvora, odnosno posla, je trivijalan. Kao i obiqno, posmatrajmo proizvo ni graf sa n qvorova, uklonimo jedan qvor, primenimo induktivnu hipotezu i pokuxajmo da proxirimo numeraciju na polazni graf. Imamo slobodu izbora n-tog qvora. Trebalo bi ga izabrati tako da ostatak posla bude xto jednostavniji. Potrebno je numerisati qvorove. Koji qvor je najlakxe numerisati? To je oqigledno qvor (posao) koji ne zavisi od drugih poslova, odnosno qvor sa ulaznim stepenom nula; emu se moe dodeliti broj 1. Da li se uvek moe pronai qvor sa ulaznim stepenom nula? Intuitivno se namee potvrdan odgovor, jer se sa oznaqavaem negde mora zapoqeti. Sledea lema potvruje ovu qienicu. Lema 6.9. Usmereni acikliqki graf uvek ima qvor sa ulaznim stepenom nula. Dokazatel~stvo. Ako bi svi qvorovi grafa imali pozitivne ulazne stepene, mogli bismo da krenemo iz nekog qvora "unazad" prolazei grane u suprotnom smeru. Meutim, broj qvorova u grafu je konaqan, pa se u tom obilasku mora u nekom trenutku naii na neki qvor po drugi put, xto znaqi da u grafu postoji ciklus. Ovo je meutim suprotno pretpostavci da se radi o acikliqkom grafu. Na sliqan naqin zak uquje se da u grafu mora postojati i qvor sa izlaznim stepenom nula. ¤ Pretpostavimo da smo pronaxli qvor sa ulaznim stepenom nula. Numeriximo ga sa 1, uklonimo sve grane koje vode iz ega, i numeriximo ostatak grafa (koji je takoe acikliqki) brojevima od 2 do n (prema induktivnoj hipotezi oni se mogu numerisati od 1 do n − 1, a zatim se svaki redni broj
144
6. GRAFOVSKI ALGORITMI
moe poveati za jedan). Vidi se da je posle izbora qvora sa ulaznim stepenom nula, ostatak posla jednostavan. Realizacija. Jedini problem pri realizaciji je kako pronai qvor sa ulaznim stepenom nula i kako popraviti ulazne stepene qvorova posle uklaaa grane. Svakom qvoru moe se pridruiti promen iva (po e) U lStepen, tako da je na poqetku v.U lStepen jednako ulaznom stepenu qvora v. Poqetne vrednosti promeivih U lStepen mogu se dobiti prolaskom kroz skup svih grana proizvo nim redosledom (korixeem DFS, na primer) i poveavaem za jedan w.U lStepen svaki put kad se naie na granu (v, w). Qvorovi sa ulaznim stepenom nula stav aju se u listu (ili stek, xto je jednako dobro). Prema lemi 6.9 u grafu postoji bar jedan qvor v sa ulaznim stepenom nula. Qvor v se kao prvi u listi lako pronalazi; on se uklaa iz liste. Zatim se za svaku granu (v, w) koja izlazi iz v brojaq w.U lStepen smauje za jedan. Ako brojaq pri tome dobije vrednost nula, qvor w stav a se u listu. Posle uklaaa qvora v graf ostaje acikliqki, pa u emu prema lemi 6.9 ponovo postoji qvor sa ulaznim stepenom nula. Algoritam zavrxava sa radom kad lista sa qvorovima stepena nula postane prazna, jer su u tom trenutku svi qvorovi numerisani. Algoritam je prikazan na slici 16. Algoritam Ulaz: (usmereni acikliqki graf). Izlaz: za svaki qvor dobija vrednost u skladu sa topoloxkim sortiraem . Top sort(G);
G = (V, E) v.Rb
v
G
begin
Inicijalizovati v.U lStepen za sve qvorove; {npr. pomou DFS} G rb := 0;
for i := 1 to n do if vi .U lStepen = 0 then
lista nije prazna skini qvor v iz liste;
while
stavi v u listu; i
G rb := G rb + 1; v.Rb := G rb; for
sve grane (v, w) do
w.U lStepen := w.U lStepen − 1; if w.U lStepen = 0 then end
stavi w u listu;
Ris. 16. Algoritam za topoloxko sortirae acikliqkog usmerenog grafa. Sloenost. Sloenost izraqunavaa poqetnih vrednosti promen ivih U lStepen je O(|V | + |E|). Za nalaee qvora sa ulaznim stepenom nula potrebno je konstantno vreme (pristup listi). Svaka grana (v, w) razmatra se taqno
6.5. NAJKRAI PUTEVI IZ ZADATOG QVORA
145
jednom, u trenutku kad se v uklaa iz liste. Prema tome, broj promena vrednosti U lStepen jednak je broju grana u grafu. Vremenska sloenost algoritma je dakle O(|V | + |E|), odnosno linearna je funkcija od veliqine ulaza.
6.5. Najkrai putevi iz zadatog qvora
U ovom ode ku baviemo se teinskim grafovima. Neka je G = (V, E) usmereni graf sa nenegativnim teinama pridruenim granama. Ovde emo teine zvati duinama, poxto operixemo duinama puteva kao zbirovima duina grana (ne brojevima grana). Ako je graf neusmeren, moemo ga smatrati usmerenim, pri qemu svakoj egovoj neusmerenoj grani odgovaraju dve usmerene grane iste duine, u oba smera. Prema tome, razmatrae u ovom ode ku odnosi se i na neusmerene grafove. Problem. Za dati usmereni graf G = (V, E) i zadati egov qvor v pronai najkrae puteve od v do svih ostalih qorova G. Zbog jednostavnosti emo se baviti samo nalaeem duina najkraih puteva. Algoritmi se mogu proxiriti tako da pronalaze i same najkrae puteve. Postoji mnogo situacija u kojima se pojav uje ovaj problem. Na primer, graf moe odgovarati auto{karti: qvorovi su gradovi, a duine grana su duine direktnih puteva izmeu gradova (ili vreme potrebno da se taj put pree, ili izgradi, itd, zavisno od problema). 6.5.1. Acikliqki sluqaj. Pretpostavimo najpre da je graf G acikliqki. U tom sluqaju problem je lakxi, i egovo rexee pomoi e nam da ga reximo u opxtem sluqaju. Pokuxaemo indukcijom po broju qvorova. Bazni sluqaj je trivijalan. Neka je |V | = n. Moemo da iskoristimo topoloxko sortirae grafa iz prethodnog ode ka. Ako je redni broj qvora v jednak k, onda se qvorovi sa rednim brojevima maim od k ne moraju razmatrati: ne postoji naqin da se do ih doe iz v. Pored toga, redosled dobijen topoloxkim sortiraem je pogodan za primenu indukcije. Posmatrajmo posledi qvor, odnosno qvor z sa rednim brojem n. Pretpostavimo (induktivna hipoteza) da znamo najkrae puteve od v do svih ostalih qvorova, sem do z. Oznaqimo duinu najkraeg puta od v do w sa w.SP . Da bismo odredili z.SP , dovo no je da proverimo samo one qvorove w iz kojih postoji grana do z. Poxto se najkrai putevi do ostalih qvorova ve znaju, z.SP jednako je minimumu zbira w.SP + duˇ z ina(w, z), po svim qvorovima w iz kojih vodi grana do z . Da li je time problem rexen? Pitae je da li dodavae qvora z moe da skrati put do nekog drugog qvora. Meutim, poxto je z posledi qvor u topoloxkom redosledu, ni jedan drugi qvor nije dostian iz z, pa se duine ostalih najkraih puteva ne meaju. Dakle, uklaae z, nalaee najkraih puteva bez ega, i vraae z nazad su osnovni delovi algoritma. Drugim reqima, sledea induktivna hipoteza rexava problem. Induktivna hipoteza. Ako se zna topoloxki redosled qvorova, umemo da izraqunamo duine najkraih puteva od v do prvih n − 1 qvorova.
146
6. GRAFOVSKI ALGORITMI
Kad je dat acikliqki graf sa n qvorova (topoloxki ureenih), uklaamo -ti qvor, indukcijom rexavamo smaeni problem, nalazimo najmau meu vrednostima w.SP + duˇzina(w, z), za sve qvorove w takve da (w, z) ∈ E. Algoritam je prikazan na slici 17. Sada emo pokuxati da usavrximo algoritam tako da se topoloxko sortirae obav a istovremeno sa nalaeem najkraih puteva. Drugim reqima, ci je objediniti dva prolaza (za topoloxko sortirae i nalaee najkraih puteva) u jedan. Algoritam Ulaz: (teinski acikliqki graf), (qvor) i (broj qvorova). Izlaz: za svaki qvor , je duina najkraeg puta od do . n
Acikl najkr putevi(G, v, n);
G = (V, E)
v
w ∈ V w.SP
n
v
w
Pretpostav amo da je ve izvrxeno topoloxko sortirae.} {Pobo xani algoritam koji obuhvata i topoloxko sortirae dat je na slici 18.} {Pre poziva ove procedure stav a se z.SP := ∞ za sve qvorove z 6= v .} begin neka je z qvor sa rednim brojem n u topoloxkom redosledu; {
if z 6= v then
Acikl najkr putevi(G − z, v, n − 1);
dobija se uklaaem z sa svim susednim granama iz G} sve qvorove w takve da je (w, z) ∈ E do
{G − z for
if w.SP + duˇ z ina(w, z) < z.SP then z.SP := w.SP + duˇ z ina(w, z); else v.SP := 0; end
Ris. 17. Algoritam za nalaee duina najkraih puteva
od zadatog qvora u acikliqkom grafu. Razmotrimo naqin na koji se algoritam rekurzivno izvrxava (posle nalaea topoloxkog redosleda). Pretpostavimo, zbog jednostavnosti, da je redni broj qvora v u topoloxkom redosledu 1 (qvorovi sa rednim brojem maim od rednog broja v ionako nisu dostini iz v). Prvi korak je poziv rekurzivne procedure. Procedura zatim poziva rekurzivno samu sebe, sve dok se ne doe do qvora v. U tom trenutku se duina najkraeg puta do v postav a na 0, i rekurzija poqie da se "razmotava". Zatim se razmatra qvor u sa rednim brojem 2; duina najkraeg puta do ega izjednaquje se sa duinom grane (v, u), ako ona postoji; u protivnom, ne postoji put od v do u. Sledei korak je provera qvora x sa rednim brojem 3. U ovom sluqaju u x ulaze najvixe dve grane (od v ili u), pa se uporeuju duine odgovarajuih puteva. Umesto ovakvog izvrxavaa rekurzije unazad, pokuxaemo da iste korake izvrximo preko niza qvorova sa rastuim rednim brojevima. Indukcija se primeuje prema rastuim rednim brojevima poqevxi od v . Ovaj redosled oslobaa nas potrebe da redne brojeve unapred znamo, pa
6.5. NAJKRAI PUTEVI IZ ZADATOG QVORA
147
emo biti u stau da izvrxavamo istovremeno oba algoritma. Pretpostavimo da su duine najkraih puteva do qvorova sa rednim brojevima od 1 do m poznati, i razmotrimo qvor sa rednim brojem m + 1, koji emo oznaqavati sa z . Da bismo pronaxli najkrai put do z , moramo da proverimo sve grane koje vode u z. Topoloxki redosled garantuje da sve takve grane polaze iz qvorova sa maim rednim brojevima. Prema induktivnoj hipotezi ti qvorovi su ve razmatrani, pa se duine najkraih puteva do ih znaju. Za svaku granu (w, z) znamo duinu w.SP najkraeg puta do w, pa je duina najkraeg puta do z preko w jednaka w.SP + duˇzina(w, z). Pored toga, kao i ranije, ne moramo da vodimo raquna o eventualnim promenama najkraih puteva ka qvorovima sa maim rednim brojevima, jer se do ih ne moe doi iz z. Pobo xani algoritam prikazan je na slici 18. Algoritam Ulaz: (teinski acikliqki graf), (qvor ). Izlaz: za svaki qvor , je duina najkraeg puta od do . Acikl najkr putevi2(G, v);
G = (V, E)
v
G
w ∈ V w.SP
v
w
Nerekurzivna verzija prethodnog algoritma koja obav a i topoloxko sortirae.} begin for sve qvorove w do w.SP := ∞; Inicijalizuj v.U lStepen za sve qvorove; {ulazni stepeni qvorova; npr. DFS} for i := 1 to n do if v .U lStepen = 0 then stavi v u listu; v.SP := 0; while lista nije prazna skini qvor w iz liste; for sve grane (w, z) do {
i
i
if w.SP + duˇ z ina(w, z) < z.SP then z.SP := w.SP + duˇ z ina(w, z);
z.U lStepen := z.U lStepen − 1; if z.U lStepen = 0 then end
stavi z u listu;
Ris. 18. Pobo xani algoritam za nalaee duina najkraih puteva od zadatog qvora u acikliqkom grafu.
Sloenost. Svaka grana se po jednom razmatra u toku inicijalizacije ulaznih stepenova, i po jednom u trenutku kad se en polazni qvor uklaa iz liste. Pristup listi zahteva konstantno vreme. Svaki qvor se razmatra taqno jednom. Prema tome, vremenska sloenost algoritma u najgorem sluqaju je O(|V | + |E|).
148
6. GRAFOVSKI ALGORITMI
6.5.2. Opxti sluqaj. Kad graf nije acikliqki, ne postoji topoloxki redosled, pa se razmatrani algoritmi ne mogu direktno primeniti. Meutim, osnovne ideje se mogu iskoristiti i u opxtem sluqaju. Jednostavnost razmotrenih algoritama posledica je sledee osobine topoloxkog redosleda: Ako je z qvor sa rednim brojem k, onda (1) ne postoje putevi od z do qvorova sa rednim brojevima maim od k, i (2) ne postoje putevi od qvorova sa rednim brojevima veim od k do z. Ova osobina omoguuje nam da naemo najkrai put od v do z, ne vodei raquna o qvorovima koji su posle z u topoloxkom redosledu. Moe li se nekako definisati redosled qvorova proizvo nog grafa koji bi omoguio nexto sliqno? Ideja je razmatrati qvorove grafa redom prema duinama najkraih puteva do ih od v. Te duine se na poqetku, naravno, ne znaju; one se izraqunavaju u toku izvrxavaa algoritma. Najpre proveravamo sve grane koje izlaze iz v. Neka je (v, x) najkraa meu ima. Poxto su po pretpostavci sve duine grana pozitivne, najkrai put od v do x je grana (v, x). Duine svih drugih puteva do x su vee ili jednake od duine ove grane. Prema tome, znamo najkrai put do x, i to moe da poslui kao baza indukcije. Pokuxajmo da napravimo sledei korak. Kako moemo da pronaemo najkrai put do nekog drugog qvora? Biramo qvor koji je drugi najblii do v (x je prvi najblii). Jedini putevi koje treba uzeti u obzir su druge grane iz v ili putevi koji se sastoje od dve grane: prva je (v, x), a druga je grana iz qvora x. Neka je sa duˇzina(u, w) oznaqena duina grane (u, w). Biramo najmai od izraza duˇzina(v, y) (y 6= x) ili duˇzina(v, x) + duˇzina(x, z) (z 6= v). Jox jednom zak uqujemo da se drugi putevi ne moraju razmatrati, jer je ovo najkrai put za odlazak iz v (izuzev do x). Moe se formulisati sledea induktivna hipoteza. Induktivna hipoteza. Za zadati graf i egov qvor v, umemo da pronaemo k qvorova najbliih qvoru v, kao i duine najkraih puteva do ih. Zapazimo da je indukcija po broju qvorova do kojih su duine najkraih puteva ve izraqunate, a ne po veliqini grafa. Pored toga, pretpostav a se da su to qvorovi najblii qvoru v, i da umemo da ih pronaemo. Mi umemo da pronaemo prvi najblii qvor, pa je baza (sluqaj k = 1) rexena. Kad k dobije vrednost |V | − 1, rexen je kompletan problem. Oznaqimo sa V skup koji se sastoji od v i k emu najbliih qvorova. Problem je pronai qvor w koji je najblii qvoru v meu qvorovima van V , i pronai najkrai put od v do w. Najkrai put od v do w moe da sari samo qvorove iz V . On ne moe da sadri neki qvor y van V , jer bi y bio blii qvoru v od w. Prema tome, da bismo pronaxli qvor w, dovo no je da proverimo grane koje spajaju qvorove iz V sa qvorovima koji nisu u V ; sve druge grane se za sada mogu ignorisati. Neka je (u, z) grana takva da je u ∈ V i z ∈/ V . Takva grana odreuje put od v do z koji se sastoji od najkraeg puta od v do u (prema induktivnoj hipotezi ve poznat) i grane (u, z). Dovo no je uporediti sve takve puteve i izabrati najkrai meu ima, videti sliku 19. k
k
k
k
k
k
k
k
6.5. NAJKRAI PUTEVI IZ ZADATOG QVORA
149
d dz d
ud
0
u d
d d
Vk
z0 d d
d d v d
Ris. 19. Nalaee sledeeg najblieg qvora zadatom qvoru v.
Algoritam odreen ovom induktivnom hipotezom izvrxava se na sledei naqin. U svakoj iteraciji dodaje se novi qvor. To je qvor w za koji je najmaa duina (6.1) min {u.SP + duˇ z ina(u, w)| u ∈ V } meu svim qvorovima w ∈/ V . Iz ve iznetih razloga, w je zaista (k + 1)-vi (sledei) najblii qvor qvoru v. Prema tome, egovo dodavae produuje induktivnu hipotezu. Algoritam je sada kompletno specificiran, ali mu se efikasnost moe pobo xati. Osnovni korak algoritma je pronalaee sledeeg najblieg qvora. To se ostvaruje izraqunavaem najkraeg puta prema (6.1). Meutim, nije neophodno u svakom koraku proveravati sve vrednosti u.SP + duˇzina(u, w). Veina tih vrednosti ne mea se pri dodavau novog qvora: mogu se promeniti samo one vrednosti koje odgovaraju putevima kroz novododati qvor. Mi moemo da pamtimo duine poznatih najkraih puteva do svih qvorova van V , i da im poprav amo vrednosti samo pri proxirivau V . Jedini naqin da se dobije novi najkrai put posle dodavaa w u V je da taj put prolazi kroz w. Prema tome, treba proveriti sve grane od w ka qvorovima van V . Za svaku takvu granu (w, z) uporeujemo duinu w.SP +duˇzina(w, z) sa vrednoxu z.SP , i po potrebi poprav amo z.SP . Svaka iteracija obuhvata nalaee qvora sa najmaom vrednoxu SP , i popravku vrednosti SP za neke od preostalih qvorova. Ovaj algoritam poznat je kao Dijkstrin algoritam (Dijkstra ). Realizacija. Potrebno je da pronalazimo najmau vrednost u skupu duina puteva i da qesto poprav amo duine puteva. Dobra struktura podataka za nalaee minimalnih elemenata i za popravke duina elemenata je hip. Poxto je potrebno da pronaemo qvor sa najmaom duinom puta do ega, sve qvorove van skupa V quvamo u hipu, sa k uqevima jednakim duinama trenutno najkraih puteva od v do ih. Na poqetku su sve duine puteva sem jedne jednake ∞, pa redosled elemenata u hipu nije bitan, sem xto v mora biti k
k
k
k
k
k
k
150
6. GRAFOVSKI ALGORITMI
na vrhu. Nalaee qvora w je jednostavno: on se uzima sa vrha hipa. Mogu se proveriti sve grane (w, u), i zatim bez texkoa popraviti duine puteva. Meutim, kad se promeni duina puta do nekog qvora z, moe se promeniti poloaj z u hipu. Prema tome, potrebno je na odgovarajui naqin poprav ati hip (problem je u tome xto hip kao struktura podataka ne omoguuje efikasno pronalaee zadatog elementa). Locirae qvora z u hipu moe se izvesti pomou druge strukture podataka povezane sa hipom. Podaci o svim qvorovima mogu se smestiti u vektor sa pokazivaqima na ihove pozicije u hipu. Nalaee qvora u hipu je zbog toga ekvivalentno pristupau elementu vektora. Poxto su elementi hipa qvorovi grafa, prostorna sloenost je O(|V |), xto je prihvat ivo. Duine puteva mogu samo da opadaju. Ako neki elemenat hipa postane mai od oca, on se moe zameivaem pomerati navixe dok mu se ne pronae odgovarajui poloaj. To je isti postupak kao i pri obiqnom postupku popravke hipa (pri umetau elementa u hip, na primer). Algoritam za nalaee najkraih puteva od zadatog qvora prikazan je na slici 20. Algoritam Ulaz: (teinski usmereni graf), (polazni qvor). Izlaz: za svaki qvor , je duina najkraeg puta od do . Najkr putevi(G, v);
G = (V, E)
v
w w.SP
Pretpostavka je da su sve duina grana nenegativne.} begin for sve qvorove w do w.Oznaka := f alse; {oznaqeni qvorovi su u V }
v
w
{
k
w.SP := ∞;
v.SP := 0;
postoji neoznaqen qvor do neka je w neoznaqeni qvor sa najmaom vrednoxu w.SP ; w.Oznaka := true; {uk uqivae w u V } for sve grane (w, z) takve da je z neoznaqen do
while
k
if w.SP + duˇ z ina(w, z) < z.SP then z.SP := w.SP + duˇ z ina(w, z);
end
Ris. 20. Dijkstrin algoritam za nalaee duina najkraih puteva od zadatog do svih ostalih qvorova u grafu.
Sloenost. Popravka duine puta zahteva O(log m) uporeivaa, gde je m veliqina hipa. Ukupno ima |V | iteracija, i zbog toga |V | brisaa iz hipa. Popravke treba izvrxiti najvixe |E| puta (jer svaka grana moe da prouzrokuje najvixe jednu popravku), pa je potrebno izvrxiti najvixe O(|E| log |V |) uporeivaa u hipu. Prema tome, vremenska sloenost algoritma je O((|E| +
6.5. NAJKRAI PUTEVI IZ ZADATOG QVORA
151
|V |) log |V |). Zapaa se da je algoritam sporiji nego algoritam koji isti problem rexava za acikliqke grafove: u drugom sluqaju sledei qvor se uzima iz (proizvo no ureene) liste, i nikakve popravke nisu potrebne. Primer 6.1. Primer izvrxavaa algoritma N ajkr putevi za nalaee najkraih puteva od zadatog qvora u grafu dat je na slici 21. Prva vrsta odnosi se samo na puteve od jedne grane iz v. Bira se najkrai put, u ovom sluqaju on vodi ka qvoru a. Druga vrsta pokazuje popravke duina puteva uk uqujui sada sve puteve od jedne grane iz v ili a, i najkrai put sada vodi do c. U svakoj liniji bira se novi qvor, i prikazuju se duine trenutnih najkraih puteva od v do svih qvorova. Podeb ana su rastojaa za koja se pouzdano zna da su najkraa. a d¾
1
2 d c ?
5
9 4
9 ? d¾ f
v d
-? dd
3 2
4 2
? d¾ g
-bd
- d?e 1
3
d? h
a c b d e h g f
v 0 0 0 0 0 0 0 0
a 1 1 1 1 1 1 1 1
b 5 5 5 5 5 5 5 5
c ∞ 3 3 3 3 3 3 3
d 9 9 7 7 7 7 7 7
e ∞ ∞ ∞ 8 8 8 8 8
f g ∞ ∞ ∞ ∞ 12 ∞ 12 ∞ 12 11 12 11 12 11 12 11
h ∞ ∞ ∞ ∞ ∞ 9 9 9
Ris. 21. Primer izvrxavaa algoritma za nalaee najkraih puteva od zadatog qvora. Komentar. Ovakav tip algoritma se ponekad zove pretraga sa prioritetom | svakom qvoru dode uje se prioritet (u ovom sluqaju trenutno najmae poznato rastojae od v), pa se qvorovi obilaze redosledom odreenim prioritetom. Kad se zavrxi razmatrae qvora, proveravaju se sve emu susedne grane. Ta provera moe da dovede do promene nekih prioriteta. Naqin izvoea tih promena je deta po kome se jedna pretraga sa prioritetom razlikuje od druge. Pretraga sa prioritetom sloenija je od obiqne pretrage. Ona je korisna kod problema sa teinskim grafovima. Najkrae puteve od v do svih ostalih qvorova naxli smo tako xto smo puteve pronalazili jedan po jedan. Svaki novi put je odreen jednom granom, koja produuje prethodno poznati najkrai put do novog qvora. Sve te grane formiraju stablo sa korenom v. Ovo stablo zove se stablo najkraih puteva, i vano je za rexavae mnogih problema sa putevima. Ako su teine svih grana jednake, onda je stablo najkraih puteva ustvari BFS stablo sa korenom u qvoru v. U primeru na slici 21 podeb ane su grane koje pripadaju stablu najkraih puteva.
152
6. GRAFOVSKI ALGORITMI
6.6. Minimalno povezujue stablo
Razmotrimo sistem raqunara koje treba povezati optiqkim kablovima. Potrebno je obezbediti da postoji veza izmeu svaka dva raqunara. Poznati su troxkovi postav aa kabla izmeu svaka dva raqunara. Ci je projektovati mreu optiqkih kablova tako da cena mree bude minimalna. Sistem raqunara moe biti predstav en grafom qiji qvorovi odgovaraju raqunarima, a grane { potencijalnim vezama izmeu raqunara, sa odgovarajuom (pozitivnom) cenom. Problem je pronai povezani podgraf (sa granama koje odgovaraju postav enim optiqkim kablovima), koji sadri sve qvorove, takav da mu suma cena grana bude minimalna. Nije texko videti da taj podgraf mora da bude stablo. Ako bi podgraf imao ciklus, onda bi se iz ciklusa mogla ukloniti jedna grana | time se dobija podgraf koji je i da e povezan, a ima mau cenu, jer su cene grana pozitivne. Traeni podgraf zove se minimalno povezujue stablo (MCST, skraenica od minimum–cost spanning tree ) i ima mnogo primena. Nax ci je konstrukcija efikasnog algoritma za nalaee MCST. Zbog jednostavnosti, pretpostavimo da su cene grana razliqite. Ova pretpostavka ima za posledicu da je MCST jedinstveno, xto olakxava rexavae problema. Bez ove pretpostavke algoritam ostaje nepromeen, izuzev xto, kad se naie na grane jednake teine, proizvo no se bira jedna od ih. Problem. Za zadati neusmereni povezani teinski graf G = (V, E) konstruisati povezujue stablo T minimalne cene. U ovom kontekstu teine grana teinskog grafa G su ustvari ihove cene. Prirodno je koristiti sledeu induktivnu hipotezu. Induktivna hipoteza (1). Umemo da konstruixemo MCST za povezani graf sa mae od m grana. Bazni sluqaj je trivijalan. Ako je zadat problem MCST sa m grana, kako se on moe svesti na problem sa mae od m grana? Tvrdimo da grana najmae teine mora biti uk uqena u MCST. Ako ona ne bi bila uk uqena, onda bi eno dodavae stablu MCST zatvorilo neki ciklus; uklaaem proizvo ne druge grane iz tog ciklusa ponovo se dobija stablo, ali mae teine | xto je u suprotnosti sa pretpostavkom o minimalnosti MCST. Dakle, mi znamo jednu granu koja mora da pripada MCST. Moemo da je uklonimo iz grafa i primenimo induktivnu hipotezu na ostatak grafa, koji sada ima mae od m grana. Da li je ovo regularna primena indukcije? Problem je u tome xto posle uklaaa grane, preostali problem vixe nije ekvivalentan polaznom. Prvo, izbor jedne grane ograniqava mogunosti izbora drugih grana. Drugo, posle uklaaa grane graf ne mora da ostane povezan. Rexee nastalog problema je u precizirau induktivne hipoteze. Mi znamo kako da izaberemo prvu granu, ali ne moemo da je uklonimo i prosto
6.6. MINIMALNO POVEZUJUE STABLO
153
zaboravimo na u, jer ostali izbori zavise od e. Dakle, umesto da granu uklonimo, treba da je oznaqimo, i da tu qienicu, en izbor, koristimo da e u algoritmu. Algoritam se izvrxava tako xto se jedna po jedna grana bira i dodaje u MCST. Prema tome, indukcija je ne prema veliqini grafa, nego prema broju izabranih grana u zadatom (fiksiranom) grafu. Induktivna hipoteza (2). Za zadati povezan graf G = (V, E) umemo da pronaemo podgraf T sa k grana (k < |V | − 1), tako da je stablo T podgraf MCST grafa G. Bazni sluqaj za ovu hipotezu smo ve razmotrili | on se odnosi na izbor prve grane. Pretpostavimo da smo pronaxli stablo T koje zadovo ava induktivnu hipotezu i da je potrebno da T proxirimo narednom granom. Kako da pronaemo novu granu za koju emo biti sigurni da pripada MCST? Primeniemo sliqan pristup kao i pri izboru prve grane. Za T se ve zna da je deo konaqnog MCST. Zbog toga u MCST mora da postoji bar jedna grana koja povezuje neki qvor iz T sa nekim qvorom u ostatku grafa. Pokuxaemo da pronaemo takvu granu. Neka je E skup svih grana koje povezuju T sa qvorovima van T . Tvrdimo da grana sa najmaom cenom iz E pripada MCST. Oznaqimo tu granu sa (u, v) (videti sliku 22; grane stabla T su podeb ane). Poxto je MCST povezujue stablo, ono sadri taqno jedan put od u do v (izmeu svaka dva qvora u stablu postoji taqno jedan put). Ako grana (u, v) ne pripada MCST, onda ona ne pripada ni tom putu od u do v . Meutim, poxto u pripada, a v ne pripada T , na tom putu mora da postoji bar jedna grana (x, y) takva da x ∈ T i y ∈ / T . Cena ove grane vea je od cene (u, v), jer je cena (u, v) najmaa medu cenama grana koje povezuju T sa ostatkom grafa. Sada moemo da primenimo sliqno zak uqivae kao pri izboru prve grane. Ako dodamo (u, v) stablu MCST, a izbacimo (x, y), dobijamo povezujue stablo mae cene, xto je kontradikcija. k
k
t
t v t
x t
y t
t
tu
t
t
t
t
t
t
t
Ris. 22. Nalaee sledee grane minimalnog povezujueg stabla (MCST).
154
6. GRAFOVSKI ALGORITMI
Realizacija. Opisani algoritam sliqan je algoritmu za nalaee najkraih puteva od zadatog qvora iz prethodnog ode ka. Prva izabrana grana je grana sa najmaom cenom. T se definixe kao stablo sa samo tom jednom granom. U svakoj iteraciji pronalazi se grana koja povezuje T sa nekim qvorom van T , a ima najmau cenu. U algoritmu za nalaee najkraih puteva od zadatog qvora traili smo najkrai put do qvora van T . Prema tome, jedina razlika izmeu MCST algoritma i algoritma za nalaee najkraih puteva je u tome xto se minimum trai ne po duini puta, nego po ceni grane. Ostatak algoritma prenosi se praktiqno bez promene. Za svaki qvor w van T pamtimo cenu grane minimalne cene do w od nekog qvora iz T , odnosno ∞ ako takva grana ne postoji. U svakoj iteraciji mi na taj naqin biramo granu najmae cene i povezujemo odgovarajui qvor w sa stablom T . Zatim proveravamo sve grane susedne qvoru w. Ako je cena neke takve grane (w, z) (za z ∈/ T ) maa od cene trenutno najjeftinije poznate grane do z, onda poprav amo cenu qvora z . Algoritam je prikazan na slici 23. Sloenost. Sloenost ovog algoritma identiqna je sloenosti algoritma za nalaee najkraih rastojaa od zadatog qvora iz prethodnog ode ka, O((|E| + |V |) log |V |). Primer 6.2. Algoritam za konstrukciju MCST ilustrovaemo primerom na slici 24. Qvor u prvoj koloni tabele je onaj koji je dodat u odgovarajuem koraku. Prvi dodati qvor je v, i u prvoj vrsti navedene su sve grane iz v sa svojim cenama. U svakoj vrsti bira se grana sa najmaom cenom. Spisak trenutno najbo ih grana i ihovih cena poprav a se u svakom koraku (prikazani su samo krajevi grana). Na slici su grane grafa koje pripadaju MCST podeb ane. Komentar. Algoritam za konstrukciju MCST je primer, iako ne sasvim qist, pohlepnog metoda. Pretpostavimo da radimo sa skupom elemenata kojima su pridruene cene, i da je ci pronai skup elemenata se maksimalnom (ili minimalnom) cenom koji zadovo ava neka ograniqea. U problemu MCST elementi su grane grafa, a ograniqee je da grane odgovaraju povezujuem stablu. Suxtina pohlepnog metoda je u tome da se u svakom koraku uzimaju elementi sa najveom cenom. U algoritmu MCST uveli smo neka dodatna ograniqea pri izboru grana: razmatrane su samo grane povezane sa tekuim stablom. Zbog toga algoritam nije qisti primer pohlepnog algoritma. MCST se moe konstruisati i na drugi naqin, izborom grane sa najmaom cenom u svakom koraku, uz ograniqee da ta grana ne zatvara ciklus. Preciznije, izabrana grana treba da povezuje dva qvora iz razliqitih stabala trenutne xume; polazi se od xume sa |V | qvorova bez grana; za objediavae stabala u vea koristi se struktura podataka za nalaee unija iz ode ka 3.7). Pohlepni metod ne vodi uvek optimalnom rexeu. On je obiqno samo heuristika za nalaee suboptimalnih rexea. Ponekad, meutim, kao u primeru nalaea MCST, pohlepni metod pronalazi najbo e rexee.
6.6. MINIMALNO POVEZUJUE STABLO
155
Algoritam Ulaz: (teinski neusmereni graf). Izlaz: (minimalno povezujue stablo grafa ). MCST(G);
G
T
G
begin
Na poqetku je T prazan skup; for sve qvorove w do
je true ako je w u T } neka je (x, y) grana sa najmaom cenom u G; x.Oznaka := true; {y e biti oznaqeno u glavnoj pet i} for sve grane (x, z) do z.Grana := (x, z); {grana najmae cene od T do z} z.Cena := cena(x, z); {cena grane z.Grana} while postoji neoznaqen qvor do neka je w neoznaqeni qvor sa najmaom vrednoxu w.Cena; if w.Cena = ∞ then print "G nije povezan"; halt; w.Oznaka := f alse; {w.Oznaka w.Cena := ∞;
else
w.Oznaka := true;
dodaj w.Grana u T ; {sada poprav amo cene neoznaqenih qvorova povezanih sa w} for sve grane (w, z) do if not z.Oznaka then
if cena(w, z) < z.Cena then z.Grana := (w, z); z.Cena := cena(w, z); end
a d 2 d c
Ris. 23.v Algoritam za nalaee minimalnog povezujueg stabla. b 1
4
10 d 13 f
d
9 dd
6
d
7
3 de
12 d 11 g
5 d h
v a c d b e h f g
v − − − − − − − − −
a v(1) − − − − − − − −
b v(6) v(6) v(6) v(6) − − − − −
c ∞ a(2) − − − − − − −
d v(9) v(9) c(4) − − − − − −
e ∞ ∞ ∞ d(7) b(3) − − − −
f ∞ ∞ c(10) c(10) c(10) c(10) c(10) − −
g ∞ ∞ ∞ d(12) d(12) d(12) h(11) h(11) −
Ris. 24. Primer izvrxavaa algoritma za nalaee MCST.
h ∞ ∞ ∞ ∞ ∞ e(5) − − −
156
6. GRAFOVSKI ALGORITMI
6.7. Svi najkrai putevi
Sada emo razmotriti problem izraqunavaa najkraih puteva izmeu svaka dva qvora u grafu. Problem. Dat je teinski graf G = (V, E) (usmereni ili neusmereni) sa nenegativnim teinama (duinama) grana. Pronai puteve minimalne duine izmeu svaka dva qvora. Ponovo, poxto govorimo o najkraim putevima, teine grana zovemo duinama. Ovo je problem nalaea svih najkraih puteva. Zbog jednostavnosti emo se zadovo iti nalaeem duina svih najkraih puteva, umesto samih puteva. Pretpostav amo da je graf usmeren; sve xto e biti reqeno vai i za neusmerene grafove. Pored toga, pretpostav a se da su duine grana nenegativne. Kao i obiqno, pokuxajmo sa direktnim induktivnim pristupom. Moe se koristiti indukcija po broju grana ili qvorova. Kako se meaju najkrai putevi u grafu posle dodavaa nove grane (u, w)? Nova grana moe pre svega da predstav a krai put izmeu qvorova u i w. Pored toga, moe se promeniti najkrai put izmeu proizvo na druga dva qvora v i v . Da bi se ustanovilo ima li promene, treba sa prethodno poznatom najmaom duinom puta od v do v uporediti zbir duina najkraeg puta od v do u, grane (u, w) i duine najkraeg puta od w do v . Ukupno, za svaku novu granu potrebno je izvrxiti O(|V | ) provera, pa je sloenost ovakvog algoritma u najgorem sluqaju O(|E||V | ). Poxto je broj grana najvixe O(|V | ), sloenost ovog algoritma je O(|V | ). Kako se meaju najkrai putevi ako se u graf doda novi qvor u? Potrebno je da najpre pronai duine najkraih puteva od u do svih ostalih qvorova, i od svih ostalih qvorova do u. Poxto su duine najkraih puteva koji ne sadre u ve poznate, najkrai put od u do w moemo da pronaemo na sledei naqin. Potrebno je da odredimo samo prvu granu na tom putu. Ako je to grana (u, v), onda je duina najkraeg puta od u do w jednaka zbiru duine grane (u, v) i duine najkraeg puta od v do w, koja je ve poznata. Potrebno je dakle da uporedimo ove duine za sve grane susedne sa u, i da meu ima izaberemo najmau. Najkrai put od w do u moe se pronai na sliqan naqin. Ali to sve nije dovo no. Ponovo je potrebno da za svaki par qvorova proverimo da li izmeu ih postoji novi krai put kroz novi qvor u. Za svaka dva qvora v i v , da bi se ustanovilo ima li promene, treba sa prethodno poznatom najmaom duinom puta od v do v uporediti zbir duina najkraeg puta od v do u i duine najkraeg puta od u do v . To je ukupno O(|V | ) provera i sabiraa posle dodavaa svakog novog qvora, pa je sloenost ovakvog algoritma u najgorem sluqaju O(|V | ). Ispostav a se da je efikasnija indukcija po broju qvorova nego po broju grana. Meutim, postoji jox bo a induktivna konstrukcija za rexavae ovog problema. Ideja je da se ne mea broj qvorova ili grana, nego da se uvedu ograniqea na tip dozvo enih puteva. Indukcija se izvodi po opadajuem broju takvih 1
2
1
2
1
2
2
2
2
4
1
2
1
2
1
2
3
2
6.7. SVI NAJKRAI PUTEVI
157
ograniqea, tako da na kraju dolaze u obzir svi mogui putevi. Numeriximo qvorove od 1 do |V |. Put od u do w zove se k-put ako su redni brojevi svih qvorova na putu (izuzev u i w) mai ili jednaki od k. Specijalno, 0-put se sastoji samo od jedne grane (poxto se ni jedan drugi qvor ne moe pojaviti na putu). Induktivna hipoteza. Umemo da odredimo duine najkraih puteva izmeu svaka dva qvora, pri qemu su dozvo eni samo k-putevi, za k < m. Baza indukcije je sluqaj m = 1, kad se razmatraju samo direktne grane i rexee je oqigledno. Pretpostavimo da je induktivna hipoteza taqna i da hoemo da je proxirimo na k ≤ m. Jedini novi putevi koje treba da razmotrimo su m-putevi. Treba da pronaemo najkrae m-puteve izmeu svaka dva qvora i da proverimo da li oni pobo xavaju k-puteve za k < m. Neka je v qvor sa rednim brojem m. Proizvo an najkrai m-put sadri v najvixe jednom. Najkrai m-put izmeu u i v sastoji se od najkraeg (m − 1)-puta od u do v , i najkraeg (m − 1)-puta od v do v . Prema induktivnoj hipotezi mi ve znamo duine najkraih k-puteva za k < m, pa je dovo no da saberemo ove dve duine (i zbir uporedimo sa duinom najkraeg (m − 1)-puta od u do v) da bismo pronaxli duinu najkraeg m-puta od u do v. Ovaj algoritam je nexto bri od prethodnog (za konstantni faktor), a lakxe ga je i realizovati, videti sliku 25. Algoritam Ulaz: ( matrica povezanosti koja predstav a teinski graf). m
m
m
m
Svi Najkr putevi(W );
W n×n
je teina grane (x, y), ako ona postoji, odnosno ∞ u protivnom.} je 0 za sve qvorove x} Izlaz: Na kraju matrica W sadri duine najkraih puteva. begin for m := 1 to n do {indukcija je po parametru m} {W [x, y]
{W [x, x]
for x := 1 to n do
for y := 1 to n do if W [x, m] + W [m, y] < W [x, y] then W [x, y] := W [x, m] + W [m, y] end
Ris. 25. Algoritam za nalaee duina svih najkraih
puteva u grafu. Unutraxe dve pet e koriste se za proveru svih parova qvorova. Zapaa se da se ova provera moe izvrxavati sa parovima qvorova proizvo nim redosledom, jer je svaka provera nezavisna od ostalih. Ovakva fleksibilnost je vana, na primer, kod paralelnih algoritama.
158
6. GRAFOVSKI ALGORITMI
Sloenost. Za svako m algoritam izvrxava jedno sabirae i jedno uporeivae za svaki par qvorova. Broj koraka indukcije je |V |, pa je ukupan broj sabiraa, odnosno uporeivaa, najvixe |V | . Prisetimo se da je vremenska sloenost algoritma za nalaee duina najkraih puteva od jednog qvora O(|E| log |V |). Ako je graf gust, pa je broj grana Ω(|V | ), onda je opisani algoritam efikasniji od izvrxavaa za svaki qvor algoritma za najkrae puteve od datog qvora. Iako je mogue realizovati algoritam za najkrae puteve od jednog qvora sloenosti O(|V | ) (videti zadatak 6.31), a time i algoritam sloenosti O(|V | ) za nalaee svih najkraih rastojaa, algoritam iz ovog ode ka bo i je za guste grafove zbog svoje jednostavne realizacije. S druge strane, ako graf nije gust (pa ima na primer O(|V |) grana), onda je bo a vremenska sloenost O(|E||V | log |V |) vixe (|V |) puta upotreb enog algoritma za najkrae puteve od jednog qvora. 3
2
2
3
6.8. Tranzitivno zatvoree
Za zadati usmereni graf G = (V, E) egovo tranzitivno zatvoree je usmereni graf u kome grana (u, w) izmeu qvorova u i w postoji ako i samo ako u G postoji usmereni put od u do w. Postoji mnogo primena tranzitivnog zatvorea, pa je vano imati efikasni algoritam za egovo nalaee. Problem. Pronai tranzitivno zatvoree zadatog usmerenog grafa G = (V, E). Ovaj problem rexiemo redukcijom (svoeem) na drugi problem. Drugim reqima pokazaemo kako se moe proizvo ni ulaz za problem tranzitivno zatvoree svesti na ulaz za drugi problem, koji umemo da reximo. Posle toga rexee drugog problema transformixemo u rexee problema tranzitivnog zatvorea. Problem o kome je req je nalaee svih najkraih puteva. Neka je G = (V, E ) kompletni usmereni graf (graf kod koga za svaki par qvorova postoje obe grane, u oba smera). Grani e ∈ E dode uje se duina 0 ako je e ∈ E, odnosno 1 u protivnom. Sada za graf G rexavamo problem nalaea svih najkraih puteva. Ako u G postoji put izmeu v i w, onda je u G egova duina 0. Prema tome, put izmeu v i w u G postoji ako i samo ako je duina najkraeg puta izmeu v i w u G jednaka 0. Drugim reqima, rexee problema svih najkraih puteva neposredno se transformixe u rexee problema tranzitivnog zatvorea. Ideja korixea redukcije jednog problema na drugi deta nije je razraena u poglav u 10. Ovde redukciju koristimo sa ci em da je kao tehniku ilustrujemo na jednostavnom primeru. Nije texko prepraviti algoritam za sve najkrae puteve, tako da direktno rexava problem tranzitivnog zatvorea, videti sliku 26. Qienica da moemo da svedemo jedan problem na drugi znaqi da je prvi problem opxtiji od drugog, odnosno da je drugi problem specijalni sluqaj C = (V, F )
0
0
0
0
0
0
6.8. TRANZITIVNO ZATVORE E
Algoritam Ulaz: ( matrica povezanosti koja predstav a usmereni graf).
159
Tranzit zatvorenje(A);
A n×n
je true ako grana (x, y) pripada grafu, odnosno f alse u protivnom.} je true za sve qvorove x} Izlaz: Na kraju matrica A predstav a tranzitivno zatvoree grafa. begin for m := 1 to n do {indukcija je po parametru m} {A[x, y]
{A[x, x]
for x := 1 to n do
for y := 1 to n do if A[x, m] and A[m, y] then A[x, y] := true
ovaj korak je poprav en u sledeem algoritmu}
{ end
Ris. 26. Algoritam za nalaee tranzitivnog zatvorea grafa. prvog. Obiqno su opxtija rexea skup a, sloenija. Mi smo videli mnogo primera gde je opxtiji problem lakxe rexiti; ipak, da bismo vixe dobili, moramo vixe i da platimo. Posle korixea redukcije preporuq ivo je pokuxati sa popravkom dobijenog rexea, koristei specijalne osobine problema. Razmotrimo osnovni korak algoritma, naredbu if . Ona se sastoji od dve provere, A[x, m] i A[m, y]. Nexto se preduzima samo ako su oba uslova ispuena. Ova if naredba izvrxava se n puta za svaki par qvorova. Svaka popravka ove naredbe vodila bi bitnoj popravci algoritma. Moraju li se svaki put proveravati oba uslova? Prva provera zavisi samo od x i m, a druga zavisi samo od m i y. Zbog toga se prva provera moe za fiksirane x i m izvrxiti samo jednom (umesto n puta). Ako prvi uslov nije ispuen, onda se drugi ne mora proveravati ni za jednu vrednost y. Ako je pak prvi uslov ispuen, onda se egova ispuenost ne mora ponovo proveravati. Ova promena je ugraena u pobo xani algoritam na slici 27. Asimptotska sloenost ostaje nepromenjena, ali se algoritam izvrxava priblino dva puta bre. Realizacija. Realizacija algoritma je direktna. Rezultat unutraxe pet e je da je na vrstu x matrice A primeena or (ili) operacija sa vrstom m (elemenat po elemenat). Mnogi raqunari mogu da izvrxe istovremeno vixe bitskih operacija or. Zbog toga se or operacija sa vrstama moe izvrxiti bre nego vixe bitskih or operacija. U praksi je dakle broj or operacija n /w, gde je w veliqina reqi na raqunaru (broj bita na koje se moe istovremeno primeniti or operacija). Ovo je vrlo jednostavan primer paralelnog algoritma. 3
160
6. GRAFOVSKI ALGORITMI
Algoritam Ulaz: ( matrica povezanosti koja predstav a usmereni graf). Tranzit zatvorenje2(A);
A n×n
je true ako grana (x, y) pripada grafu, odnosno f alse u protivnom.} je true za sve qvorove x} Izlaz: Na kraju matrica A predstav a tranzitivno zatvoree grafa. begin for m := 1 to n do {indukcija je po parametru m} {A[x, y]
{A[x, x]
for x := 1 to n do
if A[x, m] then for y := 1 to n do if A[m, y] then A[x, y] := true end
Ris. 27. Pobo xani algoritam za nalaee tranzitivnog zatvorea grafa.
6.9. Uparivae
Za zadati neusmereni graf G = (V, E) uparivae je skup disjunktnih grana (grana bez zajedniqkih qvorova). Ovo ime potiqe od qienice da se grane mogu shvatiti kao parovi qvorova. Bitno je da svaki qvor pripada najvixe jednoj grani | to je monogamno uparivae. Qvor koji nije susedan ni jednoj grani iz uparivaa zove se neupareni qvor; kae se takoe da qvor ne pripada uparivau. Savrxeno uparivae je uparivae u kome su svi qvorovi upareni. Optimalno uparivae je uparivae sa maksimalnim brojem grana. Maksimalno uparivae je pak uparivae koje se ne moe proxiriti dodavaem nove grane. Problemi koji se svode na uparivae pojav uju se u mnogim situacijama, ne samo socijalnim. Mogu se uparivati radnici sa radnim mestima, maxine sa delovima, grupe studenata sa uqionicama, itd. Problem nalaea optimalnog uparivaa za proizvo an graf je teak problem. U ovom ode ku ograniqiemo se na dva specijalna sluqaja. Prvi od ih nije tako vaan | radi se o uparivau u vrlo gustim grafovima. Meutim, rexee tog problema ilustruje interesantan pristup, koji se moe uopxtiti da bi se doxlo do rexea problema uparivaa za bipartitne grafove. 6.9.1. Savrxeno uparivae u vrlo gustim grafovima. U ovom primeru razmotriemo specijalan sluqaj problema savrxenog uparivaa. Neka je G = (V, E) neusmereni graf kod koga je |V | = 2n i stepen svakog qvora je bar n. Prikazaemo algoritam za nalaee savrxenog uparivaa u ovakvim grafovima. Posledica je da ako graf zadovo ava navedene uslove, onda u emu uvek postoji savrxeno uparivae. Koristiemo indukciju po veliqini m uparivaa. Bazni sluqaj m = 1 rexava se formiraem uparivaa veliqine jedan od proizvo ne grane grafa. Pokazaemo da se proizvo no uparivae koje nije savrxeno moe proxiriti ili dodavaem jedne grane ili zamenom
6.9. UPARIVA E
161
jedne grane dvema novim granama. U oba sluqaja poveava se veliqina uparivaa za jedan. Posmatrajmo uparivae M u G sa m grana, pri qemu je m < n. Najpre proveravamo sve grane van uparivaa M da ustanovimo da li se neka od ih moe dodati u M . Ako pronaemo takvu granu, problem je rexen | naeno je vee uparivae. U protivnom, M je maksimalno uparivae. Ako M nije savrxeno uparivae, postoje bar dva neuparena qvora v i v . Iz ta dva qvora po pretpostavci izlazi najmae 2n grana. Sve te grane vode ka uparenim qvorovima (u protivnom bi se u uparivae mogla dodati nova grana, suprotno pretpostavci da je ono maksimalno). Poxto u M ima mae od n grana, a iz v i v izlazi bar 2n grana, u uparivau M postoji grana (u , u ) koja je susedna sa ("pokriva") bar tri grane iz v i v . Pretpostavimo, bez smaea opxtosti, da su to grane (u , v ), (u , v ) i (u , v ), videti sliku 28(a). Lako je videti da se uklaaem grane (u , u ) iz M , i dodavaem dveju novih grana (u , v ) i (u , v ) dobija vee uparivae, slika 28(b). 1
2
1
2
1
1
1
1
1
2
1
2
2
2
2
1
2
1
2
1
d v1
u1 d
(a)
d v2
d u2
d v1
u1 d
d v2
d u2
(b) Ris. 28. Proxirivae uparivaa. Opisani algoritam je jox jedan primer pohlepnog pristupa. U svakom koraku proxirivaa uparivaa za jednu granu uk uqeno je najvixe tri grane. U ovoj situaciji je to bilo dovo no; meutim, u opxtem sluqaju je nalaee dobrog uparivaa tei problem. Uk uqivae jedne grane u uparivae utiqe na izbor drugih grana qak i u uda enim delovima grafa. Pokazaemo sada kako se ovaj pristup moe primeniti na drugi specijalni sluqaj problema uparivaa. 6.9.2. Bipartitno uparivae. Neka je G = (V, E, U ) bipartitni graf u kome su V i U disjunktni skupovi qvorova, a E je skup grana koje povezuju neke qvorove iz V sa nekim qvorovima iz U . Problem. Pronai uparivae sa maksimalnim brojem grana u bipartitnom grafu G. Jedan od naqina da se formulixe problem je sledei: V je skup devojaka, U je skup mladia, a E je skup "potencijalnih" parova. Ci je pod ovim uslovima oformiti xto vei broj parova mladia i devojaka. Direktan pristup je formirati parove u skladu sa nekom strategijom, do trenutka kad da a uparivaa vixe nisu mogua | u nadi da e nam strategija
162
6. GRAFOVSKI ALGORITMI
obezbediti optimalno ili rexee blisko optimalnom. Moe se, na primer, pokuxati sa pohlepnim pristupom, uparujui najpre qvorove malog stepena, u nadi da e preostali qvorovi i u kasnijim fazama imati neuparene partnere. Drugim reqima, najpre uparujemo stid ive osobe, one sa mae poznanstava, a o ostalima brinemo kasnije. Umesto da se bavimo analizama ovakvih strategija (xto je teak problem), pokuxaemo sa pristupom korixenim kod prethodnog problema. Pretpostavimo da se polazi od maksimalnog uparivaa, koje ne mora biti optimalno uparivae. Moemo li ga nekako popraviti? Pogledajmo primer na slici 29(a), na kome je uparivae prikazano podeb anim granama. Jasno je da se uparivae moe poveati zamenom grane 2A sa dve grane 1A i 2B . Ovo je transformacija sliqna onoj koju smo primenili u prethodnom problemu. Meutim, ne moramo se ograniqiti zamenama jedne grane dvema granama. Ako pronaemo sliqnu situaciju u kojoj se nekih k grana mogu zameniti sa k+1 grana, dobijamo algoritam veih mogunosti. Na primer, uparivae se moe da e poveati zamenom grana 3D i 4E sa tri grane 3C , 4D i 5E, slika 29(b). 1 d
2 d
3 d
4 d
5 d
6 d
1 d
2 d
3 d
4 d
5 d
6 d
d A
d B
d C
d D
d E
d F
d A
d B
d C
d D
d E
d F
(a)
(b) Ris. 29. Proxirivae bipartitnog uparivaa. Razmotrimo deta nije ove transformacije. Ci je poveati broj uparenih qvorova. Polazimo od neuparenog qvora v i pokuxavamo da ga uparimo. Poxto polazimo od maksimalnog uparivaa, svi susedi qvora v su ve upareni; zbog toga smo prinueni da iz uparivaa uklonimo neku od grana koje "pokrivaju" susede v. Pretpostavimo da smo izabrali qvor u, susedan sa v, koji je prethodno bio uparen sa qvorom w, na primer. Raskidamo uparivae u sa w, i uparujemo v sa u. Sada preostaje da pronaemo para za qvor w. Ako je w povezan granom sa nekim neuparenim qvorom, onda smo postigli ci ; takav je bio prvi od gorih sluqajeva. Ako to nije sluqaj, onda nastav amo da e sa raskidaem parova i formiraem novih parova. Da bismo na osnovu ove ideje konstruisali algoritam, potrebno je da uradimo dve stvari: da obezbedimo da se procedura uvek zavrxava, i da pokaemo da ako je pobo xae mogue, onda e ga procedura sigurno pronai. Najpre emo formalizovati navedenu ideju. Alternirajui put P za dato uparivae M je put od neuparenog qvora v ∈ V do neuparenog qvora u ∈ U , pri qemu su grane puta P naizmeniqno u E \ M , odnosno M . Drugim reqima, prva grana (v, w) puta P ne pripada M (jer je v neuparen), druga grana (w, x) pripada M , i tako da e do poslede grane (z, u) puta P koja ne pripada M . Zapazimo da su upravo alternirajui
6.9. UPARIVA E
163
putevi u gorim primerima omoguavali poveavae uparivaa. Broj grana na putu P mora biti neparan, jer P polazi iz V i zavrxava u U . Pored toga, meu granama puta P , grana u E \ M ima za jednu vixe od grana u M . Prema tome, ako iz uparivaa izbacimo sve grane P koje su u M , a uk uqimo sve grane P koje su u E \ M , dobiemo novo uparivae sa jednom granom vixe. Na primer, prvi alternirajui put korixen za poveae uparivaa na slici 29(a)) bio je (1A, A2, 2B), i on je omoguio zamenu grane A2 granama 1A i 2B; drugi alternirajui put (C3, 3D, D4, 4E, E5) omoguio je zamenu grana 3D i 4E granama C3, D4 i E5. Jasno je da ako za dato uparivae M postoji alternirajui put, onda M ne moe biti optimalno uparivae. Ispostav a se da je i obrnuto tvree taqno. Teorema 6.1 (Teorema o alternirajuem putu). Uparivae je optimalno ako i samo ako nema alternirajuih puteva. Dokaz e biti dat kao posledica opxtijeg tvrea u sledeem ode ku. Teorema o alternirajuem putu direktno sugerixe algoritam, jer proizvo no uparivae koje nije optimalno ima alternirajui put, a alternirajui put daje poveano uparivae. Zapoqiemo sa pohlepnim algoritmom, dodajui grane u uparivae sve dok je to mogue. Onda prelazimo na traee alternirajuih puteva i poveavae uparivaa, sve do trenutka kad vixe nema alternirajuih puteva. Dobijeno uparivae je tada optimalno. Poxto alternirajui put poveava uparivae za jednu granu, a u uparivau ima najvixe n/2 grana (gde je n broj qvorova), broj iteracija je najvixe n/2. Preostaje jox jedan problem | kako pronalaziti alternirajue puteve? On se moe rexiti na sledei naqin. Transformixemo neusmereni graf G u usmereni graf G usmeravajui grane iz M od U ka V , a grane iz E \ M od V ka U . Slika 30(a) prikazuje polazno maksimalno uparivae za graf sa slike 29(a), a slika 30(b) prikazuje odgovarajui usmereni graf G . Alternirajui put u G tada odgovara usmerenom putu od neuparenog qvora u V do neuparenog qvora u U . Takav usmereni put moe se pronai bilo kojim postupkom obilaska grafa, npr. pomou DFS. Sloenost obilaska (pretrage) je O(|V | + |E|), pa je sloenost algoritma O(|V |(|V | + |E|)). 6.9.2.1. Pobo xae. Poxto kompletan obilazak grafa u najgorem sluqaju moe da traje koliko i nalaee jednog puta, moe se pokuxati sa nalaeem vixe alternirajuih puteva jednom pretragom. Potrebno je, meutim, da budemo sigurni da ovi putevi ne meaju jedan drugog. Jedan naqin da se garantuje nezavisnost takvih alternirajuih puteva je uvoee ograniqea da skupovi qvorova na pojedinim putevima budu disjunktni. Ako su putevi disjunktni, onda utiqu na uparivae razliqitih qvorova, pa se mogu istovremeno iskoristiti. Novi, pobo xani algoritam za nalaee alternirajuih puteva je sledei. Najpre primeujemo BFS na graf G od skupa neuparenih qvorova u V , sloj po sloj, do sloja u kome su pronaeni neupareni qvorovi iz U . Zatim iz grafa indukovanog pretragom u xirinu vadimo maksimalni skup disjunktnih 0
0
0
164
6. GRAFOVSKI ALGORITMI U
U
1 d
2 d
3 d
4 d
5 d
6 d
1 td 6
2 3 d d 6µ 6
d A
d B
d C
d D
d E
d F
d® A
td B
V
td C
4 d 6
5 6 dt d 6 ¸
Ud
Ud
D
E
d? F
V
(a)
(b) Ris. 30. Nalaee alternirajuih puteva puteva u G , kojima odgovaraju alternirajui putevi u G. To se izvodi pronalaeem prvog puta, uklaaem egovih qvorova, pronalaeem narednog puta, uklaaem egovih qvorova, itd. (rezultat nije optimalni, nego samo maksimalni skup). Biramo maksimalni skup, da bismo posle pretrage dobili xto vee uparivae; svaki novi disjunktni put poveava uparivae za jednu granu. Na kraju poveavamo uparivae korixeem pronaenog skupa disjunktnih puteva. Proces se nastav a sve dok je mogue pronai alternirajue puteve, odnosno dok je u grafu G neki neupareni qvor iz V dostian iz nekog neuparenog qvora iz U . pSloenost. Ispostav a se da je u pobo xanom algoritmu broj iteracija O( |V |) u najgorem sluqaju (Hopkroft i Karp 1973, Hopcroft, Carp ; ovo tvree dajemo bez dokaza). Ukupna vremenska sloenost algoritma je dakle p O((|V | + |E|) |V |). 0
0
6.10. Transportne mree
Problem transportne mree je jedan od osnovnih problema u teoriji grafova i kombinatornoj optimizaciji. Intenzivno je prouqavan vixe od 40 godina, pa su za ega razvijeni mnogi algoritmi i strukture podataka. Problem ima mnogo varijanti i uopxtea. Osnovna varijanta problema transportne mree moe se formulisati na sledei naqin. Neka je G = (V, E) usmereni graf sa dva posebno izdvojena qvora, s (izvor), sa ulaznim stepenom 0, i t (ponor) sa izlaznim stepenom 0. Svakoj grani e ∈ E pridruena je pozitivna teina c(e), kapacitet grane e. Kapacitet grane je mera toka koji moe biti propuxten kroz granu. Za ovakav graf kaemo da je mrea. Zbog udobnosti se nepostojeim granama dode uje kapacitet 0. Tok je funkcija f definisana na E koja zadovo ava sledee uslove: (1)en0 ≤kapacitet; f (e) ≤ c(e): tok kroz proizvo nu granu ne moe da premaxi
6.10. TRANSPORTNE MREE
165
(2)ulazi za sve v ∈ V \ {s, t} je P f (u, v) = P f (v, w): ukupan tok koji u proizvo ni qvor v jednak je ukupnom toku koji izlazi iz u
w
ega ("nestix ivost", zakon oquvaa, odnosno konzervacije toka). Ova dva uslova imaju za posledicu da je ukupan tok koji izlazi iz s jednak ukupnom toku koji ulazi u t. U to se moemo uveriti na sledei naqin. Uvexemo najpre pojam preseka. Neka je A proizvo an podskup V takav da sadri s, a ne sadri t. Oznaqimo sa B = V \ A skup preostalih qvorova. Presek odreen skupom A je skup grana (v, u) ∈ E takvih da v ∈ A i u ∈ B. Intuitivno, presek je skup grana koje razdvajaju s od t. Indukcijom po broju qvorova u A lako se pokazuje da ukupan tok kroz presek ne zavisi od A. Specijalno, za A = {s} presek obuhvata grane koje izlaze iz s, a za A = V \{t} presek qine grane koje ulaze u t. Prema tome, ukupan tok koji izlazi iz s jednak je ukupnom toku koji ulazi u t. Problem koji nas zanima je maksimizirae toka. U sluqaju kad su kapaciteti grana realni brojevi, nije oqigledno qak ni da maksimalni tok uvek postoji; pokazaemo da on uvek postoji. Jedan naqin da se opisani problem shvati kao realan fiziqki problem, je da zamislimo da mreu qine cevi za vodu. Svaka cev ima svoj kapacitet, a uslovi koje tok treba da zadovo i su prirodni. Ci je "proterati" kroz mreu xto veu koliqinu vode u jedinici vremena. Pokazaemo najpre da se problem bipartitnog uparivaa moe svesti na problem mrenog protoka. To moe na prvi pogled da izgleda beskorisno, poxto ve znamo da reximo problem uparivaa, a ne znamo rexee problema transportne mree | redukcija je dakle u pogrexnom smeru. Meutim, za rexavae problema transportne mree moe se primeniti postupak sliqan postupku za nalaee bipartitnog uparivaa. Zadatom bipartitnom grafu G = (V, E, U ) u kome treba pronai uparivae sa najveim moguim brojem grana (optimalno uparivae) dodajemo dva nova qvora s i t, povezujemo s granama sa svim qvorovima iz V , a sve qorove iz U povezujemo sa t. Oznaqimo dobijeni graf sa G (videti sliku 31, na kojoj su sve grane usmerene sleva udesno). Poxto svim granama dodelimo kapacitet 1, dobijamo regularan problem transportne mree na grafu G . Neka je M neko uparivae u G. Uparivau M moe se na prirodan naqin pridruiti tok u G . Dode ujemo tok 1 svim granama iz M i svim granama koje s ili t povezuju sa uparenim qvorovima. Svim ostalim granama dode ujemo tok 0. Ukupan tok jednak je tada broju grana u uparivau M . Moe se pokazati da je M optimalno uparivae ako i samo ako je odgovarajui celobrojni tok u G optimalan. U jednom smeru dokaz je jednostavan: ako je tok optimalan i odgovara uparivau, onda se ne moe nai vee uparivae, jer bi mu odgovarao vei tok. Da bismo izveli dokaz u drugom smeru, potrebno je da nekako primenimo ideju alternirajuih puteva na tok u transportnoj mrei, i da pokaemo da ako nema alternirajuih puteva, onda je odgovarajui tok optimalan. Poveavajui put u odnosu na zadati tok f je usmereni put od s do t, koji se sastoji od grana iz G, ne obavezno u istom smeru; svaka od tih grana (v, u) treba da zadovo i taqno jedan od sledea dva uslova: 0
0
0
0
166
6. GRAFOVSKI ALGORITMI
s t
t
t
t
t
t
t
t
t
t
t
t
t
t t
Ris. 31. Svoee bipartitnog uparivaa na transportne
mree (sve grane usmerene su sleva udesno). (1)grana (v, u) ima isti smer kao i u G, i f (v, u) < c(v, u). U tom sluqaju (v, u) je direktna grana Direktna grana ima kapacitet vei od toka, pa se moe poveati tok kroz u. Razlika c(v, u) − f (v, u) se slek te grane. (2)zove (v, u) ima suprotan smer u G, i f (v, u) > 0. U ovom sluqaju grana (v, u) je povratna grana. Deo toka iz povratne grane moe se "pozajmiti". Poveavajui put je uopxtee alternirajueg puta, i ima isti smisao za transportne mree kao alternirajui put za bipartitno uparivae. Ako postoji poveavajui put u odnosu na tok f (odnosno f dozvo ava poveavajui tok), onda f nije optimalni tok. Tok f moe se poveati poveavaem toka kroz poveavajui put na sledei naqin. Ako su sve grane poveavajueg puta direktne grane, onda se kroz ih moe poveati tok, tako da sva ograniqea i da e ostanu zadovo ena. Poveae toka je u ovom sluqaju taqno jednako minimalnom sleku meu granama puta. Sluqaj povratnih grana je nexto sloeniji, videti sliku 32. Svaka grana oznaqena je sa dva broja a/b, pri qemu je a kapacitet, a b trenutni tok. Jasno je da se ukupan tok ne moe direktno poveati, jer ne postoji put od s do t koji se sastoji samo od direktnih grana. Ipak, postoji naqin da se ukupan tok povea. Put s − v − u − w − t je poveavajui put. Dopunski tok 2 moe se sprovesti do u od s (2 je minimalni slek na direktnim granama do u). Tok 2 moe se oduzeti od f (w, u). Time se postie zadovo ee uslova (2) (zakona oquvaa toka) za qvor u, jer je u imao poveae toka za 2 iz poveavajueg puta, a zatim smaee dotoka za 2 iz povratne grane. U qvoru w je sada izlazni tok smaen za 2, pa ga treba poveati kroz neku izlaznu granu. Sa "proterivaem" toka moe se nastaviti na isti naqin od w, poveavaem toka kroz direktne grane i smaivaem toka kroz povratne grane. U ovom sluqaju postoji samo jox jedna direktna grana (w, t) koja dostie t, i problem je rexen. Poxto samo direktne grane mogu da izlaze iz s, odnosno da ulaze u t, ukupan tok je povean. Poveae je jednako maem od sledea dva broja: minimalnog sleka direktnih
6.10. TRANSPORTNE MREE u
4/3
167
-u
µ 5/5 s u
7/3
6/5
3/2 v -u
Ru
3/3
u 7/7 R R -u -u t 6 µ 1/1 4/3
4/2
5/5
6/3 R -u w
Ris. 32. Primer mree sa poveavajuim putem.
grana, odnosno minimalnog toka povratnih grana. Na slici 33 prikazana je ista mrea sa promeenim tokom; novi4/3tok je ustvari optimalan. u
-u
µ 5/5 s u
7/5
6/5
3/2 v -u
Ru
3/3
4/4
7/7 R R - uu -u t 6 µ 1/1 4/1
5/5
6/5 R -u w
Ris. 33. Rezultat poveavaa toka u mrei sa slike 32.
Iz reqenog sledi da ako u mrei postoji poveavajui put, onda tok nije optimalan. Obrnuto je takoe taqno. Teorema 6.2 (Teorema o poveavajuem putu). Tok kroz mreu je optimalan ako i samo ako u odnosu na ega ne postoji poveavajui put. Dokazatel~stvo. Dokaz u jednom smeru smo ve videli | ako u mrei postoji poveavajui put, onda tok nije optimalan. Pretpostavimo sada da u odnosu na tok f ne postoji ni jedan poveavajui put, i dokaimo da je tada f optimalni tok. Za proizvo an presek (odreen skupom A, s ∈ A, t ∈ B ≡ V \ A) definixemo kapacitet, kao zbir kapaciteta egovih grana koje vode iz nekog qvora A u neki qvor B. Jasno je da ni jedan tok ne moe biti vei od kapaciteta proizvo nog preseka. Zaista, ukupan tok iz s jednak je zbiru
168
6. GRAFOVSKI ALGORITMI
tokova kroz grane preseka od A ka B, umaenom za tok kroz grane preseka od B ka A, pa je mai ili jednak od zbira kapaciteta grana koje vode od A ka B , odnosno od kapaciteta preseka. Prema tome, ako pronaemo tok sa vrednoxu jednakom kapacitetu nekog preseka, onda je taj tok optimalan. Sa dokazom nastav amo u tom pravcu: pokazaemo da ako u odnosu na tok ne postoji poveavajui put, onda je ukupan tok jednak kapacitetu nekog preseka, pa dakle optimalan. Neka je f tok u odnosu na koji ne postoji poveavajui put. Neka je A ⊂ V skup qvorova v takvih da u odnosu na tok f postoji poveavajui put od s do v (preciznije, postoji put od s do v takav da na emu za sve direktne grane e vai f (e) < c(e), a za sve povratne grane e vai f (e ) > 0). Jasno je da s∈Ait∈ / A, jer po pretpostavci za f ne postoji poveavajui put. Prema tome, A definixe presek. Tvrdimo da za sve grane (v, w) tog preseka vai f (v, w) = c(v, w) ako je v ∈ A, w ∈ B ("direktne" grane), odnosno f (v, w) = 0 ako je v ∈ B, w ∈ A ("povratne grane"). Zaista, u protivnom bi direktna grana (v, w) produavala poveavajui put do qvora w ∈ / A, suprotno pretpostavci da takav put postoji samo do qvorova iz A. Sliqno, povratna grana (v, w) produavala bi poveavajui put do qvora v ∈/ A. Dakle, ukupan tok jednak je kapacitetu preseka odreenog skupom A, pa je tok f optimalan. ¤ Dokazali smo sledeu vanu teoremu. Teorema 6.3 (Teorema o maksimalnom toku i minimalnom preseku). Optimalni tok u mrei jednak je minimalnom kapacitetu preseka. Teorema o poveavajuem putu ima za posledicu i sledeu teoremu. Teorema 6.4 (Teorema o celobrojnom toku). Ako su kapaciteti svih grana u mrei celobrojni, onda postoji optimalni tok sa celobrojnom vrednoxu. Dokazatel~stvo. Tvree je posledica teoreme o poveavajuem putu. Svaki algoritam koji koristi samo poveavajue puteve dovodi do celobrojnog toka ako su svi kapaciteti grana celobrojni. Ovo je oqigledno, jer se moe krenuti od toka 0, a onda se ukupan tok posle svake upotrebe poveavajueg puta poveava za celi broj. Do istog zak uqka dolazi se i na drugi naqin: kapacitet svakog preseka je celobrojan, pa i minimalnog. ¤ Vratimo se sada na problem bipartitnog uparivaa. Jasno je da svaki alternirajui put u G odgovara poveavajuem putu u G , i obrnuto. Posledica teoreme o poveavajuem putu je teorema o alternirajuem putu iz prethodnog ode ka. Ako je M optimalno uparivae, onda za ega ne postoji alternirajui put, pa u G ne postoji poveavajui put, a odgovarajui tok je optimalan. S druge strane, postoji optimalni celobrojni tok, i on mora da odgovara uparivau, jer je svaki qvor u V povezan samo jednom granom (sa kapacitetom 1) sa s; zbog toga, ukupan tok kroz svaki qvor iz V moe da bude najvixe 1. Isto vai i za qvorove iz skupa U . Ovo uparivae mora biti optimalno, jer ako bi se moglo poveati, onda bi postojao vei ukupni tok. 0
0
0
0
6.10. TRANSPORTNE MREE
169
Teorema o poveavajuem putu neposredno se transformixe u algoritam. Polazi se od toka 0, trae se poveavajui putevi, i na osnovu ih poveava se tok, sve do trenutka kad poveavajui putevi vixe ne postoje. Traee poveavajuih puteva moe se izvesti na sledei naqin. Definixemo rezidualni graf u odnosu na mreu G = (V, E) i tok f , kao mreu R = (V, F ) sa istim qvorovima, istim izvorom i ponorom, ali promeenim skupom grana i ihovih teina. Svaku granu e = (v, w) sa tokom f (e) zameujemo sa najvixe dve grane e = (v, w) (ako je f (e) < c(e); kapacitet e jednak je sleku grane e: c(e ) = c(e) − f (e)), odnosno e = (w, v) (ako je f (e) > 0; kapacitet e je c(e ) = f (e)). Ako se na ovaj naqin dobiju dve paralelne grane, zameuju se jednom, sa kapacitetom jednakom zbiru kapaciteta paralelnih grana. Na slici 34 prikazan je rezidualni graf za mreu sa slike 32, u odnosu na tok zadat na toj slici. Grane rezidualnog grafa odgovaraju moguim granama poveavajueg puta. ihovi kapaciteti odgovaraju moguem poveau toka kroz te grane. Prema tome, poveavajui put je obiqan usmereni put od s do t u rezidualnom grafu. Konstrukcija rezidualnog grafa zahteva O(|E|) koraka, jer se svaka grana proverava taqno jednom. 0
0
0
00
00
00
3 u= y 5
3
2
-u i I 1
5
2
1 4
s uª Oi
-u 1 I
R u¾
1 5
7 R - u¾ 63 2 3 1 u°)
3
µ
ut
3
Ris. 34. Rezidualni graf mree sa slike 32 u odnosu na tok
definisan na toj slici. Na nesreu, izbor poveavajueg puta na proizvo an naqin moe se pokazati vrlo neefikasnim. Vreme izvrxea takvog algoritma u najgorem sluqaju moe da qak i ne zavisi od veliqine grafa. Posmatrajmo mreu na slici 35. Optimalni tok je oqigledno 2M . Meutim, mogli bismo da krenemo od poveavajueg puta s − a − b − t kroz koji se tok moe poveati samo za 1. Zatim bismo mogli da izaberemo poveavajui put s − b − a − t koji opet poveava tok samo za 1. Proces moe da se ponovi ukupno 2M puta, gde M moe biti vrlo veliko, bez obzira xto graf ima samo qetiri qvora i pet grana. Poxto se vrednost M moe predstaviti sa O(log M ) bita, sloenost ovog algoritma je u najgorem sluqaju eksponencijalna funkcija veliqine ulaza (broj M je deo ulaza).
170
6. GRAFOVSKI ALGORITMI M
a e µ
s e
1 M
R? e
M Re t µ M
b
Ris. 35. Primer mree na kojoj traee poveavajuih pute-
va moe biti neograniqeno neefikasno. Gore navedena mogunost je vrlo nepoe na, ali se moe izbei. Edmonds i Karp (Edmonds, Carp ) su 1972. godine pokazali da ako se meu moguim poveavajuim putevima uvek bira onaj sa najmaim brojem grana, onda je broj poveavaa najvixe (|V | − |V |)/4. To vodi algoritmu koji je u najgorem sluqaju polinomijalan u odnosu na veliqinu ulaza. Od tog vremena predloeno je vixe razliqitih algoritama, sloenijih i mae sloenih, a vixe ih dostie goru granicu sloenosti O(|V | ) u najgorem sluqaju. Ovde ih neemo opisivati. 3
3
6.11. Hamiltonovi ciklusi
Ovo poglav e zapoqeli smo razmatraem ciklusa koji sadre sve grane u grafu. Zavrxiemo je osvrtom na cikluse koji sadre sve qvorove grafa. Ovo je takoe poznati problem, koji je ime dobio po irskom matematiqaru Vilijemu Hamiltonu (W. R. Hamilton ), koji je predloio popularnu igru zasnovanu na ovom problemu 1857. godine. Problem. Zadat je graf G = (V, E). Pronai u G prosti ciklus koji svaki qvor iz V sadri taqno jednom. Takav ciklus zove se Hamiltonov ciklus. Grafovi koji sadre takve cikluse zovu se Hamiltonovi grafovi. Problem ima usmerenu i neusmerenu verziju; mi emo se baviti samo neusmerenom varijantom. Za razliku od problema Ojlerovih ciklusa, problem nalaea Hamiltonovih ciklusa (odnosno karakterizacije Hamiltonovih grafova) je vrlo teak. Da bi se proverilo da li je graf Ojlerov, dovo no je znati stepene egovih qvorova. Za utvrivae da li je graf Hamiltonov, to nije dovo no. Zaista, dva grafa prikazana na slici 36 imaju po 16 qvorova stepena 3, ali je prvi Hamiltonov, a drugi oqigledno nije. Ovaj problem spada u klasu NPkompletnih problema, koji e biti razmatrani u poglav u 11. U ovom ode ku prikazaemo jednostavan postupak nalaea Hamiltonovog ciklusa u specijalnoj klasi vrlo gustih grafova.
6.11. HAMILTONOVI CIKLUSI e
e
e
171
e
e
e
e
e
e
e e e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e
e e
Ris. 36. Dva grafa sa po 16 qvorova stepena 3, od kojih je
prvi Hamiltonov, a drugi nije. Neka je G = (V, E) povezan neusmeren graf i neka za proizvo an qvor v ∈ V d(v) oznaqava egov stepen. Sledei problem odnosi se na nalaee Hamiltonovog ciklusa u vrlo gustim grafovima. Pokazaemo da uslovi problema garantuju da je graf Hamiltonov. Problem. Dat je povezan neusmeren graf G = (V, E) sa n ≥ 3 qvorova, takav da svaki par nesusednih qvorova v i w zadovo ava uslov d(v) + d(w) ≥ n. Pronai u G Hamiltonov ciklus. Algoritam se zasniva na indukciji po broju grana koje treba ukloniti iz kompletnog grafa da bi se dobio zadati graf. Baza indukcije je kompletan graf. Svaki kompletan graf sa bar tri qvora sadri Hamiltonov ciklus, koji je lako pronai. Induktivna hipoteza. Umemo da pronaemo Hamiltonov ciklus u grafovima koji zadovo avaju navedene uslove ako imaju bar n(n − 1)/2 − m grana. Sada treba da pokaemo kako pronai Hamiltonov ciklus u grafu sa n(n − 1)/2 − (m + 1) grana koji zadovo ava uslove problema. Neka je G = (V, E) takav graf. Izaberimo proizvo na dva nesusedna qvora v i w u G (to je mogue ako graf nije kompletan), i posmatrajmo graf G koji se od G dobija dodavaem grane (v, w). Prema induktivnoj hipotezi mi umemo da pronaemo Hamiltonov ciklus u grafu G . Neka je x , x , ..., x , x takav ciklus u G (videti sliku 37). Ako grana (v, w) nije deo ciklusa, onda je isti ciklus deo grafa G, pa je problem rexen. U protivnom, bez smaea opxtosti moe se pretpostaviti da je v = x i w = x . Prema datim uslovima je d(v) + d(w) ≥ n. Potrebno je u grafu pronai novi Hamiltonov ciklus. Posmatrajmo sve grane grafa G susedne sa qvorovima v ili w. Tvrdimo da pod zadatim uslovima postoje dva qvora x i x takva da u G postoje grane (w, x ) i (v, x ). Da bismo to dokazali, pretpostavimo suprotno, da ni za jedno i, 2 ≤ i ≤ n − 2, ne postoje istovremeno obe grane (w, x ) i (v, x ). Neka je qvor w vezan sa qvorom x i k qvorova x , x , . . . , x , pri qemu 0
0
1
1
2
n
n
i
i
0
1
i+1
i+1
i
n−1
i1
i2
ik
i+1
172
6. GRAFOVSKI ALGORITMI xn−1
w e
e
v e
x2 e
e
x3 e
º
e
e W
e
6 e
²
e e
e
e
e
e
xi+1 xi
Ris. 37. Modifikacija Hamiltonovog ciklusa posle izbacivaa grane (v, w).
je 2 ≤ i < i < · · · < i ≤ n − 2. Tada qvor v ne sme biti vezan ni sa jednim od qvorova x , x , . . . , x , pa je d(v) ≤ n − 2 − k (od ukupno n − 1 moguih grana iz v ne postoje grane ka w, niti ka k navedenih qvorova, razliqitih od w). Zbog toga je d(w) + d(v) ≤ (k + 1) + (n − 2 − k) = n − 1; ovo je u kontradikciji sa pretpostavkom da je d(w) + d(v) ≥ n. Dakle, za neko i postoje grane (w, x ) i (v, x ). Od ovih dveju grana moe se formirati novi Hamiltonov ciklus v(= x ), x , x , . . . , w(= x ), x , x , . . . , v, koji ne sadri granu (v, w), videti sliku 37. Realizacija. Direktna primena ovog dokaza polazi od kompletnog grafa, iz koga se jedna za drugom izbacuju grane koje ne pripadaju zadatom grafu. Bo e je rexee poqeti sa mnogo maim grafom, na sledei naqin. U datom grafu G najpre pronalazimo dugaqak put (na primer, pomou DFS), a onda dodajemo nove grane tako da put produimo do Hamiltonovog ciklusa. Tako je dobijen vei graf G . Obiqno je dovo no dodati samo nekoliko grana. Meutim, qak i u najgorem sluqaju bie dodata najvixe n − 1 grana. Polazei od G , dokaz teoreme se zatim primeuje iterativno, sve dok se ne pronae Hamiltonov ciklus u G. Ukupan broj koraka za zamenu jedne grane je O(n). Potrebno je zameniti najvixe n grana, pa je vremenska sloenost algoritma O(n ). 1
2
k
i1 +1
i
i2 +1
ik +1
i+1 1
i+1
i+2
n
i
i−1
0
0
2
6.12. Rezime
Grafovi se koriste kao modeli za odnose meu parovima objekata. Poxto veina algoritama zahteva ispitivae kompletnog ulaza, prvi problem na koji se obiqno nailazi je obilazak grafa. Analizirali smo dva tipa obilaska grafova: pretragu u dubinu (DFS) i pretragu u xirinu (BFS). Videli smo nekoliko primera kod kojih je DFS pogodnija od BFS. Moe se dakle preporuqiti da se uvek najpre pokuxa sa DFS (iako postoji mnogo primera
ZADACI
173
gde je BFS superiornija). DFS je posebno pogodna za rekurzivne algoritme na grafovima. BFS obiqno zahteva vixe prostora (xto opet nije pravilo | zavisi od grafa). Videli smo takoe primer pretrage sa prioritetom, koja je korixena za izraqunavae duina najkraih puteva od zadatog qvora. Pretraga sa prioritetom je sloenija od obiqne pretrage. Ona je korisna kod optimizacionih problema sa teinskim grafovima. Ciklusi qesto predstav aju problem u grafovskim algoritmima. Obiqno su zbog toga algoritmi za stabla ili usmerene acikliqke grafove jednostavniji za realizaciju i bri. Druga korisna tehnika kod grafova je redukcija (svoee). Poxto grafovi mogu biti predstav eni matricama, postoji prirodna povezanost izmeu grafovskih i algoritama sa matricama. Problemi transportnih mrea i uparivaa su oblast u kojoj se redukcije xiroko primeuju. U poglav u 11 razmatraemo klasu problema, takozvane NP-kompletne probleme, koji se verovatno ne mogu rexiti algoritmima sloenosti koja je polinomijalna funkcija od veliqine ulaza u najgorem sluqaju. Ta klasa sadri veliki broj grafovskih problema. Razlike izmeu lakih i texkih problema ponekad su veoma male. Bitno je razumeti ih i razviti intuitivni oseaj za te razlike. Zbog toga je materijal iz poglav a 11 jako vaan za razumevae grafovskih algoritama.
Zadaci
6.1. Rexiti problem odreivaa faktora ravnotee qvorova u binarnom stablu iz ode ka 4.7 pomou DFS (potrebno je samo precizirati uzlanu i izlaznu obradu). 6.2. Konstruisati algoritam koji za dati usmereni graf G = (V, E) i egov qvor v ∈ V ispituje da li je G korensko stablo sa korenom v (smatra se da su u korenskom stablu grane usmerene od korena ka listovima). 6.3. Dat je povezan neusmeren graf G = (V, E), egovo povezujue stablo T i qvor v ∈ V . Konstruisati algoritam sloenosti O(|E| + |V |) koji treba da ustanovi da li je T regularno DFS stablo grafa G sa korenom v. Drugim reqima, treba ustanoviti moe li T biti izlaz DFS iz v za neko ureee grana. 6.4. Okarakterisati neusmerene grafove u kojima za neki qvor v postoji DFS stablo sa korenom u v, koje je identiqno sa BFS stablom sa korenom v (dva stabla su podudarna ako su im jednaki skupovi grana | redosled obilaska tih grana ovde nije bitan). 6.5. Modifikovati algoritam za topoloxko sortirae acikliqkog grafa (slika 16) tako da za proizvo an zadati graf G = (V, E), ako je G acikliqki, onda algoritam daje egovo topoloxko ureee qvorova, a u protivnom pronalazi neki ciklus u G. Sloenost algoritma treba da bude O(|E| + |V |). 6.6. Neka je T = (V, F ) podgraf koji se sastoji od svih grana na najkraim putevima od qvora v u grafu G = (V, E). Pokazati da je T korensko stablo sa korenom v. 6.7. Neka je G = (V, E) neusmereni teinski graf i neka je T egovo stablo najkraih puteva od qvora v ∈ V . Ako se teine grana G poveaju za jednu istu konstantu c, da li je T i da e stablo najkraih puteva od v ? 6.8. Dokazati ili opovrgnuti kontraprimerom: algoritam N ajkr putevi (slika 20) radi korektno za teinske grafove qije neke grane imaju negativne teine, pod uslovom da ne postoji ciklus negativne teine.
174
6. GRAFOVSKI ALGORITMI
6.9. Promeniti algoritam MCST (slika 23) tako da pronalazi povezujue stablo maksimalne cene u grafu. 6.10. (a) Navesti primer povezanog neusmerenog teinskog grafa G = (V, E) i qvora v ∈ V tako da je MCST grafa G istovremeno i stablo najkraih puteva od v . (b) Navesti primer povezanog neusmerenog teinskog grafa G = (V, E), tako da se MCST grafa G i stablo najkraih puteva u G od v razlikuju. (c) Da li je mogue da ova dva stabla nemaju zajedniqkih grana? 6.11. Konstruisati algoritam sloenosti O(|E| + |V |) za nalaee savrxenog uparivaa u vrlo gustom grafu, tj. grafu sa 2n qvorova takvom da za svaka dva egova nesusedna qvora u i v vai d(u) + d(v) ≥ n, ode ak 6.11. 6.12. Nai potreban i dovo an uslov da graf G sa n qvorova ima sledeu osobinu. Postoji niz qvorova v , v , . . . , v , tako da je za i = 1, 2, . . . , n stepen qvora v u grafu G , koji se od G dobija izbacivaem qvorova v , v , . . . , v zajedno sa granama koje su im susedne, jednak 1. 6.13. Konstruisati algoritam linearne vremenske i prostorne sloenosti za nalaenje Ojlerovog puta u Ojlerovom grafu. 6.14. Neka je G = (V, E) neusmereni graf u kome svaki qvor ima paran stepen. Konstruisati algoritam linearne vremenske sloenosti za usmeravae grana u G, tako da ulazni stepen svakog qvora bude jednak egovom izlaznom stepenu. 6.15. Usmereni Ojlerov ciklus je usmereni ciklus koji svaku granu usmerenog grafa sadri taqno jednom. Dokazati da usmereni graf sadri usmereni Ojlerov ciklus akko je ulazni stepen svakog qvora jednak egovom izlaznom stepenu, a odgovarajui neusmereni graf (dobijen pretvaraem usmerenih u neusmerene grane) je povezan. 6.16. Neka je G = (V, E) neusmereni povezan graf sa k qvorova neparnog stepena. (a) Dokazati da je k paran broj. (b) Konstruisati algoritam za nalaee k/2 otvorenih puteva takvih da je svaka grana G sadrana u taqno jednom od tih puteva. 6.17. Neka je dat neusmereni povezan graf G. Konstruisati algoritam linearne vremenske sloenosti za nalaee takvog qvora u G qijim uklaaem se G ne raspada na dve ili vixe komponente povezanosti. 6.18. Binarni de Bruijnov niz je (cikliqki) niz od N = 2 bita a a . . . a takav da se svaki binarni blok s od n bita nalazi negde u ovom nizu. Drugim reqima, postoji jedinstveni indeks i takav da je s = a a . . . a (gde se indeksi raqunaju po modulu N ). Na primer, niz 11010001 je binarni de Bruijnov niz za n = 3. Neka je G = (V, E) usmereni graf definisan na sledei naqin. Skup qvorova V je skup svih binarnih blokova od n − 1 bita (|V | = 2 ). Iz qvora b b . . . b vodi grana ka qvoru c c . . . c akko je b b ...b = c c ...c . Dokazati da je G usmereni Ojlerov graf i objasniti smisao te qienice za de Bruijnove nizove. 6.19. Dato je n prirodnih brojeva d , d , . . . , d kojima je zbir 2n − 2. Konstruisati stablo sa n qvorova, kojima su stepeni d , d , . . . , d . 6.20. Neka je (u , i ), (u , i ), ..., (u , i ), niz parova celih nenegativnih brojeva takvih da je u = 0, u = 1 za 1 < k ≤ n, i > 0 i P i = n−1. Konstruisati korensko stablo sa n qvorova takvo da je ulazni, odnosno izlazni stepen qvora k jednak u , odnosno i . Sloenost algoritma treba da bude O(n). 6.21. Neka je G = (V, E) usmereni graf (ne obavezno acikliqki). Konstruisati efikasan algoritam koji numerixe qvorove grafa brojevima od 1 do |V |, tako da redni broj svakog qvora v bude mai od rednog broja bar jednog qvora w takvog da postoji grana (w, v) (ako ima takvih qvorova w), ili utvruje da takva numeracija ne postoji. 1
n
2
i
1
2
i
i−1
n
i i+1
0 1
i+n−1
n
n−1
2 3
n−1
1 2
1 2
n−1
1
1
1
1
k
1
1 2
n−1
n
n−2
2
n
2
1
n
2
2
n
n n j=1 j
k
k
N −1
ZADACI
175
6.22. Za neusmereni graf G = (V, E) kae se da je k-obojiv ako se svi qvorovi G mogu obojiti sa k razliqitih boja, tako da ne postoje dva susedna qvora obojena istom bojom. Konstruisati algoritam linearne sloenosti za bojee grafa sa dve boje, odnosno za utvrivae qienice da graf nije 2-obojiv (ili bipartitan!). 6.23. Neka je G = (V, E) 2-obojiv neusmereni graf (videti zadatak 6.22). Pokazati da je bojee G sa dve boje jedinstveno (do na permutaciju boja) akko je G povezan graf. 6.24. Neka je T neusmereno stablo (u opxtem sluqaju ne binarno) sa korenom r, zadato listom povezanosti. Svakom qvoru T pridruen je znak iz fiksiranog alfabeta. Neka je string P uzorak (predstav en vektorom znakova). Konstruisati algoritam koji proverava da li se uzorak pojav uje bar jednom na putu od korena do nekog lista. Sloenost algoritma u najgorem sluqaju treba da bude O(n + m), gde je n broj qvorova stabla, a m duina uzorka. 6.25. Dat je povezan neusmereni graf G = (V, E) koji sadri taqno jedan ciklus. Potrebno je usmeriti sve grane tako da ulazni stepeni svih qvorova budu najvixe 1 (takav graf moe se nazvati injektivnim, jer odgovara injektivnom preslikavau V → V ). Konstruisati algoritam za opisano usmeravae grana i oceniti egovu sloenost. 6.26. Neka je G = (V, E) neusmereni graf. Konstruisati algoritam za orijentisae grana grafa G tako da ulazni stepen svakog qvora bude bar 1 | ako je mogue, odnosno da u protivnom ustanovi da je to nemogue. 6.27. Dat je neusmereni graf G = (V, E). Potrebno je usmeriti egove grane tako da budu ispuena sledea dva uslova: • dobijeni usmereni graf sadri usmereno korensko stablo T (tj. stablo qije su sve grane usmerene od korena); • svaka grana koja ne pripada stablu T zatvara usmereni ciklus sa granama iz T . Kolika je sloenost konstruisanog algoritma? 6.28. Dat je usmereni acikliqki graf G = (V, E). Konstruisati algoritam linearne vremenske sloenosti za nalaee najdueg usmerenog prostog puta u G (bilo kog meu ima ako ih ima vixe). 6.29. Neka je G = (V, E) usmereni acikliqki graf i neka je k najvei broj grana nekog puta u G. Konstruisati algoritam linearne sloenosti koji qvorove grafa deli u najvixe k + 1 grupa, tako da za bilo koja dva qvora v , w iz iste grupe ne postoji put od v do w, ni put od w do v. 6.30. Neka je G = (V, E) usmereni graf i neka su v, w dva qvora u G. Konstruisati algoritam linearne sloenosti za odreivae broja razliqitih najkraih puteva od v do w (ne obavezno sa disjunktnim skupom qvorova; granama nisu pridruene teine). 6.31. Kako treba promeniti algoritam N ajkr putevi (slika 20) tako da mu vremenska sloenost u najgorem sluqaju bude O(|V | ), nezavisno od |E|? 6.32. Neka je G = (V, E) teinski usmereni graf. Konstruisati algoritam za odreivae ciklusa minimalne teine u G. 6.33. Granama grafa G = ({a, b, c, d, e}, E) pridruene su duine kao na slici 38. Odrediti duine najkraih puteva izmeu svaka dva qvora grafa. 6.34. Algoritmi za nalaee najkraih puteva iz ode ka 6.5 biraju proizvo an od nekoliko najkraih puteva. Kako treba promeniti te algoritme da, ako ima vixe razliqitih puteva iste duine, onda se bira onaj sa najmaim brojem grana? U sluqaju da ima vixe najkraih puteva sa najmaim brojem grana, dozvo eno je izabrati proizvo an meu ima. Pretpostavka je da su duine grana celi brojevi. 2
176
6. GRAFOVSKI ALGORITMI a
5
d
10 b
4
e
d 1
4
d
d d 5
d
3
c
Ris. 38. Uz zadatak 6.33.
6.35. Neka je G = (V, E) usmeren teinski graf, pri qemu su sve teine grana pozitivne. Neka su v i w dva qvora u G i neka je k ≤ |V | prirodan broj. Konstruisati algoritam za nalaee najkraeg puta od v do w koji se sastoji od taqno k grana. Put ne mora da bude prost. 6.36. Neka je G = (V, E) usmereni acikliqki teinski graf kome su teine nekih grana negativne. Konstruisati algoritam linearne vremenske sloenosti za odreivae najkraih puteva od datog qvora v ∈ V . 6.37. Nai potreban i dovo an uslov da se skup grana E neusmerenog grafa G = (V, E) moe razloiti na disjunktne podskupove E , E , . . . , E koji odgovaraju prostim ciklusima. Konstruisati efikasan algoritam za nalaee takvog razlagaa u grafu G koji zadovo ava taj uslov. 6.38. Dokazati da postoji neusmeren graf sa n qvorova i O(n) grana koji sadri 2 (n) razliqitih prostih ciklusa (odnosno bar 2 razliqitih ciklusa za neko c > 0). 6.39. Dat je usmeren graf G = (V, E) sa n+1 qvorom i n grana, takav da je odgovarajui neusmereni graf stablo, pri qemu je svaka grana (u, w) oznaqena jedinstvenim brojem λ(u, w) iz skupa A = {1, 2, . . . , n}. Potrebno je odrediti funkciju S koja qvorove preslikava u podskupove skupa A, tako da budu zadovo ena sledea dva uslova: 1) ako je (u, w) ∈ E, onda S(w) = S(u) ∪ {λ(u, w)}, i 2) ako u 6= w, onda je S(u) 6= S(w). Pri tome S(u) moe biti proizvo an podskup A, uk uqujui ∅ i A. Konstruisati algoritam za odreivae funkcije S. 6.40. Jezgro usmerenog grafa G = (V, E) je takav podskup V ⊆ V u kome qvorovi nisu meusobno povezani granama, a za svaki qvor w ∈/ V postoji takva grana (v, w) da v ∈ V . Zadat je usmeren graf G = (V, E) sa n + 1 qvorom i n grana, takav da je odgovarajui neusmereni graf stablo. Konstruisati algoritam koji pronalazi jezgro G ili utvruje da G ne sadri jezgro. 6.41. Neka je G = (V, E) povezan usmeren graf, takav da ako (v, w) ∈ E, onda i (w, v) ∈ E, za svaki par v, w ∈ V . Neka je f : E → R takva funkcija, da za svaku granu (v,P w) ∈ E vai f (v, w) = −f (w, v), a za proizvo ni ciklus koji qine grane e , e , . . . , e vai f (e ) = 0. Konstruisati algoritam linearne vremenske sloenosti za odreivae funkcije p : V → R, takve da za svaku granu (v, w) ∈ E vai f (v, w) = p(w) − p(v). 6.42. Minimalno povezujue stablo (MCST) grafa moe se odrediti i na sledei naqin. Umesto da se radi sa jednim stablom kome se dodaje grana po grana, moe se raditi sa kolekcijom disjunktnih stabala (koja su deo MCST) i povezivati ih dodajui jednu po jednu granu. Na poqetku su svi qvorovi disjunktna stabla sa po 0 grana. U svakom koraku algoritam pronalazi granu najmae cene qiji krajevi pripadaju razliqitim stablima, i povezuje ta dva stabla dodajui naenu granu. Konstruisati algoritam zasnovan na ovom pristupu. Kolika je sloenost algoritma? 1
r
2
Ω
cn
0
0
0
1
2
k
k i=1
i
ZADACI
177
6.43. Neka je G = (V, E) neusmeren teinski graf, i neka je F xuma, podgraf grafa (tj. F ne sadri cikluse). Konstruisati efikasan algoritam za odreivae povezujueg stabla G koje sadri sve grane F , i (pod tim uslovima) ima minimalnu cenu. 6.44. Neka je e grana maksimalne teine u nekom ciklusu grafa G = (V, E). Dokazati da postoji MCST grafa G = (V, E \ {e}) koje je istovremeno i MCST grafa G. 6.45. Neka je G = (V, E) povezan neusmeren teinski graf. Moe se pretpostaviti da su teine grana pozitivne i razliqite. Za proizvo nu granu e ∈ E neka T (e) oznaqava povezujue stablo G sa minimalnom cenom meu svim povezujuim stablima G koja sadre e. Konstruisati algoritam sloenosti O(|V | ), koji odreuje T (e) za sve grane e ∈ E . 6.46. Neka je G = (V, E) neusmeren teinski graf i neka je T neko minimalno povezujue stablo (MCST) grafa G. Pretpostavimo da su teine svih grana u G poveane za konstantu c. Da li je T i da e MCST? 6.47. Neka je G = (V, E) povezan neusmereni graf sa n qvorova numerisanih od 1 do n. Konstruisati efikasan algoritam za odreivae najmaeg k takvog da ako se redom uklone qvorovi 1, 2, . . . , k, onda se dobija graf qije sve komponente sadre najvixe n/2 qvorova. Uklaae qvora podrazumeva i uklaae svih emu susednih grana. 6.48.ako Neka je G = (V, E) neusmeren graf. Skup grana F ⊆ E zove se skup povratnih grana svaki ciklus u G sadri bar jednu granu iz F . Konstruisati algoritam za nalaee minimalnog skupa povratnih grana. 6.49. Dokazati da algoritam za odreivae svih najkraih puteva sa slike 25 radi korektno za teinske grafove sa nekim negativnim teinama, pod uslovom da teina ni jednog ciklusa nije negativna. 6.50. Neka je G = (V, E) usmeren teinski graf u kome neke teine mogu biti negativne, ali nema ciklusa negativne teine (ciklusa u kome je zbir teina grana negativan). Neka je T povezujue stablo G sa korenom v. Konstruisati algoritam linearne sloenosti koji utvruje da li T sadri samo najkrae puteve od v do svih ostalih qvorova G (izlaz je samo odgovor "da" ili "ne"). 6.51. Neka je G = (V, E) usmeren teinski graf u kome neke grane imaju negativnu teinu. Konstruisati efikasan algoritam za utvrivae da li graf sadri ciklus negativne teine (dovo no je odgovoriti sa "da" ili "ne"). 6.52. Hamiltonov put je prosti put koji sadri sve qvorove grafa. Konstruisati algoritam linearne sloenosti koji utvruje da li zadati acikliqki usmereni graf G = (V, E) sadri neki Hamiltonov put. 6.53. Algoritam T ranzit zatvorenje2, (slika 27) ima tri umetnute pet e. Spo axa pet a bira kolonu, druga vrstu, a trea obrauju izabranu vrstu. Pretpostavimo da je zameen redosled prve i druge pet e. Pokazati kontraprimerom da ovaj algoritam ne nalazi uvek tranzitivno zatvoree. 6.54. Baza qvorova usmerenog grafa G = (V, E) je podskup B ⊆ V najmae veliqine sa osobinom da za svaki qvor v ∈ V postoji qvor b ∈ B, takav da postoji put duine vee ili jednake od 0 od b do v. Dokazati sledea dva tvrea. (a) Qvor koji ne pripada ni jednom ciklusu i ima ulazni stepen vei od nule ne moe biti ni u jednoj bazi qvorova. (b) Acikliqki usmereni graf ima jedinstvenu bazu qvorova, koju je lako odrediti. 6.55. Konstruisati algoritam linearne sloenosti za odreivae optimalnog uparivaa u stablu. 6.56. Dat je bipartitni graf G, qiji su qvorovi a, b, c, d, e, f , g i 1, 2, 3, 4, 5, 6, 7, odnosno grane {(a, 1), (a, 2), (a, 5), (b, 1), (b, 2), (b, 6), (c, 1), (c, 2), (c, 3), (c, 7), (d, 1), (d, 2), (e, 1), (e, 4), (f, 5), (g, 6)}, videti sliku 39. Odrediti optimalno uparivae u G. G
0
2
178
6. GRAFOVSKI ALGORITMI a b c d e f g
c c c c c c c
c c c c c c c
1 2 3 4 5 6 7
Ris. 39. Uz zadatak 6.56.
6.57. Dat je usmereni graf (mrea) G = (V, E) sa dva izdvojena qvora s i t (videti sliku 40). Granama grafa pridrueni su brojevi, ihovi kapaciteti. Odrediti optimalni (najvei mogui) tok kroz mreu. d
5
µ 7 s
9-d
d 8
-d 3
5
j -d
3 7
Rd
2
j -d
~d t >
7 5
Ris. 40. Uz zadatak 6.57.
6.58. Zvezda je stablo sa bar dva qvora u kome je jedan qvor susedan svim ostalim qvorovima. Neka je G = (V, E) neusmeren povezan graf. Zadatak je konstruisati algoritam za nalaee (bilo koje) kolekcije disjunktnih zvezda (bez zajedniqkih qvorova), takve da svaki qvor pripada nekoj zvezdi. Drugim reqima, zvezde treba da pokrivaju sve qvorove, ali ne obavezno i sve grane grafa. (a) Pronai grexku u sledeem algoritmu zasnovanom na indukciji. Induktivna hipoteza je da umemo da reximo problem za grafove sa mae od n qvorova. Za dati graf G = (V, E) sa n qvorova, biramo egov proizvo an qvor v i uklaamo ga iz G zajedno sa svim susedima. U preostalom grafu se zatim svaka komponenta povezanosti posebno razmatra i na u se primeuje algoritam koji po induktivnoj hipotezi postoji. (b) Konstruisati efikasan (i korektan) algoritam za rexavae ovog problema. 6.59. Zadat je teinski bipartitni graf G = (V, E) sa n qvorova i m grana Kritiqnasloenosti teina uparivaa M (u G) je teina najtee grane u M . Konstruisati algoritam √ O( nm log n) za nalaee optimalnog uparivaa sa minimalnom kritiqnom teinom. 6.60. Rezultati turnira izmeu n igraqa, u kome se svaki uqesnik odmerava sa svima ostalim i nema nerexenih rezultata, dati su matricom. U opxtem sluqaju uqesnici se ne mogu rangirati, jer se moe desiti npr. da je A pobedio B, B pobedio C , i C pobedio A (tj. rezultati ne moraju biti tranzitivni). Zadatak je odrediti takav redosled igraqa P , P , . . . , P , da je P pobedio P za i = 1, 2, . . . , n−1. Algoritam treba da bude sloenosti O(n log n). 6.61. Bojee grafa je pridruivae boja granama grafa, takvo da grane susedne istom qvoru imaju razliqite boje. Neka je k stepen dvojke. Konstruisati algoritam sloenosti O(|E| log k) za bojee neusmerenog bipartitnog grafa qiji svi qvorovi imaju stepen k. 1
n
2
∗
i
i+1
ZADACI
179
6.62. Pokrivaq grana neusmerenog grafa G = (V, E) je skup qvorova U takav da je svaka grana iz E susedna bar jednom qvoru iz U . Konstruisati efikasan algoritam za nalaee najmaeg pokrivaqa grana datog stabla. 6.63. Neka je G = (V, E) stablo, qijem je svakom qvoru dode ena teina jednaka egovom stepenu. Konstruisati algoritam za nalaee pokrivaqa grana minimalne teine grafa G. 6.64. Neka je G = (V, E) povezan neusmeren graf, i neka je k prirodan broj. Konstruisati algoritam za utvrivae da li u G postoji pokrivaq grana (videti zadatak 6.62) sa najvixe k qvorova, koji je istovremeno i nezavisan skup (tj. ne postoji grana izmeu bilo koja dva od tih k qvorova). 6.65. Konstruisati algoritam koji za dati graf G = (V, E) utvruje da li sadri podskup U qvorova koji je istovremeno i minimalni pokrivaq grana i maksimalni nezavisni skup. Algoritam treba da pronae takav skup U ako postoji. 6.66. Intervalni graf je neusmereni graf qiji qvorovi odgovaraju intervalima na realnoj osi, a dva qvora su povezana ako se odgovarajui intervali seku. Neka je G intervalni graf nekog skupa intervala. Konstruisati efikasan algoritam za nalaee maksimalnog nezavisnog skupa u G (maksimalnog skupa qvorova takvog da nikoja dva egova qvora nisu povezana granom). 6.67. (a) Konstruisati algoritam sloenosti O(|V | ) za utvrivae da li zadati neusmereni graf G = (V, E) sadri kvadrat (ciklus duine qetiri) kao podgraf. (b) Usavrxiti algoritam, tako da mu sloenost bude O(|V ||E|). Moe se koristiti matrica povezanosti ili lista povezanosti grafa. 6.68. Pokazati da ne postoji algoritam sloenosti O(|V ||E|) za nalaee svih kvadrata (videti zadatak 6.67) koji su podgrafovi neusmerenog grafa G = (V, E). 3
Glava 7
Geometrijski algoritmi 7.1. Uvod
Geometrijski algoritmi igraju vanu ulogu u mnogim oblastima, na primer u raqunarskoj grafici, projektovau pomou raqunara, projektovau VLSI (integrisanih kola visoke rezolucije), robotici i bazama podataka. U raqunarski generisanoj slici moe biti na hi ade ili qak milione taqaka, linija, kvadrata ili krugova; projektovae kompjuterskog qipa moe da zahteva rad sa milionima elemenata. Svi ovi problemi sadre obradu geometrijskih objekata. Poxto veliqina ulaza za ove probleme moe biti vrlo velika, veoma je znaqajno znati efikasne algoritme za ihovo rexavae. Postoje dve u izvesnoj meri razdvojene oblasti u kojima se pojav uju geometrijski algoritmi, ali se, na alost, obe zovu raqunarska grafika. Jedna od ih bavi se kontinualnim, a druga diskretnim aspektima geometrijskih objekata. Granica nije precizna, pa postoje mnogi sliqni problemi i tehnike. Ovde emo se vixe baviti diskretnom raqunarskom grafikom. U ovom poglav u razmotriemo nekoliko osnovnih geometrijskih algoritama | onih koji se mogu koristiti kao elementi za izgradu sloenijih algoritama, odnosno algoritama koji ilustruju zanim ive tehnike. Objekti sa kojima se radi su taqke, prave, dui i mnogouglovi. Algoritmi obrauju ove objekte, odnosno izraqunavaju neke ihove karakteristike. Najpre dajemo osnovne definicije i navodimo strukture podataka pogodne za predstav ae pojedinih objekata. Taqka p u ravni predstav a se kao par koordinata (x, y) (pretpostav a se da je izabran fiksirani koordinatni sistem). Prava je predstav ena parom taqaka p i q (proizvo ne dve razliqite taqke na pravoj), i oznaqava se sa −p − q−. Du se pak predstav a parom taqaka p i q | krajeva dui, i oznaqava sa p − q. Put P je niz taqaka p , p , . . . , p i dui p − p , p − p ,..., p − p koje ih povezuju. Dui koje qine put su egove ivice (stranice). Zatvoreni put je put qija se posleda taqka poklapa sa prvom. Zatvoreni put zove se i mnogougao. Taqke koje definixu mnogougao su egova temena. Na primer, trougao je mnogougao sa tri temena. Mnogougao se predstav a nizom, a ne skupom taqaka, jer je bitan redosled kojim se taqke zadaju (promenom redosleda taqaka iz istog skupa u opxtem sluqaju dobija se drugi mnogougao). Prosti mnogougao je onaj kod koga odgovarajui put nema preseka sa samim sobom; drugim reqima, jedine ivice koje imaju zajedniqke taqke su susedne ivice sa ihovim zajedniqkim 1
2
k
1
2
2
3
k−1
181
k
182
7. GEOMETRIJSKI ALGORITMI
temenom. Prosti mnogougao ograniqava jednu oblast u ravni, unutraxost mnogougla. Konveksni mnogougao je mnogougao qija unutraxost sa svake dve taqke koje sadri, sadri i sve taqke te dui. Konveksni put je put od taqaka p , p , . . . , p takav je mnogougao p p . . . p konveksan. Pretpostav a se da je qitalac upoznat sa osnovama analitiqke geometrije. U algoritmima koje emo razmatrati nailazi se, na primer, na izraqunavae preseqne taqke dveju dui, utvrivae da li taqka lei sa zadate strane prave, izraqunavae rastojaa izmeu dve taqke. Sve ove operacije mogu se izvesti za vreme ograniqeno konstantom, pomou osnovnih aritmetiqkih operacija. Pri tome, na primer, pretpostav amo da se kvadratni koren moe izraqunati za konstantno vreme; ovaj problem bie spomenut u ode ku 7.3. Qesta neugodna karakteristika geometrijskih problema je postojae mnogih "specijalnih sluqajeva". Na primer, dve prave u ravni obiqno se seku u jednoj taqki, sem ako su paralelne ili se poklapaju. Pri rexavau problema sa dve prave, moraju se predvideti sva tri mogua sluqaja. Komplikovaniji objekti prouzrokuju pojavu mnogo veeg broja specijalnih sluqajeva, o kojima treba voditi raquna. Obiqno se veina tih specijalnih sluqajeva neposredno rexava, ali potreba da se oni uzmu u obzir qini ponekad konstrukciju geometrijskih algoritama vrlo iscrp ujuom. Mi emo namerno ignorisati deta e koji nisu od suxtinskog znaqaja za razumevae osnovnih ideja algoritama. 1
2
k
1 2
k
7.2. Utvrivae da li zadata taqka pripada mnogouglu
Razmatrae zapoqiemo jednim jednostavnim problemom. Problem. Zadat je prost mnogougao P i taqka q. Ustanoviti da li je taqka u ili van mnogougla P . Problem izgleda jednostavno na prvi pogled, ali ako se razmatraju sloeni nekonveksni mnogouglovi, kao onaj na slici 1, problem sigurno nije jednostavan. Prvi intuitivni pristup je pokuxati nekako "izai napo e", polazei od zadate taqke. Posmatrajmo proizvo nu polupravu sa temenom q. Vidi se da je dovo no prebrojati preseke sa stranicama mnogougla, sve do dostizaa spo axe oblasti. U primeru na slici 1, idui na severoistok od date taqke (pratei isprekidanu liniju), nailazimo na xest preseka sa mnogouglom do dostizaa spo axe oblasti (istina, ve posle qetiri preseka stie se van mnogougla, ali to raqunar "ne vidi"; zato se broji ukupan broj preseka poluprave sa stranicama mnogougla). Poxto nas posledi presek pre izlaska izvodi iz mnogougla, a pretposledi nas vraa u mnogougao, itd, taqka je van mnogougla. Uopxte (specijalne sluqajeve na trenutak zanemarujemo) taqka je u mnogouglu ako i samo ako je neparan. Imamo dakle skicu algoritma, videti sliku 2. Kao xto je reqeno u prethodnom ode ku, obiqno postoje neki specijalni sluqajevi koje treba posebno razmotriti. Neka je s taqka van mnogougla, i neka je L du koja spaja q i s. Ci je utvrditi da li q pripada unutraxosti
7.2. UTVRIVA E DA LI ZADATA TAQKA PRIPADA MNOGOUGLU
183
q
Ris. 1. Utvrivae pripadnosti taqke unutraxosti pros-
tog mnogougla. Algoritam prvi pokuxaj Ulaz: (prost mnogougao sa temenima i ivicama Izlaz: (Bulova promen iva, akko pripada ). Taˇ cka u mnogouglu 1(P, q); {
P
}
p 1 , p2 , . . . , p n
P ripada
true
q
P
e1 , e2 , . . . , en
), i q (taqka).
begin
Izabrati proizvo nu taqku s van mnogougla; Neka je L du q − s; broj := 0; for sve grane e mnougla do if e seqe L then {pretpostav amo da presek nije ni teme ni ivica, videti tekst} broj := broj + 1; if broj je neparan then pripada := true i
i
else pripada := f alse end
Ris. 2. Provera pripadnosti taqke unutraxosti zadatog
prostog mnogougla. P na osnovu broja preseka L sa ivicama P . Meutim, du L moe se delom preklapati sa nekim ivicama P . Ovo preklapae oqigledno ne treba brojati u preseke. Drugi specijalni sluqaj je presek L sa temenom mnogougla. Na slici 3(a) vidi se primer sluqaja kad presek L sa temenom ne treba brojati, a na slici 3(b) primer kad taj presek treba brojati. Precizirae algoritma u ovom smislu prepuxta se qitaocu (videti zadatak 7.1). Razvijajui ovaj algoritam, implicitno smo pretpostav ali da radimo sa slikom. Problem je nexto drugaqiji kad je ulaz dat nizom koordinata, xto je uobiqajeno. Na primer, kad posao radimo ruqno i vidimo mnogougao, lako je nai dobar put (onaj sa malo preseka) do neke taqke van mnogougla. U sluqaju mnogougla datog nizom koordinata, to nije lako. Najvei deo vremena troxi se na izraqunavae preseka. Taj deo posla moe se bitno uprostiti ako je du q − s paralelna jednoj od osa | na primer y-osi. Broj preseka sa
184
7. GEOMETRIJSKI ALGORITMI sq
sq
s
s
s (a) s (b) Ris. 3. Specijalni sluqajevi kad prava seqe ivicu kroz teme. ovom specijalnom dui moe biti mnogo vei nego sa optimalnom dui (koju nije lako odrediti | videti zadatak 7.3), ali je nalaee preseka mnogo jednostavnije. Modifikovani algoritam prikazan je na slici 4. Algoritam drugi pokuxaj Ulaz: (prosti mnogougao sa temenima i stranicama ), i (taqka sa koordinatama ). Izlaz: (bulova promen iva, akko pripada ). Taˇ cka u mnogouglu 2(P, q); {
P
}
p1 , p2 , . . . , pn
q
e1 , e2 , . . . , en
(x0 , y0 )
P ripada
true
q
P
begin
Broj := 0;
sve grane e mnogougla do if prava x = x seqe e then {Pretpostav amo da presek nije ni teme ni stranica mnogougla} Neka je y y-koordinata preseka prave x = x sa e ; if y < y then {presek je ispod q} Broj := Broj + 1; if Broj je neparan then P ripada := true
for
i
0
i
i
i
0
i
0
else P ripada := f alse end
Ris. 4. Usavrxena varijanta algoritma za proveru da li taqka pripada zadatom prostom mnogouglu. Sloenost. Za izraqunavae preseka dve dui potrebno je konstantno vreme. Neka je n broj ivica mnogougla. Kroz osnovnu pet u algoritma prolazi se n puta. U svakom prolasku nalazi se presek dve dui i izvrxavaju se jox neke operacije za konstantno vreme. Dakle, ukupno vreme izvrxavaa algoritma je O(n). Komentar. U mnogo sluqajeva jednostavan postupak inspirisan obiqnim algoritmom (onim kojim se ruqno rexava problem) nije efikasan za velike ulaze. Ponekad je pak takav pristup ne samo jednostavan, nego i efikasan. Pristup rexavau problema postupkom koji se vizuelno namee je obiqno dobar izbor. Time se moe doi do vixe korisnih zapaaa o problemu. U
7.3. KONSTRUKCIJA PROSTOG MNOGOUGLA
185
ovom sluqaju, posmatrajui sliku, primetili smo da se problem moe rexiti pratei neki put od taqke do spo axosti mnogougla.
7.3. Konstrukcija prostog mnogougla
Skup taqaka u ravni definixe mnogo razliqitih mnogouglova, zavisno od izabranog redosleda taqaka. Razmotriemo sada pronalaee prostog mnogougla sa zadatim skupom temena. Problem. Dato je n taqaka u ravni, takvih da nisu sve kolinearne. Povezati ih prostim mnogouglom. Postoji vixe metoda za konstrukciju traenog prostog mnogougla; uostalom, jasno je da u opxtem sluqaju problem nema jednoznaqno rexee. Prikazaemo najpre geometrijski pristup ovom problemu. Neka je C veliki krug, qija unutraxost sadri sve taqke. Za nalaee takvog kruga dovo no je O(n) operacija | izraqunavaa najveeg meu rastojaima proizvo ne taqke ravni (centra kruga) do svih n taqaka. Povrxina C moe se "prebrisati" (pregledati) rotirajuom polupravom kojoj je poqetak centar C , videti sliku 5. Pretpostavimo zasad da rotirajua poluprava u svakom trenutku sadri najvixe jednu taqku. Oqekujemo da emo spajaem taqaka onim redom kojim poluprava nailazi na ih, dobiti prost mnogougao. Pokuxajmo da to dokaemo. Oznaqimo taqke, ureene u skladu sa redosledom nailaska poluprave na ih, sa p , p , . . . , p (prva taqka bira se proizvo no). Za svako i, 1 ≤ i ≤ n, stranica p − p (odnosno p − p za i = 1) sadrana je u novom (disjunktnom) iseqku kruga, pa se ne seqe ni sa jednom drugom stranom. Ako bi ovo tvree bilo taqno, dobijeni mnogougao bi morao da bude prost. Meutim, ugao izmedju polupravih kroz neke dve uzastopne taqke p i p moe da bude vei od π . Tada iseqak koji sadri du p − p sadri vixe od pola kruga i nije konveksna figura, a du p − p prolazi kroz druge iseqke kruga, pa moe da seqe druge strane mnogougla. Da bismo se uverili da je to mogue, dovo no je da zamislimo krug sa centrom van kruga sa slike 5. Ovo je dobar primer specijalnih sluqajeva na koje se nailazi pri rexavau geometrijskih problema. Potrebno je da budemo pa ivi, da bismo bili sigurni da su svi sluqajevi razmotreni. Na ovu pojavu nailazi se kod svih vrsta algoritama, ali je ona kod geometrijskih algoritama drastiqnije izraena. Da bi se rexio uoqeni problem, mogu se, na primer, fiksirati proizvo ne tri taqke iz skupa, a za centar kruga izabrati neku taqku unutar ima odreenog trougla (na primer teixte, koje se lako nalazi). Ovakav izbor garantuje da ni jedan od dobijenih sektora kruga nee imati ugao vei od π. Mogue je izabrati i drugo rexee, da se za centar kruga uzme jedna od taqaka iz skupa | taqka z sa najveom x-koordinatom (i sa najmaom y-koordinatom, ako ima vixe taqaka sa najveom x-koordinatom). Zatim koristimo isti osnovni algoritam. Sortiramo taqke prema poloaju u krugu sa centrom z. Preciznije, sortiraju se uglovi izmeu x-ose i polupravih od z ka ostalim taqkama. Ako 1
2
n
i
i−1
1
n
i
i
i
i+1
i+1
i+1
186
7. GEOMETRIJSKI ALGORITMI r
r r
r r
r
b ?
r
r
Ris. 5. Prolazak taqaka u krugu rotirajuom polupravom.
dve ili vixe taqaka imaju isti ugao, one se da e sortiraju prema rastojau od taqke z. Na kraju, z se povezuje sa taqkom sa najmaim i najveim uglom, a ostale taqke povezuju se u skladu sa dobijenim ureeem, po dve uzastopne. Poxto sve taqke lee levo od z, do degenerisanog sluqaja o kome je bilo reqi ne moe doi. Prost mnogougao dobijen ovim postupkom za taqke sa slike 5 prikazan je na slici 6. s s
s s
s
s
s
sz
Ris. 6. Konstrukcija prostog mnogougla.
Opisani metod moe se usavrxiti na dva naqina. Prvo, uglovi se ne moraju eksplicitno izraqunavati. Uglovi se koriste samo za nalaee redosleda kojim treba povezati taqke. Isti redosled dobija se ureeem nagiba (odnosno odnosa priraxtaja y- i x-koordinata) odgovarajuih polupravih; to qini nepotrebnim izraqunavae arkustangensa. Iz istog razloga nepotrebno je izraqunavae rastojaa kad dve taqke imaju isti nagib | dovo no je izraqunati kvadrate rastojaa. Dakle, nema potrebe za izraqunavaem kvadratnih korenova. Algoritam je prikazan na slici 7. Sloenost. Osnovna komponenta vremenske sloenosti ovog algoritma potiqe od sortiraa. Sloenost algoritma je dakle O(n log n).
7.4. Konveksni omotaq
Konveksni omotaq skupa taqaka definixe se kao najmai konveksni mnogougao koji sadri sve taqke skupa. Konveksni omotaq se predstav a na isti naqin kao obiqan mnogougao, temenima navedenim u cikliqkom redosledu.
7.4. KONVEKSNI OMOTAQ
Algoritam Ulaz: (taqke u ravni). Izlaz: (prost mnogougao sa temenima
187
Prost mnogougao(p1 , p2 , . . . , pn );
p1 , p2 , . . . , pn
u nekom redosledu). promeniti oznake tako da p bude ekstremna taqka; {taqka sa najveom x-koordinatom, a ako takvih ima vixe,} {ona od ih koja ima najmauy -koordinatu} for i := 2 to n do izraqunati ugao α izmeu prave −p − p − i x-ose; sortirati taqke prema uglovima α , . . . , α ; {u grupi sa istim uglom sortirati ih prema rastojau od p } P je mnogougao definisan sortiranom listom taqaka P
p1 , p2 , . . . , pn
begin
1
1
i
2
i
n
1
end
Ris. 7. Algoritam za konstrukciju prostog mnogougla sa zadatim skupom temena. Problem. Konstruisati konveksni omotaq zadatih n taqaka u ravni. Obrada konveksnih mnogouglova jednostavnija je od obrade proizvo nih mnogouglova. Na primer, postoji algoritam sloenosti O(log n) za utvrivae pripadnosti taqke konveksnom n-touglu (videti zadatak 7.11). Temena konveksnog mnogougla su neke od taqaka iz zadatog skupa. Kaemo da taqka pripada omotaqu ako je teme omotaqa. Koveksni omotaq moe se sastojati od najmae tri, a najvixe n taqaka. Konveksni omotaqi imaju xiroku primenu, pa su zbog toga razvijeni mnogobrojni algoritmi za ihovu konstrukciju. 7.4.1. Direktni pristup. Kao i obiqno, pokuxaemo najpre sa direktnim induktivnim pristupom. Konveksni omotaq za tri taqke lako je nai. Pretpostavimo da umemo da konstruixemo konveksni omotaq skupa od < n taqaka, i pokuxajmo da konstruixemo konveksni omotaq skupa od n taqaka. Kako n-ta taqka moe da promeni konveksni omotaq za prvih n − 1 taqaka? Postoje dva mogua sluqaja: ili je nova taqka u prethodnom konveksnom omotaqu (tada on ostaje nepromeen), ili je ona van ega, pa se omotaq "xiri" da obuhvati i novu taqku, videti sliku 8. Potrebno je dakle rexiti dva potproblema: utvrivae da li je nova taqka unutar omotaqa i proxirivae omotaqa novom taqkom. Oni nisu jednostavni. Stvar se moe uprostiti pogodnim izborom n-te taqke. Zvuqi izazovno pokuxati sa izborom taqke unutar omotaqa; to, meutim, nije uvek mogue jer u nekim sluqajevima sve taqke pripadaju omotaqu. Druga mogunost, koja se pokazala uspexnom u prethodnom problemu, je izbor ekstremne taqke za n-tu taqku. Izaberimo ponovo taqku sa najveom x-koordinatom (i minimalnom y-koordinatom ako ima vixe taqaka sa najveom x-koordinatom). Neka je to taqka q. Jasno je da taqka q mora biti teme konveksnog omotaqa. Pitae je kako
188
7. GEOMETRIJSKI ALGORITMI p1
t
p5
t
t p2
t
p6 t
t t
t t
t t p4 p3
q
t
Ris. 8. Proxirivae konveksnog omotaqa novom taqkom.
promeniti konveksni omotaq ostalih n−1 taqaka tako da obuhvati i q. Potrebno je najpre pronai temena starog omotaqa koja su u unutraxosti novog omotaqa (p i p na slici 8) i ukloniti ih; zatim se umee novo teme q izmeu dva postojea (p i p na slici 8). Prava oslonca konveksnog mnogougla je prava koja mnogougao seqe u taqno jednoj taqki. Mnogougao uvek ceo lei sa jedne strane svoje prave oslonca. Posmatrajmo sada prave oslonca −q − p − i −q − p − na slici 8. Obiqno samo dva temena mnogougla povezivaem sa q odreuju prave oslonca (ignorisaemo specijalni sluqaj kad dva ili vixe temena mnogougla lee na istoj pravoj sa q). Mnogougao lei izmeu dve prave oslonca, xto ukazuje kako treba izvesti modifikaciju omotaqa. Prave oslonca zaklapaju minimalni i maksimalni ugao sa x-osom meu svim pravim kroz q i neko teme mnogougla. Da bismo odredili ta dva temena, treba da razmotrimo prave iz q ka svim ostalim temenima, da izraqunamo uglove koje one zaklapaju sa x-osom, i meu tim uglovima izaberemo minimalan i maksimalan (videti zadatak 7.4). Posle pronalaea dva ekstremna temena lako je konstruisati modifikovani omotaq. Izostaviemo deta e algoritma, jer, kao xto emo videti, postoji i efikasniji algoritam. Sloenost. Za svaku taqku treba izraqunati uglove pravih ka svim prethodnim temenima i x-ose, pronai minimalni i maksimalni ugao, dodati novi qvor i izbaciti neke qvorove. Sloenost dodavaa k-te taqke je dakle O(k), a videli smo ve da je rexee diferencne jednaqine T (n) = T (n−1)+cn oblika O(n ). Prema tome, sloenost ovog algoritma je O(n ). Algoritam na poqetku takoe zahteva i sortirae, ali je vreme sortiraa asimptotski mae od vremena potrebnog za ostale operacije. 7.4.2. Uvijae poklona. Kako se moe pobo xati opisani algoritam? Kad proxirujemo mnogougao teme po teme, dosta vremena troximo na formirae konveksnih mnogouglova od taqaka koje mogu biti unutraxe za konaqni konveksni omotaq. Moe li se to izbei? Umesto da pravimo omotaqe podskupova datog skupa taqaka, moemo da posmatramo kompletan skup taqaka i da direktno pravimo egov konveksni omotaq. Moe se, kao i u prethodnom algoritmu, krenuti od ekstremne taqke (koja uvek pripada omotaqu), pronai oj susedna temena omotaqa nalazei prave oslonca, i nastaviti na isti naqin 3
4
2
5
2
5
2
2
7.4. KONVEKSNI OMOTAQ
189
od tih suseda. Ovaj algoritam iz razum ivih razloga zove se uvijae poklona . Polazi se od jednog temena "poklona", i onda se on uvija u konveksni omotaq pronalazei teme po teme omotaqa. Algoritam je prikazan na slici 9. Algoritam se moe prepraviti tako da radi i u prostorima vee dimenzije. Algoritam Ulaz: (skup taqaka u ravni). Izlaz: (konveksni omotaq taqaka ). Uvijanje poklona(p1 , p2 , . . . , pn );
p1 , p2 , . . . , pn P
p1 , p2 , . . . , pn
begin
Neka je P prazan skup; Neka je p taqka sa najveom x-koordinatom (i sa najmaom y-koordinatom, ako ima vixe taqka sa najveom x-koordinatom); Uk uqi p u skup P ; Neka je L prava kroz p paralelna sa x-osom; while omotaq P nije zavrxen do Neka je q taqka za koju je najmai ugao izmeu L i −p − q−; Uk uqi q u skup P ; L := prava − p − q−; p := q
end
Ris. 9. Algoritam "uvijae poklona" za konstrukciju konveksnog omotaqa zadatog skupa taqaka. Algoritam uvijae poklona je direktna posledica primene sledee induktivne hipoteze (po k): Induktivna hipoteza. Za zadati skup od n taqaka u ravni, umemo da pronaemo konveksni put duine k < n koji je deo konveksnog omotaqa skupa. Kod ove hipoteze naglasak je na proxirivau puta, a ne omotaqa. Umesto da pronalazimo konveksne omotaqe maih skupova, mi pronalazimo deo konaqnog konveksnog omotaqa. Sloenost. Da bismo dodali k-to teme omotaqu, treba da pronaemo pravu sa najmaim i najveim uglom u skupu od n − k pravih. Zbog toga je vremenska sloenost algoritma uvijae poklona O(n ), xto asimptotski nije bo e od algoritma zasnovanog na proxirivau omotaqa. 7.4.3. Grahamov algoritam. Sada emo razmotriti algoritam za nalaee konveksnog omotaqa sloenosti O(n log n). Zapoqie se sortiraem taqaka prema uglovima, sliqno kao pri konstrukciji prostog mnogougla u ode ku 7.3. Neka je p taqka sa najveom x-koordinatom (i sa najmaom ykoordinatom, ako ima vixe taqaka sa najveom x-koordinatom). Za svaku taqku 2
1
190
7. GEOMETRIJSKI ALGORITMI
p izraqunavamo ugao izmeu prave −p − p − i x-ose, i sortiramo taqke prema veliqini ovih uglova, videti sliku 10. Taqke prolazimo redosledom kojim se pojav uju u (prostom) mnogouglu, i pokuxavamo da identifikujemo temena konveksnog omotaqa. Kao i kod algoritma uvijae poklona pamtimo put sastav en od dela proenih taqaka. Preciznije, to je konveksni put qiji konveksni mnogougao sadri sve do sada pregledane taqke (odgovarajui konveksni mnogougao dobija se povezivaem prve i poslede taqke puta). Zbog toga, u trenutku kad su sve taqke pregledane, konveksni omotaq skupa taqaka je konstruisan. Osnovna razlika izmeu ovog algoritma i uvijaa poklona je u qienici da tekui konveksni put ne mora da bude deo konaqnog konveksnog omotaqa. To je samo deo konveksnog omotaqa do sada pregledanih taqaka. Put moe da sadri taqke koje ne pripadaju konaqnom konveksnom omotaqu; te taqke bie eliminisane kasnije. Na primer, put od p do q na slici 10 je konveksan, ali q i q oqigledno ne pripadaju konveksnom omotaqu. Ovo razmatrae sugerixe algoritam zasnovan na sledeoj induktivnoj hipotezi. i
1
i
1
m
m
m−1
r r pk+1
r
r qm−1 r
r
qm
r
r p1
Ris. 10. Grahamov algoritam za nalaee konveksnog omotaqa skupa taqaka.
Induktivna hipoteza. Ako je dato n taqaka u ravni, ureenih prema algoritmu P rost mnogougao (ode ak 7.3), onda umemo da konstruixemo konveksni put preko nekih od prvih k taqaka, takav da odgovarajui konveksni mnogougao obuhvata prvih k taqaka. Sluqaj k = 1 je trivijalan. Oznaqimo konveksni put dobijen (induktivno) za prvih k taqaka sa P = q , q , . . . , q . Sada treba da proxirimo induktivnu hipotezu na k + 1 taqaka. Posmatrajmo ugao izmeu pravih −q − q − i −q − p − (videti sliku 10). Ako je taj ugao mai od π (pri qemu se ugao meri iz unutraxosti mnogougla), onda se p moe dodati postojeem putu (novi put je zbog toga takoe konveksan), qime je korak indukcije zavrxen. U protivnom, tvrdimo da q lei u mnogouglu dobijenom zamenom q u P taqkom p , i povezivaem p sa p . Ovo je taqno jer su taqke ureene preme odgovarajuim uglovima. Prava −p − p − lei "levo" od prvih k taqaka. Zbog toga q jeste unutar gore definisanog mnogougla, moe se izbaciti iz P , a p se moe dodati. Da li je time sve uraeno? Ne sasvim. Iako se q moe 1
2
m
m−1
m
m
k+1
k+1
m
k+1
k+1
m
1
1
k+1
m
k+1
m
7.4. KONVEKSNI OMOTAQ
191
eliminisati, modifikovani put ne mora uvek da bude konveksan. Zaista, slika 10 jasno pokazuje da postoje sluqajevi kad treba eliminisati jox taqaka. Na primer, taqka q moe da bude unutar mnogougla definisanog modifikovanim putem. Moramo da (unazad) nastavimo sa proverama poslede dve grane puta, sve dok ugao izmeu ih ne postane mai od π. Put je tada konveksan, a hipoteza je proxirena na k + 1 taqku. Deta i algoritma prikazani su na slici 11. Algoritam Ulaz: (skup taqaka u ravni). Izlaz: (konveksni omotaq taqaka ). m−1
Grahamov algoritam(p1 , p2 , . . . , pn );
p1 , p2 , . . . , pn
q1 , q2 , . . . , qm
p1 , p2 , . . . , pn
begin
Neka je p taqka sa najveom x-koordinatom (a najmaom y-koordinatom, ako ima vixe taqaka sa najveom x-koordinatom); Pomou algoritma P rost mnogougao urediti taqke u odnosu na p ; neka je to redosled p , p , . . . , p ; 1
1
1
n
2
q1 := p1 ; q2 := p2 ;
q3 := p3 ; { m := 3;
put P se na poqetku sastoji od p , p i p } 1
for k := 4 to n do while
ugao izmeu − q
m−1
− qm −
m := m − 1;
2
i −q
m
3
− pk −) ≥ π do
m := m + 1;
na slici 10 to je p
qm := pk { end
k+1 }
Ris. 11. Grahamov algoritam za konstrukciju konveksnog omotaqa zadatog skupa taqaka.
Sloenost. Glavni deo sloenosti algoritma potiqe od poqetnog sortiraa. Ostatak algoritma izvrxava se za vreme O(n). Svaka taqka skupa razmatra se taqno jednom u induktivnom koraku kao p . U tom trenutku taqka se uvek dodaje konveksnom putu. Ista taqka bie razmatrana i kasnije (moda qak i vixe nego jednom) da bi se proverila ena pripadnost konveksnom putu. Broj taqaka na koje se primeuje ovakav povratni test moe biti veliki, ali se sve one, sem dve (tekua taqka i taqka za koju se ispostav a da da e pripada konveksnom putu) eliminixu, jer taqka moe biti eliminisana samo jednom! Prema tome, troxi se najvixe konstantno vreme za eliminaciju svake taqke i konstantno vreme za eno dodavae. Ukupno je za ovu fazu potrebno O(n) koraka. Zbog sortiraa je vreme izvrxavaa kompletnog algoritma O(n log n). k+1
192
7. GEOMETRIJSKI ALGORITMI
7.5. Najblii par taqaka
Pretpostavimo da su zadate lokacije n objekata i da je zadatak da proveriti postoje li meu ima dva, koji su preblizu jedan drugom. Ovi objekti mogu biti, na primer, delovi mikroprocesorskog qipa, zvezde u galaksiji ili sistemi za navodavae. Ovde emo razmotriti samo jednu varijantu ovog problema, kao predstavnika xire klase. Problem. U zadatom skupu od n taqaka u ravni pronai dve koje su na najmaem meusobnom rastojau. Sliqni ovom su problemi nalaea najblie taqke (ili k najbliih taqaka) za svaku taqku zadatog skupa, ili nalaee najblie taqke novododatoj taqki. 7.5.1. Direktni pristup. Mogu se izraqunati rastojaa izmeu svake dve taqke, i zatim pronai najmae meu rastojaima. To obuhvata n(n − 1)/2 izraqunavaa rastojaa i n(n − 1)/2 − 1 uporeivaa. Direktno induktivno rexee moglo bi se zasnivati na uklaau jedne taqke, rexavau problema za n − 1 taqaka, i dodavau nove taqke. Meutim, jedina korisna informacija koja se dobija rexavaem problema za n − 1 taqaka je minimalno rastojae, pa se moraju proveriti rastojaa nove taqke do svih prethodnih n − 1 taqaka. Zbog toga ukupan broj T (n) izraqunavaa rastojaa za n taqaka zadovo ava diferencnu jednaqinu T (n) = T (n − 1) + n − 1, T (2) = 1, qije je rexee T (n) = O(n ). Dva opisana rexea suxtinski su ekvivalentna. Ci je da pronai efikasniji algoritam za velike n. 7.5.2. Algoritam zasnovan na dekompoziciji. Umesto da razmatramo taqke jednu po jednu, moemo da skup taqaka podelimo na dva jednaka dela. Induktivna hipoteza ostaje nepromeena, izuzev xto problem svodimo ne na jedan problem sa n − 1 taqkom, nego na dva problema sa n/2 taqaka. Zbog jednostavnosti pretpostavimo da je n stepen dvojke, tako da je skup uvek mogue podeliti na dva jednaka dela. Postoji vixe naqina da se skup podeli na dva jednaka dela. Biramo naqin koji najvixe odgovara naxim ci evima. Voleli bismo da dobijemo xto vixe korisnih informacija iz rexea maih problema, odnosno da xto vei deo tih informacija vai i za kompletan problem. Izgleda razumno da se skup podeli na dva dela podelom ravni na dva disjunktna dela, tako da svaki od ih sadri polovinu taqaka. Poxto se pronae najmaa rastojaa u svakom delu, treba razmotriti samo rastojaa izmeu taqaka bliskih granici skupova. Najjednostavniji naqin podele je sortirati taqke prema (na primer) x-koordinatama i podeliti ravan pravom paralelnom sa y-osom, koja deli skup na dva jednaka dela, videti sliku 12 (ako vixe taqaka lei na pravoj podele, taqke se mogu na proizvo an naqin razdeliti izmeu skupova). Naqin podele izabran je tako da se maksimalno pojednostavi objediavae rexea maih problema. Sortirae treba izvrxiti samo jednom. 2
7.5. NAJBLII PAR TAQAKA s s
s s
s s ¾ d2 s
193 s
s
s s ¾d1
s s s s s ¾ -¾ d1 d1
Ris. 12. Problem nalaea dve najblie taqke. Zbog jednostavnosti ograniqiemo se na nalaee vrednosti najmaeg rastojaa izmeu taqaka (a ne i para taqaka za koje se ono dostie). Pronalaee dve najblie taqke izvodi se minimalnom doradom algoritma. Neka je P skup taqaka i neka je n stepen dvojke. Najpre se skup P deli na dva istobrojna podskupa P i P na opisani naqin. Najmae rastojae u svakom podskupu pronalazi se na osnovu induktivne hipoteze. Neka je d minimalno rastojae u P , a d minimalno rastojae u P . Bez smaea opxtosti moe se pretpostaviti da je d ≤ d . Potrebno je pronai najmae rastojae u celom skupu, odnosno ustanoviti da li u P postoji taqka na rastojau maem od d od neke taqke u P . Primetimo najpre da je dovo no razmatrati taqke u traci xirine 2d , simetriqnoj u odnosu na pravu podele (videti sliku 12). Ostale taqke ne mogu biti na rastojau maem od d od neke taqke iz drugog podskupa. Na osnovu ovog zapaaa obiqno se iz razmatraa eliminixe veliki broj taqaka. Meutim, u najgorem sluqaju sve taqke mogu biti u traci, pa ne moemo da sebi priuxtimo primenu trivijalnog algoritma na ih. Drugo mae oqigledno zapaae je da za proizvo nu taqku p u traci postoji samo mali broj taqaka u suprotnoj traci qije rastojae od p moe biti mae od d . Iskoristiemo qienicu da je √2/2 > 0.7. Neka je sa y oznaqena √ y -koordinata taqke p. Konstruiximo pravougaonik visine 2.1d < 2d i √ xirine 1.4d < 2d u suprotnoj traci (videti sliku 13), tako da nalee na pravu podele i da mu je y-koordinata preseka dijagonala jednaka y . Podelimo ga jednom vertikalnom pravom i sa dve horizontalne prave na xest jednakih kvadrata stranice 0.7d (kojima je dijagonala maa od d !). U svakom od malih kvadrata moe se nai najvixe jedna taqka, jer je rastojae bilo koje dve taqke u kvadratu mae od d . Sve taqke u drugom podskupu, sa rastojaem od p maim od d , oqigledno se moraju nalaziti u pravougaoniku. Dakle, u drugom podskupu se moe nalaziti najvixe xest taqaka na rastojau od p maem od d : taqka kandidat sa y -koordinatom y mora da zadovo i i uslov |y −y | < d , pa se mora nalaziti u jednom od 6 kvadrata. Prema tome, ako sve taqke u traci 1
2
1
1
2
2
1
2
1
1
2
1
1
1
p
3 2
1
1
1
1
p
1
1
1
1
1
q
p
q
1
194
7. GEOMETRIJSKI ALGORITMI
sortiramo prema y-koordinatama i pregledamo ih tim redom, dovo no je da za svaku taqku proverimo rastojae osam suseda u suprotnoj traci, qetiri ispod i qetiri iznad (a ne od svih n−1 taqaka u najgorem sluqaju). Skica algoritma data je na slici 14. ¾ 0.7d1 -¾ 0.7d1 v
6 0.7d1
v ? 6 0.35d1 v ? 6 0.35d1 ? 6
p v
v
v
0.7d1 v
?
¾
v
v
-¾
-
d1
d1
Ris. 13. Ocena maksimalnog broja taqaka iz suprotnog pod-
skupa, bliskih fiksiranoj taqki. Sloenost. Sortirae sloenosti O(n log n) izvrxava se samo jednom. Zatim se rexavaju dva potproblema veliqine n/2. Eliminacija taqaka van centralne trake moe se izvesti za O(n) koraka. Za sortirae taqaka u traci po y-koordinatama u najgorem sluqaju potrebno je O(n log n) koraka. Konaqno, potrebno je O(n) koraka da se pregledaju taqke u traci, i da se provere rastojaa svake od ih od konstantnog broja suseda u sortiranom redosledu. Ukupno, da bi se rexio problem veliqine n, treba rexiti dva potproblema veliqine n/2 i izvrxiti O(n log n) koraka za kombinovae ihovih rexea (plus O(n log n) koraka za jednokratno sortirae taqaka po x-koordinatama na poqetku). Dobijamo diferencnu jednaqinu T (n) < 2T (n/2)+cn log n, T (2) = 1, pri qemu u T (n) nije uk uqeno poqetno sortirae po x-koordinatama. Indukcijom se pokazuje da je eno rexee T (n) = O(n log n), odnosno preciznije T (n) < cn log n: iz T (n/2) < c(n/2) log (n/2) i diferencne jednaqine sledi da za n > 2 vai T (n) < cn(log n−1) +cn log n = cn(log n−log n+1) < cn log n. 2
2
2 2
2
2
2 2
2
2 2
2
2 2
7.5. NAJBLII PAR TAQAKA
Algoritam prvi pokuxaj Ulaz: (skup taqaka u ravni). Izlaz: (rastojae izmeu dve najblie taqke skupa). Najbliˇ zi par1(p1 , p2 , . . . , pn ); {
195
}
p1 , p2 , . . . , pn d
begin
end
Sortirati taqke prema x-koordinatama; {ovo sortirae izvrxava se samo jednom, na poqetku} Podeliti skup na dva istobrojna podskupa; Rekurzivno izraqunati minimalno rastojae u oba podskupa; Neka je d mae od dva minimalna rastojaa; Eliminisati taqke koje su na rastojau veem od d od prave podele; Sortirati preostale taqke prema y-koordinatama; Za preostale taqke proveriti ihova rastojaa od 4 prethodne i 4 naredne taqke iz suprotne trake; {dovo no je proveriti i samo 4 prethodne taqke!} if neko od ovih rastojaa je mae od d then popraviti d
Ris. 14. Prva varijanta algoritma za nalaee najblieg
para taqaka. Sloenost O(n log n) je asimptotski je bo a od kvadratne, ali videemo da se moe jox malo pobo xati. 7.5.3. Algoritam sloenosti O(n log n). Osnovna ideja je pojaqati induktivnu hipotezu. U toku objediavaa rexea potproblema izvodi se O(n log n) koraka zbog sortiraa taqaka po y-koordinatama. Moe li se sortirae izvesti usput u toku nalaea dveju najbliih taqaka? Drugim reqima, ci je pojaqati induktivnu hipotezu za problem dve najblie taqke tako da obuhvati i sortirae. Induktivna hipoteza. Za zadati skup od < n taqaka u ravni umemo da pronaemo najmae rastojae i da skup taqaka sortiramo po y-koordinatama. Ve smo videli kako se moe pronai minimalno rastojae ako se taqke u svakom koraku sortiraju po y-koordinatama. Dakle, potrebno je jox samo proxiriti induktivnu hipotezu tako da obuhvati sortirae n taqaka kad su dva podskupa veliqine n/2 ve sortirana. Meutim, to je upravo sortirae objediavaem (ode ak 5.3.3). Osnovna prednost ovog pristupa je u tome xto se pri objediavau rexea ne mora izvesti kompletno sortirae, nego samo objediavae dva ve sortirana podniza. Poxto se objediavae sortiranih podnizova izvodi za O(n) koraka, diferencna jednaqina za sloenost (bez poqetnog sortiraa po x-koordinatama) postaje T (n) < 2T (n/2)+cn, T (2) = 1. eno rexee je T (n) = O(n log n), xto je asimptotski jednako sloenosti 2
196
7. GEOMETRIJSKI ALGORITMI
poqetnog sortiraa taqaka po x-koordinatama. Pobo xani algoritam prikazan je na slici 15. Algoritam Pobo xana verzija Ulaz: (skup taqaka u ravni). Izlaz: (rastojae izmeu dve najblie taqke skupa). Najbliˇ zi par2(p1 , p2 , . . . , pn ); {
}
p1 , p2 , . . . , pn d
begin
end
Sortirati taqke prema x-koordinatama; {ovo sortirae izvrxava se samo jednom, na poqetku} Podeliti skup na dva istobrojna podskupa; Rekurzivno izvrxiti sledee: izraqunati minimalno rastojae u oba podskupa; sortirati taqke u svakom delu prema y-koordinatama; Objediniti dva sortirana niza u jedan; {Objediavae se mora izvrxiti pre eliminacije:} {sledeem nivou rekurzije mora se isporuqiti sortiran kompletan skup} Neka je d mae od dva minimalna rastojaa; Eliminisati taqke koje su na rastojau veem od d od prave podele; Za preostale taqke proveriti ihova rastojaa od 4 prethodne i 4 naredne taqke iz suprotne trake; {dovo no je proveriti i samo 4 prethodne taqke!} if neko od ovih rastojaa je mae od d then popraviti d
Ris. 15. Pobo xana varijanta algoritma za nalaee najblieg para taqaka.
7.6. Preseci horizontalnih i vertikalnih dui
Qesto se nailazi na probleme nalaea preseka. Ponekad je potrebno izraqunavae preseka vixe objekata, a ponekad samo treba otkriti da li je presek neprazan skup. Problemi detekcije su obiqno lakxi. U ovom ode ku prikazaemo jedan problem nalaea preseka, koji ilustruje vanu tehniku za rexavae geometrijskih problema. Ista tehnika moe se primeniti i na druge probleme. Problem. Za zadati skup od n horizontalnih i m vertikalnih dui pronai sve ihove preseke. Ovaj problem vaan je, na primer, pri projektovau VLSI kola (integrisanih kola sa ogromnim brojem elemenata). Kolo moe da sadri na
7.6. PRESECI HORIZONTALNIH I VERTIKALNIH DUI
197
hi ade "iqica", a projektant treba da bude siguran da ne postoje neoqekivani preseci. Na problem se takoe nailazi pri eliminaciji skrivenih linija; taj problem je obiqno komplikovaniji, jer se ne radi samo o horizontalnim i vertikalnim linijama. Primer problema prikazan je na slici 16.
L
Ris. 16. Preseci horizontalnih i vertikalnih dui.
Nalaee svih preseka vertikalnih dui je jednostavan problem, koji se ostav a qitaocu za vebae (isto se odnosi i na horizontalne dui). Pretpostavimo zbog jednostavnosti da ne postoje preseci izmeu proizvo ne dve horizontalne, odnosno proizvo ne dve vertikalne dui. Ako pokuxamo da problem reximo uklaaem jedne po jedne dui (bilo horizontalne, bilo vertikalne), onda e biti neophodno da se pronau preseci ukloene dui sa svim ostalim duima, pa se dobija algoritam sa O(mn) nalaea preseka dui. U opxtem sluqaju broj preseka moe da bude O(mn), pa algoritam moe da utroxi vreme O(mn) ve samo za prikazivae svih preseka. Meutim, broj preseka moe da bude mnogo mai od mn. Voleli bismo da konstruixemo algoritam koji radi dobro kad ima malo preseka, a ne previxe loxe ako preseka ima mnogo. To se moe postii kombinovaem dveju ideja: izbora specijalnog redosleda indukcije i pojaqavaa induktivne hipoteze. Redosled primene indukcije moe se odrediti pokretnom pravom koja prelazi ("skenira") ravan sleva udesno; dui se razmatraju onim redom kojim na ih nailazi pokretna prava. Pored nalaea preseqnih taqaka, treba quvati i neke podatke o duima koje je pokretna prava ve zahvatila. Ti podaci bie korisni za efikasnije nalaee narednih preseka. Ova tehnika zove se tehnika pokretne linije. Zamislimo vertikalnu pravu koja prelazi ravan sleva udesno. Da bismo ostvarili efekat prebrisavaa, sortiramo sve krajeve dui prema ihovim x-koordinatama. Dve kraje taqke vertikalne dui imaju iste x-koordinate, pa je dovo na jedna od ih. Za horizontalne dui moraju se koristiti oba kraja. Posle sortiraa krajeva, dui se razmatraju jedna po jedna utvrenim redosledom. Kao i obiqno pri induktivnom pristupu, pretpostav amo da smo pronaxli preseqne taqke prethodnih dui, i da smo obezbedili neke dopunske informacije, pa sada pokuxavamo da obradimo sledeu du i da unesemo neophodne dopune informacija. Prema tome struktura algoritma je
198
7. GEOMETRIJSKI ALGORITMI
u osnovi sledea. Razmatramo krajeve dui jedan po jedan, sleva udesno. Koristimo informacije prikup ene do sada (nismo ih jox specificirali) da obradimo kraj dui, pronaemo preseke u kojima ona uqestvuje, i dopuujemo informacije da bismo ih koristili pri sledeem nailasku na neki kraj dui. Osnovni deo posla je definisae informacija koje treba prikup ati. Pokuxajmo da pokrenemo algoritam da bismo otkrili koje su to informacije potrebne. Prirodno je u induktivnu hipotezu uk uqiti poznavae svih preseqnih taqaka dui koje se nalaze levo od trenutnog poloaja pokretne prave. Da li je bo e proveravati preseke kad se razmatra horizontalna ili vertikalna du? Kad razmatramo vertikalnu du, horizontalne dui koje je mogu sei jox uvek se razmatraju (poxto nije dostignut ihov desni kraj). S druge strane, kad posmatramo bilo levi, bilo desni kraj horizontalne dui, mi ili nismo naixli na vertikalne dui koje je seku, ili smo ih ve zaboravili. Dakle, bo e je preseke brojati prilikom nailaska na vertikalnu du. Pretpostavimo da je pokretna prava trenutno preklopila vertikalnu du L (videti sliku 16). Kakve informacije su potrebne da se pronau svi preseci dui L? Poxto se pretpostav a da su svi preseci levo od trenutnog poloaja pokretne prave ve poznati, nema potrebe razmatrati horizontalnu du ako je en desni kraj levo od pokretne prave. Prema tome, treba razmatrati samo one horizontalne dui qiji su levi krajevi levo, a desni krajevi desno od trenutnog poloaja pokretne prave (na slici 16 takvih dui ima xest). Potrebno je quvati listu takvih horizontalnih dui. Kad se naie na vertikalnu du L, potrebno je proveriti da li se ona seqe sa tim horizontalnim duima. Vano je primetiti da za nalaee preseka sa L ovde x-koordinate krajeva dui nisu od znaqaja. Mi ve znamo da horizontalne dui iz liste imaju x-koordinate koje "pokrivaju" x-koordinatu dui L. Potrebno je proveriti samo y-koordinate horizontalnih dui iz liste, da bi se proverilo da li su one obuhvaene opsegom y-koordinata dui L. Sada smo spremni da formulixemo induktivnu hipotezu. Induktivna hipoteza. Neka je zadata lista od k sortiranih x-koordinata krajeva dui kao xto je opisano, pri qemu je x najvea od x-koordinata. Umemo da pronaemo sve preseke dui koji su levo od x , i da eliminixemo sve horizontalne dui koje su levo od x . Za horizontalne dui koje se jox uvek razmatraju rei emo da su kandidati (to su horizontalne dui qiji su levi krajevi levo, a desni krajevi desno od tekueg poloaja pokretne prave). Formiraemo i odravati strukturu podataka koja sadri skup kandidata. Odloiemo za trenutak analizu realizacije ove strukture podataka. Bazni sluqaj za navedenu induktivnu hipotezu je jednostavan. Da bismo je proxirili, potrebno je da obradimo (k + 1)-i kraj dui. Postoje tri mogunosti. k
k
k
7.6. PRESECI HORIZONTALNIH I VERTIKALNIH DUI
199
(1) (k + 1)-i kraj dui je desni kraj horizontalne dui; du se tada prosto eliminixe iz spiska kandidata. Kao xto je reqeno, preseci se pronalaze pri razmatrau vertikalnih dui, pa se ni jedan od preseka ne gubi eliminacijom horizontalne dui. Ovaj korak dakle proxiruje induktivnu hipotezu. (2) (k+1)-i kraj dui je levi kraj horizontalne dui; du se tada dodaje u spisak kandidata. Poxto desni kraj dui jox nije dostignut, du se ne sme jox eliminisati, pa je i u ovom sluqaju induktivna hipoteza proxirena na ispravan naqin. (3) (k + 1)-i kraj dui je vertikalna du. Ovo je osnovni deo algoritma. Preseci sa ovom vertikalnom dui mogu se pronai uporeivaem y -koordinata svih horizontalnih dui iz skupa kandidata sa y -koordinatama krajeva vertikalne dui. Algoritam je sada kompletan. Broj uporeivaa e obiqno biti mnogo manji od mn. Na alost, u najgorem sluqaju ovaj algoritam ipak zahteva O(mn) uporeivaa, qak iako je broj preseka mali. Ako se, na primer, sve horizontalne dui prostiru sleva udesno ("celom xirinom"), onda se mora proveriti presek svake vertikalne dui sa svim horizontalnim duima, xto implicira sloenost O(mn). Ovaj najgori sluqaj pojav uje se qak i ako ni jedna vertikalna du ne seqe ni jednu horizontalnu du. Da bi se usavrxio algoritam, potrebno je smaiti broj uporeivaa ykoordinata vertikalne dui sa y-koordinatama horizontalnih dui u skupu kandidata. Neka su y-koordinate dui koja se trenutno razmatra y i y , i neka su y-koordinate horizontalnih dui iz skupa kandidata y , y , . . . , y . Pretpostavimo da su horizontalne dui u skupu kandidata zadate sortirano prema y-koordinatama (odnosno niz y , y , . . . , y je rastui). Horizontalne dui koje se seku sa vertikalnom mogu se pronai izvoeem dve binarne pretrage, jedne za y , a druge za y . Neka je y < y ≤ y ≤ y ≤ y < y . Vertikalnu du seku horizontalne sa koordinatama y , y ,... y , i samo one. Moe se takoe izvrxiti jedna binarna pretraga za npr. y , a zatim prolaziti y-koordinate dok se ne doe do y . Iako je polazni problem dvodimenzionalan, nalaee y , ... y je jednodimenzionalni problem. Traee brojeva u jednodimenzionalnom opsegu (u ovom sluqaju od y do y ) zove se jednodimenzionalna pretraga opsega. Ako su brojevi sortirani, onda je vreme izvrxea jednodimenzionalne pretrage opsega proporcionalno zbiru vremena traea prvog preseka i broja pronaenih preseka. Naravno, ne moemo da priuxtimo sebi sortirae horizontalnih dui pri svakom nailasku na vertikalnu du. Prisetimo se jox jednom zahteva. Potrebna je struktura podataka pogodna za quvae kandidata, koja dozvo ava umetae novog elementa, brisae elementa i efikasno izvrxee jednodimenzionalne pretrage opsega. Na sreu, postoji vixe struktura podataka | na primer, uravnoteeno stablo | koja omoguuju izvrxee umetaa, brisaa i traea sloenosti O(log n) po operaciji (gde je n broj elemenata u skupu), i linearno pretraivae za vreme D
1
1
D
G
2
2
r
r
i
D
i+1
i+1
j
G
i+2
j
D
j
i+1
G
j
D
G
j+1
200
7. GEOMETRIJSKI ALGORITMI
proporcionalno broju pronaenih elemenata. Algoritam je prikazan na slici 17. Algoritam Ulaz: (skup vertikalnih dui), i (skup horizontalnih dui). i su maa i vea -koordinata dui Izlaz: Skup svih parova dui koje imaju presek. Preseci((v1 , v2 , . . . , vm ), (h1 , h2 , . . . , hn ));
v 1 , v2 , . . . , v m
{yG (vi )
h1 , h2 , . . . , hn
yG (vi )
y
vi }
begin
Sortirati sve x-koordinate u neopadajui niz i smestiti ih u Q; V := ∅; {V je skup horizontalnih dui, trenutnih kandidata za preseke; organizovan} {je kao uravnoteeno stablo prema y -koordinatama horizontalnih dui} while Q je neprazan do ukloniti iz Q naredni kraj dui, p; if p je desni kraj dui h then ukloniti h iz V else if p je levi kraj dui h then uk uqiti h u V else if p je x-koordinata vertikalne dui v then {nalaee preseka kandidata sa vertikalnom dui} jednodimenzionalna pretraga opsega od y (v ) do y (v ) u V k
k
k
k
i
G
end
i
G
i
Ris. 17. Algoritam za nalaee preseka horizontalnih i vertikalnih dui u ravni.
Sloenost. Poqetno sortirae prema x-koordinatama krajeva dui zahteva O((m + n) log(m + n)) koraka. Poxto svako umetae i brisae zahteva O(log n) koraka, ukupno vreme za obradu horizontalnih dui je O(n log n). Obrada vertikalnih dui zahteva jednodimenzionalnu pretragu opsega, koja se moe izvrxiti za vreme O(log n + r), gde je r broj preseka ove vertikalne dui. Vremenska sloenost algoritma je dakle O((m + n) log(m + n) + R),
gde je R ukupan broj preseka.
7.7. Rezime
Geometrijski algoritmi su na neki naqin mae apstraktni od grafovskih, jer smo navikli da vidimo i radimo sa geometrijskim objektima. Meutim, to je samo prvi utisak. Raditi sa ogromnim brojem objekata nije isto xto i raditi sa malim slikama, pa moramo biti oprezni da nas predstava koju imamo ne
ZADACI
201
navede na pogrexne zak uqke. Moraju se predvideti mnogi specijalni sluqajevi. Algoritam za utvrivae pripadnosti taqke unutraxosti mnogougla (ode ak 7.2) je dobar primer. Zbog toga konstrukcija geometrijskih algoritama zahteva poseban oprez. Tehnike za konstrukciju (diskretnih) geometrijskih algoritama sliqne su tehnikama koje smo razmatrali u prethodnim poglav ima. Indukcija u tome igra vanu ulogu. Tehnika pokretne prave, zasnovana na indukciji, zajedniqka je za vixe geometrijskih algoritama; jedan od ih prikazan je u ode ku 7.6. Takoe se qesto koristi dekompozicija. Geometrijski algoritmi (izuzev najjednostavnijih) qesto zahtevaju komplikovane strukture podataka, pa su mnoge sloene strukture podataka razvijene upravo za tu namenu. Ovde nismo razmatrali ni jednu od takvih specijalnih struktura podataka.
Zadaci
7.1. Precizirati algoritam (slika 7.2), tako da budu obuhvaeni specijalni sluqajevi kad poluprava sadri teme ili stranicu mnogougla. 7.2. Konstruisati algoritam koji utvruje da li je datih taqaka u ravni kolinearno. Kolika je vremenska sloenost tog algoritma? 7.3. Neka je proizvo an skup taqaka u ravni. Da li postoji samo jedan mnogougao sa skupom temena ? Ako je tvree taqno, dokazati ga, a u protivnom ga opovrgnuti konT aˇ cka u mnogouglu L
n
S S
traprimerom. 7.4. Dat je konveksni mnogougao P P . . . P i taqka A van ega. Kako se mogu konstruisati dve prave oslonca mnogougla kroz taqku A algoritmom sloenosti O(log n). 7.5. Neka su taqke P P . . . P ureene cikliqki u odnosu na krug sa centrom negde unutar konveksnog omotaqa ovih taqaka. Modifikovati Grahamov algoritam tako da moe da radi sa ovim skupom taqaka bez poqetnog sortiraa. 7.6. Pokazati da Grahamov algoritam moe da odbaci uzastopce p taqaka za proizvo no veliko p. 7.7. Navesti primer n taqaka u ravni sa razliqitim x-koordinatama za koje izvrxavae algoritma N ajbliˇzi par2 sa slike 15 traje Ω(n log n) koraka. 7.8. Dat je skup od n horizontalnih dui u ravni. Pronai sve ihove preseke. Algoritam treba da bude sloenosti O(n log n) u najgorem sluqaju. 7.9. Dato je n taqaka u ravni i prava p. Konstruisati algoritam linearne sloenosti za nalaee prave paralelne sa p koja dati skup taqaka razbija na dva podskupa jednake veliqine (ako taqka lei na toj pravoj, moe se uraqunati u bilo koji od podskupova). 7.10. Neka je P prost (ne obavezno konveksni) mnogougao sadran u datom pravougaoniku R, i neka je q proizvo na taqka unutar R. Konstruisati efikasni algoritam za odreivae takve taqke r van R da je broj ivica P koje seqe du q − r minimalan. 7.11. Neka je P konveksni mnogougao zadat nizom temena (navedenih redom kojim su povezana). Konstruisati algoritam vremenske sloenosti O(log n) koji treba da za datu taqku q ustanovi da li je unutar P . 7.12. Konstruisati algoritam za formirae konveksnog omotaqa skupa od n taqaka u ravni, koji odgovara sortirau umetaem. U svakoj iteraciji treba razmatrati novu taqku i eventualno je uk uqiti u konveksni omotaq prethodno razmotrenih taqaka. Taqke treba razmatrati proizvo nim redosledom (nije dozvo eno poqetno sortirae). Algoritam 0 1
1 2
n
n−1
202
7. GEOMETRIJSKI ALGORITMI
treba da koristi efikasnu strukturu podataka za utvrivae da li je data taqka unutar konveksnog mnogougla. Kolika je vremenska sloenost algoritma u najgorem sluqaju? 7.13. Pretpostavimo da nam je na raspolagau crna kutija koja pronalazi konveksni omotaq unije dva disjunktna konveksna mnogougla P i P za vreme proporcionalno zbiru broja ihovih temena. Konstruisati algoritam vremenske sloenosti O(n log n) koji koristi ovu crnu kutiju da bi odredio konveksni omotaq datog skupa od n taqaka u ravni. 7.14. d-priblian konveksni omotaq skupa taqaka P je konveksni mnogougao Q, qija su sva temena iz P , pri qemu su sve taqke iz P ili u Q, ili na rastojau najvixe d od Q (rastojae taqke od mnogougla je najmae od rastojaa taqke do neke taqke u mnogouglu). Neka je P skup od n taqaka takav da je najvea razlika izmeu x-koordinata neke dve taqke u P jednaka X . Konstruisati algoritam za nalaee d-priblinog konveksnog omotaqa skupa P , vremenske i prostorne sloenosti O(n + X/d). 7.15. (a) Za taqku p u ravni kae se da dominira nad taqkom q ako su x- i y-koordinata taqke p vee od odgovarajuih koordinata taqke q. Taqka p je maksimalna u datom skupu taqaka P ako ni jedna taqka iz P ne dominira nad om. Konstruisati algoritam sloenosti O(n log n) za nalaee svih maksimalnih taqaka datog skupa P od n taqaka. (b) Rexiti odgovarajui problem u tri dimenzije (definicija dominiraa treba da obuhvati sve tri koordinate). 7.16. Neka je S skup taqaka u ravni. Za svako p ∈ S neka je D(p) skup taqaka iz S nad kojima dominira p (videti zadatak 7.15). Konstruisati algoritam vremenske sloenosti O(n log n) za izraqunavae veliqina svih skupova D(p), p ∈ S . 7.17. Dato je n taqaka u ravni. Odrediti meu ima takve dve, da du koja ih povezuje ima najvei nagib. Sloenost algoritma treba da bude O(n log n). 7.18. Dato je n taqaka u ravni, predstav enih vektorom povezanih lista na sledei naqin. Svaki elemenat vektora ima dva po a: X , koje sadri x-koordinatu, i N aredni, koje pokazuje na (nepraznu) povezanu listu svih taqaka skupa sa x-koordinatom jednakom X , sortiranih prema svojim y -koordinatama. Vektor je sortiran prema x-koordinatama. Konstruisati algoritam sloenosti O(n) koji pronalazi najblii par taqaka sa jednakim x-koordinatama, ili sa x-koordinatama koje su susedne u nizu. Da li je u okviru algoritma neophodno izraqunavae kvadratnih korenova? Da li algoritam pronalazi najblii par taqaka (bez ikakvih ograniqea)? 7.19. Dat je skup dui u ravni, koje sa x-osom zaklapaju ugao kπ/4, k = 0, 1, 2, 3. Konstruisati algoritam za nalaee svih preseka ovih dui iste sloenosti kao algoritam za nalaee preseka horizontalnih i vertikalnih dui sa slike 17. 7.20. Dato je n dui u ravni. Konstruisati algoritam sloenosti O(n log n) koji utvruje da li meu ima postoji bar jedan presek. 7.21. Na pravoj je dato n plavih i n crvenih dui. Konstruisati algoritam sloenosti O(n log n) za proveru da li postoji zajedniqka taqka neke plave i neke crvene dui (moe se pretpostaviti da ne postoje dve dui sa zajedniqkim temenom). 7.22. Dat je skup intervala na pravoj, predstav enih koordinatama krajeva. Konstruisati algoritam sloenosti O(n log n) za nalaee svih intervala sadranih u nekom drugom intervalu iz skupa. 7.23. Dato je n pravougaonika u ravni sa stranicama paralelnim osama. Pomou algoritma iz zadatka 7.22 pronai sve pravougaonike sadrane u nekom drugom pravougaoniku. Moete li da konstruixete algoritam sloenosti O(n log n)? 7.24. Dato je n pravougaonika u ravni sa stranicama paralelnim osama. Konstruisati algoritam za nalaee preseka svih tih pravougaonika. 1
2
ZADACI
203
7.25. Dato je n krunica u ravni. Konstruisati algoritam sloenosti O(n log n) koji utvruje da li se neke dve od tih krunica seku. 7.26. Dat je skup od n k-uglova. Konstruisati algoritam koji proverava da li meu ima postoje neka dva sa nepraznim presekom. Kolika egova sloenost algoritma? 7.27. Data su dva konveksna mnogougla listama svojih temena (cikliqkim redosledom). Konstruisati algoritam linearne vremenske sloenosti za odreivae preseka ovih mnogouglova. Izlaz (takoe konveksni mnogougao) treba da bude predstav en cikliqki ureenom listom temena. 7.28. Dato je n trouglova u ravni (trojkama svojih temena). Konstruisati algoritam sloenosti O(n log n) za nalaee ihovog preseka. 7.29. Konveksni n-tougao dat je cikliqki ureenom listom svojih temena. Konstruisati algoritam linearne vremenske sloenosti za odreivae n trouglova qiji je presek dati mnogougao. 7.30. Konstruisati algoritam sloenosti O(n log n), koji utvruje da li su kolinearne neke tri od zadatih n taqaka u ravni. 7.31. Konstruisati algoritam sloenosti O(n log n), koji utvruje da li postoji kvadrat sa temenima u neke qetiri od zadatih n taqaka u ravni. 7.32. Dato je n taqaka u ravni sa celobrojnim koordinatama. Potrebno je odrediti najmai skup pravih, paralelnih bilo nekoj osi, bilo nekoj simetrali kvadranta, a koji sadri svih n taqaka. 2
2
Glava 8
Algebarski algoritmi 8.1. Uvod
Kad god izvrximo neku algebarsku operaciju, mi ustvari izvrxavamo jedan algoritam. Do sada smo te operacije prihvatali kao nexto obiqno, kao algoritme koji postoje sami po sebi. Meutim, bez obzira da li je u pitau mnoee, de ee ili neka sloenija algebarska operacija, uobiqajeni algoritam nije uvek najbo i ako se radi sa vrlo velikim brojevima ili nizovima brojeva. Ista pojava na koju smo nailazili u prethodnim poglav ima ispo ava se i ovde: algoritmi koji su dobri za mali ulaz postaju neefikasni za vee ulaze. Sloenost algoritma meri se brojem "operacija" koje algoritam izvrxava. U najveem broju sluqajeva pretpostav amo da se osnovne aritmetiqke operacije (kao xto su sabirae, mnoee, de ee) izvrxavaju za jediniqno vreme. To je razumna pretpostavka kad se operandi mogu predstaviti sa jednom ili dve raqunarske reqi (na primer, ne preveliki celi brojevi, realni brojevi jednostruke ili dvostruke taqnosti). Postoje meutim situacije kad su operandi ogromni, na primer brojevi sa 2000 cifara. Tada se mora uzmeti u obzir i veliqina operanada, a osnovne operacije prestaju da budu jednostavne. Ako se ignorixu veliqine operanada, mogue je da na prvi pogled dobar algoritam bude ustvari vrlo neefikasan. Znaqee "veliqine ulaza" ponekad nije sasvim jasno. Neka je dat celi broj n sa kojim treba izvrxiti neku aritmetiqku operaciju. Na prvi pogled izgleda prirodno da se za veliqinu ulaza smatra sama vrednost n. Ovo se, medjutim, ne uklapa u neformalnu definiciju veliqine ulaza kao meri veliqine memorijskog prostora potrebnog za egovo smextae. Razlika je vrlo velika. Sabirae dva broja od po 100 cifara moe se izvrxiti vrlo brzo, qak i ruqno. S druge strane, brojae do vrednosti predstav ene 100-cifrenim brojem praktiqno je nemogue, qak i na najbrem raqunaru. Poxto se broj n moe predstaviti sa dlog ne bita, za egovu veliqinu moe se smatrati dlog ne = O(log n). Tako se algoritam koji zahteva O(log n) operacija kad je ulaz n smatra linearnim (na primer izraqunavae 2n), jer je O(log n) linearna funkcija veliqine ulaza. Algoritam koji zahteva izvrxavae O(√n) operacija za ulaz n (na primer faktorizacija n proverom de ivosti n svim brojevima maim ili jednakim od √n) ima eksponencijalnu sloenost. 2
2
205
206
8. ALGEBARSKI ALGORITMI
Kao i obiqno, u ovom poglav u emo pau usmeriti na interesantne tehnike konstrukcije algoritama. Najpre se razmatra stepenovae datog broja, zatim verovatno najstariji netrivijalni algoritam, Euklidov algoritam za izraqunavae najveeg zajedniqkog delioca dva broja. Vrlo je interesantno da moderni raqunari koriste 2200 godina star algoritam. Ova dva algoritma koriste se u poznatom asimetriqnom xifarskom sistemu RSA, videti sledee poglav e. Zatim se razmatraju algoritmi za mnoee polinoma i matrica, a poglav e se zavrxava jednim od najvanijih i najlepxih algoritama | brzom Furijeovom transformacijom.
8.2. Stepenovae
Zapoqiemo jednom od osnovnih aritmetiqkih operacija. Problem. Data su dva prirodna broja n i k. Izraqunati n . Problem se lako moe svesti na izraqunavae n , jer je n = n · n . Prema tome, problem se moe rexiti indukcijom po k; dobijeni direktni algoritam prikazan je na slici 1. Smaena je vrednost k, ali ne i egova veliqina. Trivijalni algoritam zahteva k mnoea. Poxto je veliqina podatka k priblino log k, broj iteracija je eksponencijalna funkcija veliqine k (k = 2 ). Ovo nije loxe za male, ali je neprihvat ivo za velike vrednosti k. Algoritam prvi pokuxaj Ulaz: i (dva prirodna broja). Izlaz: (vrednost izraza ). k
k−1
k
k−1
2
log2 k
Stepen(n, k); {
n
}
k
nk
P
begin
P := n; for i := 1 to k − 1 do P := n · P end
Ris. 1. Trivijalni algoritam za stepenovae.
Drugi naqin da se problem rexi je svoee na problem sa dvostruko maim eksponentom pomou jednakosti n = (n ) . Polov ee k odgovara smaeu egove veliqine za konstantu. Zbog toga e broj mnoea biti linearna funkcija od veliqine k. Najjednostavniji sluqaj je k = 2 , za neki prirodan broj j: puta k
k/2 2
j
j
nk = n2
j
z }| { ³¡ ¢2 ´...2 = n2 .
Xta ako k nije stepen dvojke? Razmotrimo jox jednom primeeni postupak redukcije. Poxavxi od parametara n i k, problem je sveden na mai, sa
8.3. EUKLIDOV ALGORITAM
207
parametrima n i k/2. Ako k/2 nije celi broj, onda (k − 1)/2 jeste, pa se moe primeniti sliqna redukcija: ³ ´ nk = n n(k−1)/2
2
.
Sada je algoritam kompletiran. Ako je k parno, jednostavno kvadriramo rezultat stepenovaa izloiocem k/2. Ako je pak k neparno, kvadriramo rezultat stepenovaa izloiocem (k−1)/2 i mnoimo ga sa n. Broj mnoea je najvixe 2 log k . Algoritam je prikazan na slici 2. Algoritam Ulaz: i (dva prirodna broja). Izlaz: (vrednost izraza ). 2
Stepen kvadriranjem(n, k);
n
k
nk
P
begin
if k = 1 then P := n else z := Stepen kvadriranjem(n, k div 2); if k mod 2 = 0 then P := z · z else P := n · z · z end
Ris. 2. Stepenovae kvadriraem.
Sloenost. Ukupan broj mnoea je O(log k). Meutim, kako se napreduje sa izvrxavaem algoritma, meurezultati postaju sve vei, pa mnoea postaju sve komplikovanija. Ostav amo qitaocu da analizira sloenost ovog algoritma pod realnijom pretpostavkom o sloenosti mnoea (videti zadatak 8.8). Ako se mnoee obav a u prstenu ostataka po nekom modulu, onda meurezultati ne rastu u toku izvrxea algoritma i taqna je navedena ocena vremenske sloenosti stepenovaa; jednu primenu ovakvo stepenovae je naxlo u okviru algoritma za xifrovae RSA (videti ode ak 9.5).
8.3. Euklidov algoritam
Najvei) jezajedniqki delilac dva prirodna broja n i m (oznaqava se sa jedinstveni prirodni broj d koji 1) deli m i n, i 2) vei je ili
jednak od svakog drugog prirodnog broja d koji deli n i m. Problem. Odrediti najvei zajedniqki delilac dva data prirodna broja. Kao i obiqno, ideja je svesti polazni problem na problem sa maim ulazom. Mogu li se n ili m nekako smaiti, a da se rezultat ne promeni? Euklid NZD (n, m)
0
208
8. ALGEBARSKI ALGORITMI
je primetio da je to mogue: ako d deli n i m, onda deli i ihovu razliku. Vai i obrnuto; ako je na primer n ≥ m, a d deli m i n − m, onda d deli i zbir m + (n − m) = n. Drugim reqima, NZD (n, m) = NZD (n − m, m), i dobijen je mai ulaz. Meutim, oduzimaem su smaene vrednosti brojeva sa kojima se radi, ali ne i ihove veliqine. Da bi algoritam bio efikasan, moraju se smaiti veliqine brojeva. Na primer, ako je n vrlo veliki broj (npr. 1000 cifara) i m = 24, od n treba oduzeti 24 priblino n/24 puta. Ovo raqunae sastoji se od O(n) koraka, xto je eksponencijalna funkcija od veliqine n. Razmotrimo ovu ideju jox jednom. Posle oduzimaa m od n isti algoritam treba primeniti na n − m i m. Ako je n − m i da e vee od m, od ega treba oduzeti m. Sa oduzimaem m nastav a se sve dok razlika ne postane maa od m. Broj ovakvih oduzimaa moe biti ogroman; sreom, rezultat koji se tako dobija je jednak ostatku n mod m pri de eu n sa m. Prema tome, NZD (n, m) = NZD (n mod m, m). De ee sa ostatkom izvrxava se efikasno. Polazei od brojeva r = n i r = m, izraqunava se ostatak r = r mod r , zatim ostatak r = r mod r , itd. Tako se dobija opadajui niz ostataka (8.1) r =q r +r , 0≤r < r , za i = 1, 2, . . . , k (pri de eu r sa r koliqnik je q , a ostatak r ). Dobijeni niz je konaqan jer je opadajui i sastoji se od prirodnih brojeva. Neka je npr. r = 0 i neka je r 6= 0 posledi qlan ovog niza razliqit od nule. Kako je 0
3
1
i−1
1
i i
i−1
2
0
1
2
i+1
i
i+1
i
i
i+1
k+1
k
NZD (r0 , r1 ) = NZD (r1 , r2 ) = . . . = NZD (rk−1 , rk ) = NZD (rk , 0) = rk ,
vidimo da je d = NZD (n, m) upravo jednako r , posledem ostatku razliqitom od nule. Opisani postupak za izraqunavae najveeg zajedniqkog delioca dva broja zove se Euklidov algoritam, videti sliku 3. Algoritam Ulaz: i (dva prirodna broja). Izlaz: (najvei zajedniqki delilac brojeva i ). k
NZD(m, n);
m
n
nzd
m
begin
a := max(n, m); b := min(n, m);
vrednost koja omoguuje ulazak u pet u} while r > 0 do {r je ostatak}
r := 1; {
r := a mod b; a := b; b := r;
nzd := a end
Ris. 3. Euklidov algoritam.
n
8.3. EUKLIDOV ALGORITAM
209
Sloenost. Tvrdimo da Euklidov algoritam ima linearnu vremensku sloenost u odnosu na veliqinu broja m+n; drugim reqima, egova vremenska sloenost je O(log(m+n)) (ako se pretpostavi da se sve elementarne operacije izvrxavaju za jediniqno vreme, nezavisno od veliqine operanada). Da se to dokae, dovo no je dokazati da vrednost a u algoritmu postaje bar dva puta maa posle dve iteracije. Posle prve iteracije par (a, b) (a > b) zameuje se parom (b, a mod b), a posle druge iteracije parom (a mod b, b mod (a mod b)). Prema tome, posle dve iteracije je broj a zameen brojem a mod b, koji je uvek mai od a/2. Zaista, ako b ≤ a/2 onda je a mod b < b ≤ a/2; u protivnom, za b > a/2, takoe se dobija a mod b = a − b = a/2 − (b − a/2) < a/2. Uz malu dopunu, Euklidov algoritam se moe iskoristiti i za rexavae sledeeg problema. Problem. Najvei zajedniqki delilac d dva prirodna broja n i m izraziti kao ihovu celobrojnu linearnu kombinaciju. Drugim reqima, odrediti cele brojeve x, y, tako da vai d = NZD (n, m) = nx + my. Ci je d izraziti u obliku linearne kombinacije d = r x + r y ostataka r = n i r = m. Problem se moe rexiti indukcijom. Polazi se od baze, izraza za d u obliku linearne kombinacije ostataka r = n i r = m: d=r =r −q r ; ovaj izraz je ekvivalentan pretposledem de eu u Euklidovom algoritmu (izraz (8.1) za i = k − 1). Korak indukcije bio bi izraavae d u obliku linearne kombinacije ostataka r i r , polazei od izraza d = x r + y r | celobrojne linearne kombinacije r i r . Zaista, zamenom r u ovom izrazu sa r = r − q r , dobija se 0
0
1
1
k−1
k
k−2
0
i+1
k−2
k−1 k−1
i
0
i−1
i+1
i
i
i+1
i−1
i+1
i i
d = x0 ri + y 0 (ri−1 − qi ri ) = y 0 ri−1 + (x0 − qi y 0 )ri ,
tj. izraz za d u obliku celobrojne linearne kombinacije ostataka r i r . Dakle, indukcijom po i, i = k − 2, k − 1, . . . , 1, 0 dokazano je da se d moe izraziti kao celobrojna linearna kombinacija bilo koja dva uzastopna qlana r,r niza ostataka. Specijalno, za i = 0, dobija se traeni izraz. Sloenost. Broj operacija je proporcionalan sa brojem operacija u Euklidovom algoritmu, tj. O(m + n). Znaqaj ove dopune Euklidovog algoritma je u tome xto ona omoguuje rexavaa tzv. linearnih Diofantovih jednaqina ax + by = c, gde su a, b, c dati celi brojevi, a x i y su celi brojevi koje treba odrediti. Bez smaea opxtosti moe se pretpostaviti da je a, b > 0. Da bi navedena jednaqina imala bar jedno rexee, potrebno je da d = NZD (a, b) deli c (poxto d deli levu stranu jednaqine, mora da deli i desnu). Ako je ovaj uslov ispuen, jedno od rexea lako se dobija opisanim postupkom. Poxto se d izrazi u obliku d = ax + by , mnoeem sa celim brojem c/d dobija se c = a(x c/d)+b(y c/d), tj. vidi se da je jedno rexee jednaqine par (x, y) = (x c/d, y c/d). Primer odreivaa brojeva x i y , koeficijenata linearne kombinacije d = nx + my , dat je u ode ku 9.5. i−1
i
i
i+1
0
0
0
0
0
0
210
8. ALGEBARSKI ALGORITMI
8.4. Mnoee polinoma
P q x dva polinoma stepena n − 1. Neka su P = px i Q = Polinom je predstav en nizom svojih koeficijenata. Problem. Izraqunati proizvod dva zadata polinoma stepena n − 1. Prirodno je poi od izraza¡ ¢¡ ¢ PQ = p x (8.2) + ··· + p q x + ··· + q = Pn−1 i=0
i
n−1 i i=0 i
i
n−1
2n−2
pn−1 qn−1 x
n−1
0
n−1
n−1
n+i
+ · · · + (pn−1 qi+1 + pn−2 qi+2 + · · · + pi+1 qn−1 ) x
0
+ · · · + p0 q0 .
Koeficijenti polinoma P Q mogu se izraqunati direktno iz (8.2), pri qemu je jasno da e tada broj mnoea i sabiraa biti O(n ). Moe li se isti posao obaviti efikasnije? Do sada smo videli vixe primera da se trivijalni kvadratni algoritmi mogu pobo xati, pa nije iznenaujue da je i u ovom sluqaju odgovor pozitivan. Komplikovani algoritam sloenosti O(n log n) bie razmotren u ode ku 8.6. Ovde emo razmotriti jednostavan algoritam zasnovan na dekompoziciji. Pretpostavimo zbog jednostavnosti da je n stepen dvojke. Svaki od polinoma delimo na dva jednaka dela. Neka je dakle P = P +x P i Q = Q +x Q , gde je 2
1
n/2
2
n/2
1
2
P1 = p0 + p1 x + · · · + pn/2−1 xn/2−1 ,
P2 = pn/2 + pn/2+1 x + · · · + pn−1 xn/2−1 ,
Q1 = q0 + q1 x + · · · + qn/2−1 xn/2−1 ,
Q2 = qn/2 + qn/2+1 x + · · · + qn−1 xn/2−1 .
odnosno
Sada imamo
P Q = (P1 + P2 xn/2 )(Q1 + Q2 xn/2 ) = P1 Q1 + (P1 Q2 + P2 Q1 )xn/2 + P2 Q2 xn .
U izrazu za P Q pojav uju se proizvodi polinoma stepena n/2 − 1, koji se mogu izraqunati indukcijom (rekurzivno). Sabiraem dobijenih rezultata dobija se rexee. Uzimajui u obzir da je mnoee polinoma stepena 0 isto xto i mnoee brojeva, ovim je kompletno definisan rekurzivni algoritam za mnoee polinoma. Ukupan broj operacija T (n) koje se izvrxavaju u okviru ovog algoritma zadovo ava sledeu diferencnu jednaqinu: T (n) = 4T (n/2) + O(n),
T (1) = 1.
Faktor 4 odgovara izraqunavau qetiri proizvoda maih polinoma, a qlan odgovara sabirau proizvoda. Rexee diferencne jednaqine je T (n) = (videti ode ak 2.5.4), pa ovaj algoritam nije bo i od prethodnog. Da bi se doxlo do pobo xaa u odnosu na kvadratni algoritam, potrebno je, na primer, da problem reximo svoeem na mae od qetiri potproblema. Oznaqimo proizvode P Q , P Q , P Q , P Q redom sa A, B, C, D. Treba da izraqunamo A+(B+C)x +Dx . Zapaa se da nisu neophodni sami proizvodi B i C , nego samo ihov zbir. Ako znamo proizvod E = (P + P )(Q + Q ), onda je traeni zbir B + C = E − A − D. Dakle, dovo no je izraqunati samo tri proizvoda maih polinoma: A, D i E. Sve ostalo su sabiraa i O(n) O(n2 )
1 1 n/2
2
1 n
1
2
2
2
1
2
1
2
8.5. MNOE E MATRICA
211
oduzimaa polinoma, xto ionako ulazi u qlan O(n) u diferencnoj jednaqini. Diferencna jednaqina za sloenost pobo xanog algoritma je T (n) = 3T (n/2) + O(n),
a eno rexee je T (n) = O(n ) = O(n ). Zapaamo da su polinomi P +P i Q +Q sa polaznim polinomima vezani neobiqan naqin: dobijeni su od ih sabiraem koeficijenata qiji indeksi se razlikuju za n/2. Ovaj neintuitivni naqin mnoea polinoma znatno smauje broj operacija za velike vrednosti n. Primer 8.1. Neka je n = 4, P = 1 − x + 2x − x i Q = 2 + x − x + 2x . Izraqunajmo proizvod P Q na opisani naqin. Ako se linearni polinomi mnoe direktno, rekurzija se primeuje samo jednom, log2 3 1
1.59
2
1
2
2
3
2
3
A = (1 − x)(2 + x) = 2 − x − x2 , D = (2 − x)(−1 + 2x) = −2 + 5x − 2x2 , E = (3 − 2x)(1 + 3x) = 3 + 7x − 6x2 .
Na osnovu E, A i D izraqunava se B + C = E − A − D: Sada je P Q = A + (B + C)x PQ = =
B + C = 3 + 3x − 3x2 . n/2
+ Dxn ,
odnosno
2
(2 − x − x ) + (3 + 3x − 3x2 )x2 + (−2 + 5x − 2x2 )x4 = 2 − x + 2x2 + 3x3 − 5x4 + 5x5 − 2x6 .
Primeuje se da je izvrxeno 12 mnoea, u odnosu na 16 kod trivijalnog algoritma, i 12 umesto 9 sabiraa/oduzimaa; broj mnoea bio bi sveden na 9 da je rekurzija primeena jox jednom. Uxteda je naravno mnogo vea za velike n.
8.5. Mnoee matrica
Ako su P = (p ) i Q = (q ) date kvadratne matrice reda n, onda je elemenat r matrice R = P Q dat je izrazom X (8.3) r = p q . Problem. Izraqunati proizvod R = P Q dve realne n × n matrice. Direktni (i na prvi pogled jedini ) postupak mnoea matrica zasniva se na definiciji (8.3), xto podrazumeva n mnoea i (n − 1)n sabiraa. Zapazimo da je n broj vrsta, odnosno kolona matrice, a ne veliqina ulaza, koja je u ovom sluqaju n . Prikazaemo sada dva razliqita pobo xaa ovog algoritma. ij
ij
ij
n
ij
ik kj
k=1
3
2
2
212
8. ALGEBARSKI ALGORITMI
8.5.1. Vinogradov algoritam. (S. Winograd jednostavnosti da je n parno. Uvedimo oznake Pi =
n/2 X
) Pretpostavimo zbog
pi,2k−1 pi,2k ,
i = 1, 2, . . . , n,
q2k−1,j q2k,j ,
j = 1, 2, . . . , n.
k=1
Qj =
n/2 X
Pregrupisavaem sabiraka dobija se k=1
rij =
n/2 X
(pi,2k−1 + q2k,j )(pi,2k + q2k−1,j ) − Pi − Qj .
Brojevi P i Q izraqunavaju se samo jednom za svaku vrstu P , odnosno kolonu Q, za xta je potrebno samo n mnoea. Ukupan broj mnoea je dakle smanjen na n /2 + n . Broj sabiraa povean je priblino za n /2. Algoritam je prema tome bo i od direktnog u sluqaju kad se sabiraa izvrxavaju bre od mnoea (xto je tipiqno). Komentar. Vinogradov algoritam pokazuje da se promenom redosleda izraqunavaa moe postii uxteda, qak i kod izraza kao xto je proizvod matrica, koji imaju jednostavan oblik. Sledei algoritam istu ideju eksploatixe mnogo efikasnije. 8.5.2. Xtrasenov algoritam. Na mnoee matrica moe se primeniti postupak dekompozicije, sliqno kao na mnoee polinoma, ode ak 8.4. Zbog jednostavnosti pretpostaviemo da¶je n stepen dvojke. Neka je µ µ ¶ a b A B (8.4) P = , Q= , c d C D gde su a, b, c, d, odnosno A, B, C, D n/2 × n/2 matrice. Primenom dekompozicije se problem svodi na izraqunavae qetiri n/2 × n/2 podmatrice matrice R. Proizvod blok matrica izraqunava se na isti naqin kao kad se blokovi zamene elementima, pa se problem moe shvatiti kao traee efikasnog naqina za izraqunavae proizvoda dve 2 × 2 matrice. Od algoritma za mnoee 2 × 2 matrica dobija se algoritam za mnoee n × n matrica tako xto se umesto proizvoda elemenata umetnu rekurzivni pozivi procedure za mnoenje. Obiqan algoritam za mnoee 2 × 2 matrica koristi 8 mnoea. Zameujui svako mnoee rekurzivnim pozivom, dobijamo diferencnu jednaqinu T (n) = 8T (n/2) + O(n ) (kombinovae maih rexea sastoji se od nekoliko sabiraa matrica reda n/2, sloenosti O(n )), qije je rexee T (n) = O(n ) = O(n ). Ovo nije iznenaujue, jer se koristi obiqan algoritam za mnoee. Ako bismo uspeli da izraqunamo proizvod 2 × 2 matrica izvodei mae od 8 mnoea elemenata, dobili bismo algoritam koji je asimptotski bri od kubnog. k=1
i
3
j
2
2
3
2
2
log2 8
3
8.5. MNOE E MATRICA
213
Faktor koji najvixe utiqe na rekurziju je broj mnoea potrebnih za izraqunavae proizvoda 2 × 2 matrica. Broj sabiraa nije tako vaan, jer mea samo qinilac uz qlan O(n ) u diferencnoj jednaqini, pa ne utiqe na asimptotsku sloenost (on meutim utiqe na konstantni faktor). Xtrasen (Strassen ) je otkrio da je dovo no sedam mnoea elemenata da se izraquna proizvod dve matrice reda dva Ako matrice P , Q (8.4) shvatimo kao matrice reda dva, ondaµse ihov proizvod moe izraqunati¶na sledei naqin: 2
PQ =
z1 + z4 z1 + z3 + z6 + z7
z2 − z3 + z4 + z5 , z2 + z6
pri qemu su sa , , ..., oznaqeni sledei proizvodi , , , , , i . Sloenost. U algoritmu se izraqunava sedam proizvoda matrica dva puta mae dimenzije i konstantni broj sabiraa takvih matrica. Sabiraa su mae vana od proizvoda, jer se dve matrice reda n sabiraju za vreme O(n ), xto je linearna funkcija od veliqine ulaza. Qlan O(n ) nije dominantan u diferencnoj jednaqini T (n) = 7T (n/2) + O(n ). Rexee ove diferencne jednaqine je T (n) = O(n ), odnosno priblino O(n ), xto znaqi da je Xtrasenov algoritam asimptotski bri od obiqnog mnoea matrica. Komentar. Xtrasenov algoritam ima tri vana nedostatka: (1) Praktiqne provere pokazuju da n mora biti vee od 100 da bi Xtrasenov algoritam bio bri od obiqnog mnoea matrica sloenosti O(n ). (2) Xtrasenov algoritam mae je stabilan od obiqnog. Za iste veliqine grexke ulaznih podataka, Xtrasenov algoritam obiqno dovodi do veih grexaka u izlaznim podacima. (3) Xtrasenov algoritam je komplikovaniji i tei za realizaciju od obiqnog. Pored toga, ega nije lako paralelizovati. Bez obzira na ove nedostatke, Xtrasenov algoritam je veoma vaan. Bri je od obiqnog za velike n, a moe se iskoristiti i u drugim problemima sa matricama, kao xto su inverzija matrice i izraqunavae determinante. U poglav u 10 videemo da se nekoliko drugih problema svodi na mnoee matrica. Xtrasenov algoritam se u praksi moe pobo xati korixeem samo za velike matrice, i izlaskom iz rekurzije kad dimenzija matrice postane maa od oko 100. To je sliqno ideji pa ivog izbora baze indukcije, koja je razmotrena u ode ku 5.3.4. Xtrasenov algoritam je direktno pobo xao neke druge algoritme i postavio mnogo pitaa o sliqnim problemima koji su izgledali nerexivi.
z1 z2 z7 z1 = b(A + C) z2 = c(B + D) z3 = (c − b)(A + D) z4 = (a − b)A z5 = (a − c)(B − A) z6 = (d − c)D z7 = (d − b)(C − D)
2
2
2
log2 7
3
2.81
214
8. ALGEBARSKI ALGORITMI
8.6. Brza Furijeova transformacija
Brza Furijeova transformacija (ili FFT, xto je skraenica od fast Fouri) je vana iz vixe razloga. Ona efikasno rexava vaan praktiqan problem, elegantna je, i otvara nove, neoqekivane oblasti primene. Zbog toga je ona jedan od najvanijih algoritama od svog otkria sredinom xezdesetih godina. Algoritam FFT nije jednostavan, i do ega se ne dolazi direktno. Ograniqiemo se na samo jednu egovu primenu, mnoee polinoma. Problem. Izraqunati proizvod dva zadata polinoma p(x) i q(x). Formulacija problema je precizna samo na prvi pogled, jer nije preciziran naqin predstav aa polinoma. Obiqno se polinom
er transform
P = an−1 xn−1 + an−2 xn−2 + . . . + a1 x + a0
predstav a nizom svojih koeficijenata uz 1, x, x , ..., x ; ali to nije jedina mogunost. Alternativa je predstav ae polinoma stepena n − 1 svojim vrednostima u n razliqitih taqaka: te vrednosti jednoznaqno odreuju polinom. Drugi naqin predstav aa je interesantan zbog jednostavnosti mnoea. Proizvod dva polinoma stepena n − 1 je polinom stepena 2n − 2, pa je odreen svojim vrednostima u 2n − 1 taqaka. Ako pretpostavimo da su vrednosti polinoma { qinilaca date u 2n − 1 taqaka, onda se proizvod polinoma izraqunava pomou 2n − 1, odnosno O(n) obiqnih mnoea. Naalost, predstav ae polinoma vrednostima za neke primene nije pogodno. Primer je izraqunavae vrednosti polinoma u zadatim taqkama; pri reprezentaciji vrednostima, ovo je mnogo tee nego ako su zadati koeficijenti polinoma. Meutim, ako bismo mogli da efikasno prevodimo polinome iz jedne u drugu predstavu, dobili bismo odliqan algoritam za mnoee polinoma. Upravo to se postie primenom FFT. Prelaz od predstave polinoma koeficijentima na predstavu vrednostima u taqkama, rexava se izraqunavaem vrednosti polinoma. Vrednost polinoma p(x) (zadatog koeficijentima) u bilo kojoj taqki moe se pomou Hornerove xeme (ode ak 4.2) izraqunati pomou n mnoea. Izraqunavae vrednosti p(x) u n proizvo nih taqaka izvod ivo je dakle pomou n mnoea. Prelaz od predstave polinoma vrednostima na predstavu koeficijentima zove se interpolacija . Interpolacija u opxtem sluqaju takoe zahteva O(n ) operacija. Ovde je k uqna ideja (kao i u mnogim drugim primerima koje smo videli) da se ne koristi proizvo nih n taqaka: mi imamo slobodu da po e i izaberemo proizvo an skup od n razliqitih taqaka. Brza Furijeova transformacija koristi specijalan skup taqaka, tako da se obe transformacije, izraqunavae vrednosti i interpolacija, mogu efikasno izvrxavati. 8.6.1. Direktna Furijeova transformacija. Razmotrimo problem izraqunavaa vrednosti polinoma. Potrebno je izraqunati vrednosti dva polinoma stepena n − 1 u 2n − 1 taqaka, da bi se ihov proizvod, polinom 2
n−1
2
2
8.6. BRZA FURIJEOVA TRANSFORMACIJA
215
stepena 2n − 2, mogao interpolirati. Meutim, polinom stepena n − 1 moe se predstaviti kao polinom stepena 2n−2 izjednaqavaem sa nulom vodeih n−1 koeficijenata. Zbog toga se bez gubitka opxtosti moe pretpostaviti da je problem izraqunati vrednosti proizvo nog polinoma P = P a x stepena n − 1 u n razliqitih taqaka. Ci je pronai takvih n taqaka, u kojima je lako izraqunati vrednosti polinoma. Zbog jednostavnosti pretpostav amo da je n stepen dvojke. Koristiemo matriqnu terminologiju da bismo uprostili oznaqavae. Izraqunavae vrednosti polinoma P u n taqaka x , x , ..., x moe se predstaviti kao izraqunavae proizvoda matrice i vektora: n−1 j=0
0
1 1 . . . 1
x0 x1 ... xn−1
1
j
j
n−1
. . . xn−1 a0 P (x0 ) 0 . . . x1n−1 a1 = P (x1 ) . ... ... ... ... n−1 an−1 P (xn−1 ) . . . xn−1
x20 x21 ... x2n−1
Pitae je kako izabrati vrednosti x , x , ..., x , tako da se ovo mnoee uprosti. Posmatrajmo dve proizvo ne vrste r i s. Voleli bismo da ih uqinimo xto sliqnijim, da bismo uxtedeli na mnoeima. Ne moe se staviti x = x , jer su taqke razliqite, ali se x = x moe postii stav ajui x = −x . Ovo je dobar izbor, jer je svaki paran stepen x jednak odgovarajuem parnom stepenu x ; neparni stepeni razlikuju se samo po znaku. Isto se moe uraditi i sa ostalim parovima vrsta. Nasluuje se u kom pravcu treba traiti n specijalnih vrsta, za koje bi se gori proizvod svodio na samo n/2 proizvoda vrsta matrice sa kolonom koeficijenata. Rezultat bi bio polov ee veliqine ulaza, a time i vrlo efikasan algoritam. Pokuxajmo da postavimo ovaj problem kao dva odvojena problema dvostruko mae veliqine. Podela polaznog problema na dva potproblema veliqine m = n/2 moe se opisati sledeim izrazom 0
r
s
1
n−1
2 r
s
2 s
r
r
s
(8.5)
1 1 . . . 1 1 1 . . . 1
x0 x1 ...
x20 x21 ...
xm−1 −x0 −x1 ... −xm−1
x2m−1 (−x0 )2 (−x1 )2 ... (−xm−1 )2
xn−1 0 P (x0 ) xn−1 1 P (x1 ) a0 ... ... n−1 a1 xm−1 P (x ) m−1 . ... = (−x0 )n−1 P (−x ) 0 (−x1 )n−1 an−1 . . . ... P (−xm−1 ) (−xm−1 )n−1
... ... ... ... ... ... ... ...
Polazna n × n matrica pode ena je na dve vrlo sliqne podmatrice dimenzija n/2 × n. Za svako j = 0, 1, . . . , n/2 − 1, vai x = −x . Zgodno je dakle napisati izraze za P (x ) i P (−x ), odnosno uopxte P (x), sa razdvojenim qlanovima parnog i neparnog stepena: n/2+j
j
j
n/2−1
P (x) =
X j=0
n/2−1 2j
a2j x
+
X j=0
a2j+1 x2j+1 .
j
216
8. ALGEBARSKI ALGORITMI
Ako sa P (x) = P a x , odnosno P (x) = P a x oznaqimo polinome stepena n/2 − 1 sa koeficijentima polinoma P parnog, odnosno neparnog indeksa, dolazimo do jednakosti (8.6) P (x) = P (x ) + xP (x ). Zamenom x sa −x dobijamo P (−x) = P (x ) + (−x)P (x ). Izraqunavae P (x ), j = 0, 1, . . . , n − 1 svodi se na raqunae P (x ) i P (−x ) za j = 0, 1, . . . , n/2 − 1, odnosno na izraqunavae samo n/2 vrednosti P (x ), n/2 vrednosti P (x ), i dopunskih n/2 sabiraa, n/2 oduzimaa i n mnoea. Dakle, imamo dva potproblema veliqine n/2 i O(n) dopunskih operacija. Moe li se nastaviti rekurzivno na isti naqin? Ako bi nam to poxlo za rukom, doxli bismo do poznate diferencne jednaqine T (n) = 2T (n/2) + O(n), qije je rexee T (n) = O(n log n). Problem izraqunavaa P (x) (polinoma stepena n − 1) u n taqaka sveli smo na izraqunavae P (x ) i P (x ) (dva polinoma stepena n/2 − 1) u n/2 taqaka. To je regularna redukcija, izuzev jednog deta a: vrednosti x u P (x) mogu se proizvo no birati, ali vrednosti x u izrazu (na primer) P (x ) mogu biti samo pozitivne. Poxto smo do redukcije doxli korixeem negativnih brojeva, ovo predstav a problem. Izdvojimo iz (8.5) matricu koja odgovara izraqunavau vrednosti P (x ): n/2−1 j=0
0
j
2j
n/2−1 j=0
1
2
0
0
1
2j+1
j
2
2
2
1
j
0
2 j
j
j
1
0
2
2 j
2
1
2
0
2
0
1 1 . . . 1
x20 x21 ...
x40 x41 ...
x2n/2−1
x4n/2−1
2
. . . xn−2 P0 (x20 ) a0 0 a2 P0 (x21 ) . . . xn−2 1 . = ... ... ... ... 2 P (x ) . . . xn−2 a 0 n−2 n/2−1 n/2−1
Da bismo jox jednom izveli redukciju na isti naqin, morali bismo da stavimo npr. x = −(x ) . Poxto su kvadrati realnih brojeva uvek pozitivni, ovo je nemogue, bar ako se ograniqimo na realne brojeve. Potexkoa se prevazilazi prelaskom na kompleksne brojeve. Problem se moe opet podeliti na dva dela stav ajui x = ix , za j = 0, 1, . . . , n/4 − 1 (i je ovde koren iz −1, kompleksan broj). Ovo razdvajae zadovo ava iste uslove kao i prethodno. Prema tome, problem veliqine n/2 moe se rexiti svoeem na dva problema veliqine n/4, izvodei O(n) dopunskih operacija. Za sledee razdvajae potreban nam je broj z takav da je z = 1 i z 6= 1 za 0 < j < 8, odnosno primitivni osmi koren iz jedinice; tada je z = −1 i z = i. Opxtije, potreban nam je primitivni n-ti koren iz jedinice. Oznaqimo ga sa ω (zbog jednostavnosti se n ne spomie eksplicitno; u okviru ovog ode ka radi se uvek o jednom istom n). Broj ω zadovo ava sledee uslove: (8.7) ω = 1, ω 6= 1 za 0 < j < n. 2 n/4
0
2
j+n/4
j
8
j
4
n
j
2
8.6. BRZA FURIJEOVA TRANSFORMACIJA
217
Za n taqaka x , x , ..., x biramo brojeve 1, ω, ω , . . . , ω . Prema tome, izraqunava se sledei proizvod: 0
1 1 1 . . . 1
(8.8)
1
1 ω ω2 ... ω n−1
2
n−1
1 ω2 ω 2·2 ...
... ... ... ... ...
ω (n−1)·2
n−1
a0 P (1) ω a1 P (ω) ω 2·(n−1) ... = ... . ... an−1 P (ω n−1 ) (n−1)·(n−1) 1
n−1
ω
Ovaj proizvod se zove Furijeova transformacija vektora (a , a , . . . , a ). Zapazimo najpre da je ispuen uslov 0
xn/2+j = ω n/2+j = ω n/2 ω j = −xj ,
1
j = 0, 1, . . . , n/2 − 1.
n−1
Prema tome, prva redukcija problema veliqine n na dva maa je i da e ispravna. Da e, dva potproblema proizaxla iz ove redukcije imaju po n/2 taqaka 1, ω , ω , . . . , ω , xto je upravo problem veliqine n/2, u kome umesto ω figurixe ω | primitivni n/2-ti koren iz jedinice. Da je ω primitivni n/2-ti koren iz jedinice neposredno sledi iz uslova (8.7). Prema tome, da e se moe nastaviti rekurzivno. Sloenost algoritma zadovo ava diferencnu jednaqinu T (n) = 2T (n/2) + O(n), qije je rexee O(n log n). Algoritam omoguuje efikasno izraqunavae Furijeove transformacije vektora koeficijenata polinoma, pa je dobio ime brza Furijeova transformacija, odnosno FFT. Algoritam je prikazan na slici 4. Algoritam Ulaz: (prirodni broj), (niz elemenata tipa koji zavisi od primene) i (primitivni -ti koren iz jedinice). Izlaz: (niz izlaznih elemenata, sa indeksima od do ). 2
4
n−2
2
2
FFT(n, a0 , a1 , . . . , an−1 , ω, var V );
n
a0 , a1 , . . . , an−1
ω
n
V
pretpostav a se da je n stepen dvojke}
0
n−1
{
begin
if n = 1 then V [0] := a0 ; else F F T (n/2, a0 , a2 , . . . , an−2 , ω 2 , U ); F F T (n/2, a1 , a3 , . . . , an−1 , ω 2 , W );
prema (8.6) za x = ω }
for j := 0 to n/2 − 1 do { j
j
V [j] := U [j] + ω W [j]; V [j + n/2] := U [j] − ω j W [j]; end
Ris. 4. Algoritam brze Furijeove transformacije, FFT.
218
8. ALGEBARSKI ALGORITMI
Primer 8.2. Demonstriraemo izraqunavae FFT na primeru polinoma sa koeficijentima (0, 1, 2, 3, 4, 5, 6, 7). Da bismo izbegli zabunu, potprobleme emo oznaqavati sa P (x , x , . . . , x ), gde j , j , . . . , j oznaqavaju koeficijente polinoma, a x , x , . . . , x taqke u kojima se izraqunavaju vrednosti polinoma. Zadatak je dakle rexiti problem P (1, ω, ω , . . . , ω ), i to na osnovu (8.6). Prvi korak je svoee P (1, ω, ω , . . . , ω ) na P (1, ω , ω , ω ) i P (1, ω , ω , ω ). Nastav amo rekurzivno i svodimo P (1, ω , ω , ω ) na P (1, ω ) i P (1, ω ). P (1, ω ) se zatim svodi na P (1) = 0, i P (1) = 4. Kombinovaem ovih rezultata dobijamo j0 ,j1 ,...,jk 0
0
1
1
k
0
1
k
k
2
0,1,2,3,4,5,6,7
1,3,5,7 0,4
2
4
4
0,1,2,3,4,5,6,7
6
4
2,6
P0,4 (1)
2
7
0,2,4,6
0,2,4,6
4
0,4
7
0
2
4
6
2
4
6
4
= P0 (1) + 1 · P4 (1) = 0 + 1 · 4 = 4,
4
P0,4 (ω ) = P0 (ω 8 ) + ω 4 P4 (ω 8 ) = 0 + ω 4 · 4.
Poxto je ω = −1, dobijamo P (ω ) = −4, odnosno posle objediavaa P (1, ω ) = (4, −4). Na isti naqin dobijamo P (1, ω ) = (8, −4). Sada kombinovaem ova dva vektora dobijamo P (1, ω , ω , ω ): 4
0,4
0,4
4
4
4
2,6
2
0,2,4,6
4
6
P0,2,4,6 (1) = P0,4 (1) + 1 · P2,6 (1) = 4 + 8 = 12, P0,2,4,6 (ω 2 ) = P0,4 (ω 4 ) + ω 2 P2,6 (ω 4 ) = −4 + ω 2 (−4), P0,2,4,6 (ω 4 ) = P0,4 (ω 8 ) + ω 4 P2,6 (ω 8 ) = P0,4 (1) − 1P2,6 (1) = 4 − 8 = −4, P0,2,4,6 (ω 6 ) = P0,4 (ω 12 ) + ω 6 P2,6 (ω 12 ) = P0,4 (ω 4 ) − ω 2 P2,6 (ω 4 ) = −4 − ω 2 (−4),
odnosno P (1, ω , ω , ω ) = (12, −4(1 + ω ), −4, −4(1 − ω )). Na sliqan naqin dobija se 0,2,4,6
2
4
6
2
2
P1,3,5,7 (1, ω 2 , ω 4 , ω 6 ) = (16, −4(1 + ω 2 ), −4, −4(1 − ω 2 )).
Preostaje jox izraqunavae 8 vrednosti P (1, ω, ω , . . . , ω ). Na primer, P (1) = 12 + 1 · 16 = 28, i sliqno P (ω ) = 12 − 1 · 16 = −4; P (ω) = (−4(1+ω ))+ω·(−4(1+ω )), i sliqno P (ω ) = (−4(1 + ω )) − ω · (−4(1 + ω )), itd. Rezultat je 2
0,1,2,3,4,5,6,7
0,1,2,3,4,5,6,7
0,1,2,3,4,5,6,7 2
2
2
7
4
0,1,2,3,4,5,6,7
0,1,2,3,4,5,6,7
2
5
P0,1,2,3,4,5,6,7 (1, ω, ω 2 , . . . , ω 7 ) = 4(7, −1 − ω − ω 2 − ω 3 , −1 − ω 2 , −1 + ω 2 − ω 3 + ω 5 , −1, −1 + ω − ω 2 + ω 3 , −1 + ω 2 , −1 + ω 2 + ω 3 − ω 5 ).
8.6.2. Inverzna Furijeova transformacija. Brza Furijeova transformacija rexava samo pola problema: vrednosti zadatih polinoma p(x) i q(x) mogu se efikasno izraqunati u taqkama 1, ω, . . . , ω , izmnoiti parovi dobijenih vrednosti, i tako nai vrednosti polinoma p(x)q(x) u navedenim taqkama. Ostaje problem interpolacije, odnosno odreivaa koeficijenata proizvoda polinoma na osnovu vrednosti u taqkama. Na sreu, ispostav a se da je problem interpolacije vrlo sliqan problemu izraqunavaa vrednosti, i da ga rexava praktiqno isti algoritam. n−1
8.7. REZIME
219
Vratimo se matriqnoj notaciji. Neka A transponovana matrica matrice A. Oznaqimo vektor koeficijenata polinoma sa a = (a , a , . . . , a ) , a vektor vrednosti polinoma sa v = (P (1), P (ω), . . . , P (ω )) . Neka je V (ω) matrica iz jednakosti (8.8). Ako su zadati su koeficijenti polinoma a, egove vrednosti v u n taqaka 1, ω, . . . , ω dobijaju se prema (8.8) izraqunavaem proizvoda v = V (ω)a. S druge strane, ako su zadate vrednosti polinoma v = (P (1), P (ω), . . . , P (ω )) = (v , v , . . . , v ) , a potrebno je izraqunati egove koeficijente, jednakost (8.8), odnosno V (ω)a = v je sistem linearnih jednaqina po a. Rexavae sistema jednaqina ima u opxtem sluqaju dosta veliku vremensku sloenost O(n ), ali se ovde radi o jednom specijalnom sistemu jednaqina. Lako se proverava da je T
0 1 n−1 T
n−1
T
n−1
n−1
T
0
1
n−1
T
3
V (ω)V (ω −1 ) = nI,
gde je sa I oznaqena jediniqna matrica reda n. Zaista, ako je r 6= s, onda je proizvod (r + 1)-e vrste matrice V (ω) i (s + 1)-e kolone matrice V (ω ) jednak −1
n−1 X
ω rk ω −sk =
k=0
n−1 X
ω k(r−s) =
k=0
1 − ω n(r−s) = 0. 1 − ω r−s
Ako je pak r = s, onda je taj proizvod P ω ω = n. Time je dokazana sledea teorema. Teorema 8.1. Inverzna matrica matrice V (ω) Furijeove transformacije je 1 n−1 k=0
V (ω)−1 =
Rexavae sistema jednaqina proizvoda
rk
−rk
V (ω −1 ). n v = V (ω)a
a=
svodi se dakle na izraqunavae
1 V (ω −1 )v. n
Posao se da e pojednostav uje zahva ujui sledeoj teoremi. Teorema 8.2. Ako je ω onda je ω takoe primitivni n-ti koren iz jedinice. Prema tome, proizvod V (ω )v moe se izraqunati primenom brze Furijeove transformacije, zameujui ω sa ω . Ova transformacija zove se inverzna Furijeova transformacija. Sloenost. Uzimajui sve u obzir, proizvod dva polinoma moe se izraqunati izvodei O(n log n) operacija (sa kompleksnim brojevima). −1
1 n
−1
−1
8.7. Rezime
Algoritmi prikazani u ovom poglav u samo su mali izbor iz skupa poznatih numeriqkih algoritama. Jox jednom smo se uverili da direktni algoritmi nisu uvek i najbo i. Xtrasenov algoritam je jedan od najistaknutijih
220
8. ALGEBARSKI ALGORITMI
primera potpuno neintuitivnog algoritma za rexavae na prvi pogled jednostavnog problema. Videli smo jox nekoliko primera korixea indukcije, i specijalno, algoritama zasnovanih na dekompoziciji. Druga tehnika, uobiqajena naroqito kod problema sa matricama, je svoee jednog problema na drugi. Taj metod bie ilustrovan novim primerima u poglav u 10.
Zadaci
8.1. Okarakterisati vezu izmeu algoritma za izraqunavae n ponov enim kvadriraem (slika 2) i binarne predstave broja k. 8.2. Algoritam Stepen kvadriranjem (slika 2) za izraqunavae n ne minimizira uvek broj mnoea. Navesti primer izraqunavaa n (k > 10) sa maim brojem mnoea nego u ovom algoritmu. 8.3. Pretpostav amo da se pozitivni racionalni brojevi x predstav aju parovima prirodnih brojeva (a, b) takvim da je x = a/b. Konstruisati algoritam koji za dati broj (a, b) odreuje minimalnu reprezentaciju (a , b ) broja x = a/b. 8.4. Dokazati da direktni algoritam za mnoee polinoma zasnovan na dekompoziciji, koji izraqunava sva qetiri proizvoda maih polinoma, izvrxava identiqne operacije kao i obiqan algoritam mnoea (8.2). Pretpostaviti da je n stepen dvojke. 8.5. Metod dekompozicije moe se iskoristiti za efikasnije mnoee binarnih brojeva. Konstruisati odgovarajui algoritam i razmotriti razlike izmeu ega i algoritma za mnoee polinoma. Uopxtiti algoritam na mnoee brojeva u sistemu sa osnovom b > 1. 8.6. Kako se mogu pomnoiti dva kompleksna broja (a + bi)(c + di) pomou samo tri realna mnoea? 8.7. Pretpostavimo da se izraqunavae proizvoda dve kvadratne matrice reda qetiri moe svesti na k proizvoda elemenata. Kolika bi bila asimptotska sloenost opxteg algoritma za izraqunavae proizvoda dve kvadratne matrice reda n zasnovanog na ovom svodjeu? Za koju najveu vrednost k bi ovakav algoritam bio jox uvek bri od Xtrasenovog algoritma? 8.8. Posmatrajmo dva algoritma za izraqunavae stepena n iz ode ka 8.2, ponov eno mnoee i ponov eno kvadrirae. Neka je n prirodan broj sa d cifara. Pretpostavimo da se mnoee celih brojeva vrxi obiqnim algoritmom, koji se sastoji od d d koraka ako se mnoe brojevi sa d i d cifara. Koliko traje stepenovae n pomou spomenuta dva algoritma? (Moe se pretpostaviti da je k stepen dvojke, i da je proizvod dva broja sa d i d cifara broj sa d + d cifara.) 8.9. Konstruisati algoritam za odreivae NZD k zadatih prirodnih brojeva. 8.10. Konstruisati algoritam za odreivae najmaeg zajedniqkog sadraoca (NZS) datih prirodnih brojeva a i b (odnosno najmaeg prirodnog broja de ivog i sa a i sa b). 8.11. Konstruisati algoritam za odreivae najveeg zajedniqkog sadraoca (NZS) datih k prirodnih brojeva. 8.12. Fibonaqijevi brojevi su definisani sledeom diferencnom jednaqinom: k
k
k
0
0
k
1
2
k
1 2
1
2
1
2
F (n) = F (n − 1) + F (n − 2), (n > 2),
F (1) = F (2) = 1.
(a) Dokazati da se svaki prirodan broj n > 2 moe predstaviti u obliku zbira najvixe razliqitih log n Fibonaqijevih brojeva. (b) Konstruisati algoritam za odreivae takve predstave datog broja n. 2
ZADACI
221
8.13. Kae se da polinom deli polinom , ako postoji polinom takav da je . Polinom je najvei zajedniqki delilac (NZD) polinoma i ako je to polinom b = b(x)
a
q
najveeg stepena, sa najstarijim koeficijentom 1, koji deli a i b. (a) Dokazati da je NZD dva polinoma definisan jednoznaqno. (b) Pokazati da se pomou Euklidovog algoritma moe odrediti NZD dva data polinoma. 8.14. Hamiltonovi kvaternioni su sume oblika a + bi + cj + dk, gde su a, b, c i d realni brojevi, a i, j i k su specijalni simboli. Kvaternioni se sabiraju i mnoe po obiqnim pravilima, pri qemu se koriste jednakosti: i = j = k = −1, ij = −ji = k, jk = −kj = i, ki = −ik = j (simboli i, j i k komutiraju sa realnim brojevima). Koliko je potrebno izvrxiti mnoea realnih brojeva da bi se izraqunao proizvod dva kvaterniona na obiqan naqin? Pokazati kako se moe broj realnih mnoea smaiti na 10. 8.15. Pokazati kako se kvadrat kvadratne matrice reda dva moe izraqunati pomou pet mnoea. 8.16. Permutaciona matrica je kvadratna matrica reda n u qijoj se svakoj vrsti i koloni nalazi taqno jedan elemenat razliqit od nule, jednak jedinici. Permutaciona matrica moe se predstaviti vektorom P , tako da bude P [i] = j, ako i-ta vrsta sadri jedinicu u j-toj koloni, i = 1, 2, . . . , n. (a) Dokazati da je proizvod dve permutacione matrice takoe permutaciona matrica. (b) Konstruisati algoritam sloenosti O(n) za mnoee dve permutacione matrice predstav ene vektorima. 8.17. Neka je B = {0, 1}. Svaka Bulova funkcija f od neksluzivna promen ivih moe se predstaviti polinomom f = P a x , pri qemu je sabirae disjunkcija (sabirae po modulu dva), mnoee je konjunkcija, x = Q x , a x oznaqava x ako je σ = 0, odnosno negaciju x¯ ako je σ = 1. Tako na primer, x ∨x = 1·x x +1·x x¯ +1· x¯ x +0· x¯ x¯ , tj. za ovu funkciju je a = a = a = 1, i a = 0. Konstruisati algoritam vremenske sloenosti O(n2 ) za izraqunavae koeficijenata a , σ ∈ B , Bulove funkcije f od n promen ivih, zadate tablicom svojih vrednosti f (σ), σ ∈ B . 8.18. Za dve Bulove funkcije f i g od n promen ivih rastojae d(f, g) moe se definisati kao broj argumenata x = (x x . . . x ) ∈ {0, 1} na kojima im se vrednosti razlikuju. Funkcija f jePlinearna Bulova funkcija od n promen ivih ako se moe izraziti u obliku a x , gde je sabirae eksluzivna disjunkcija (sabirae po modulu dva), f (x) = a + a mnoee je konjunkcija. Konstruisati algoritam vremenske sloenosti O(n2 ) koji za datu Bulovu funkciju f odreuje bar jednu oj najbliu linearnu funkciju. 8.19. Neka su elementi kvadratnih matrica A i B reda n realizacije nezavisnih sluqajnih promen ivih koje sa jednakim verovatnoama uzimaju vrednosti iz skupa {0, 1}. Ako ∧, ∨ oznaqavaju konjunkciju, odnosno disjunkciju, pokazati da se "proizvod" C = AB sa elementima c = ∨ (a ∧ b ), 1 ≤ i, j ≤ n, moe izraqunati algoritmom oqekivane (srede) vremenske sloenosti O(n ). 8.20. Neka su A i B kvadratne matrice reda n qije su vrste otvoreni Grejovi kodovi (elementi su im iz skupa {0, 1}, a svake dve uzastopne vrste razlikuju se na taqno jednom mestu). Konstruisati algoritam sloenosti O(n ) za mnoee ovakvih matrica. 8.21. Dato je n realnih matrica M , M , . . . , M . Matrica M jeidimenzija a ×a , 1 ≤ i ≤ n. Pretpostavimo da se proizvod matrica dimenzija a × a a ×a izraqunava obiqnim algoritmom sloenosti O(a a a ). U proizvodu M M . . . M treba rasporediti zagrade (i time izabrati redosled mnoea) tako da bude minimalan ukupan broj operacija. Konstruisati algoritam za nalaee optimalnog redosleda izraqunavaa proizvoda. a = bq
d
a
2
σ∈B n
i
σ
n
n i=1
ij
n i=1 2
σ
1
01
10
σi i
σi i 1 2
11
σ
i
1 2
i
1 2
n
n
i i
n k=1
1 2
n
n
1 2
0
2
σ
i
00
2
b
n
ik
kj
2
2
1
2
n
i
i
i i+1 i+2
i
i+1
i+1
1
2
i+2
n
i+1
Glava 9
Primene u kriptografiji 9.1. Uvod
Kriptografija je oblast u kojoj algoritmi imaju znaqajnu primenu. Znaqaj kriptografije moe se oceniti pored ostalog i na osnovu qienice da su prvi raqunari naprav eni u toku drugog svetskog rata, i korixeni za razbijae nemaqkih xifri, xto je verovatno presudno uticalo na ishod rata. Svrha ovog poglav a je da qitalac dobije uvid u neke osnovne pojmove i probleme ove oblasti, danas izuzetno vane. Za dub e upoznavae sa kriptografijom dobro moe da poslui kiga [6] Uvexemo najpre neophodne pojmove. Pretpostavimo da osoba A (poxi alac ) eli da poxa e poruku osobi B (primaocu). Poxi alac eli da bude siguran da niko sem primaoca ne moe da proqita tu poruku. Za poruku kaemo da je otvoreni tekst. Proces maskiraa poruke, koje za svrhu ima sakrivae enog sadraja zove se xifrovae. Rezultat xifrovaa otvorenog teksta je xifrat. Dexifrovaem xifrata dobija se originalna poruka, videti sliku 1. Otvoreni tekst-
Xifrovae
Xifrat -
Dexifrovae
Polazna poruka -
Ris. 1. Xifrovae i dexifrovae.
Vextina ili nauka koja na ovaj naqin obezbeuje sigurnost poruka zove se kriptografija . Kriptoanaliza je vextina ili nauka razbijaa xifrata, odnosno qitaa xifrovanih poruka. Oblast matematike koja obuhvata i kriptografiju i kriptoanalizu zove se kriptologija. U danaxe vreme skoro svi kriptolozi su matematiqari | oni to moraju da budu.
Otvoreni tekst oznaqavaemo sa P . To moe da bude niz bita, tekstualni fajl, digitalizovani govorni signal ili npr. digitalizovana slika. Kad se radi o raqunaru, P su prosto binarni podaci. Otvoreni tekst se ili xa e ili smexta u memoriju. U oba sluqaja poruka P se prethodno xifruje. Xifrat emo oznaqavati sa C . To su takoe binarni podaci, ponekad iste veliqine kao i P , ponekad dui (ili krai, xto se postie kombinovaem kompresije i xifrovaa). Funkcija xifrovaa E deluje na P i tako se dobija C : C = E(P ). Suprotan proces je dejstvo funkcije dexifrovaa D na C 223
224
9. PRIMENE U KRIPTOGRAFIJI
da bi se dobilo P , odnosno P = D(C). Xifrovae i dexifrovae su dakle funkcije koje zadovo avaju uslov D(E(P )) = P . Kriptografski algoritam ili xifra je matematiqka funkcija koja se koristi za xifrovae, odnosno dexifrovae. Otvoreni tekst se xifruje primenom algoritma za xifrovae, a xifrat se dexifruje algoritmom za dexifrovae. Da bi se obezbedila sigurnost poruka, svi savremeni algoritmi za xifrovae koriste k uq k | parametar koji utiqe na xifrovae, odnosno dexifrovae: C = E (P ), odnosno P = D (C) (slika 2). Razume se da za svaki k uq k vai D (E (P )) = P . K uq uzima jednu od vixe moguih vrednosti iz prostora k uqeva. Iz razum ivih razloga poe no je da prostor k uqeva ima xto vei broj elemenata. Postoje algoritmi sa posebnim k uqem za xifrovae k , odnosno za dexifrovae k , slika 3. U tom sluqaju je C = E (P ), P = D (C), i D (E (P )) = P . k
k
k
k
1
k1
Otvoreni tekst-
K uq
k2
2
k2
Xifrat -
?
Xifrovae
k1
K uq ?
Dexifrovae
Polazna poruka -
Ris. 2. Xifrovae i dexifrovae jednim k uqem. K uq za xifrovae K uq za dexifrovae ? ? Otvoreni tekstPolazna poruka Xifrat Xifrovae Dexifrovae
Ris. 3. Xifrovae i dexifrovae sa dva k uqa.
Algoritmi sa k uqem mogu se podeliti na simetriqne i asimetriqne. Simetriqni su algoritmi kod kojih se k uq za xifrovae moe izraqunati polazei od k uqa za dexifrovae, i obrnuto. U mnogim simetriqnim sistemima su k uqevi za xifrovae i dexifrovae identiqni. Za upotrebu takvih algoritama, koji se takoe zovu i algoritmi sa tajnim k uqem, neophodno je da se poxi alac i primalac dogovore koji e k uq koristiti pre nego xto poqnu da razmeuju xifrovane poruke. Sigurnost simetriqnog algoritma zasniva se na k uqu; neko ko sazna k uq (a zna i algoritam xifrovaa/dexifrovaa) moe da xifruje i dexifruje poruke u tom sistemu. Xifrovae, odnosno dexifrovae simetriqnim algoritmom mogu se oznaqiti sa E (P ) = C , odnosno D (C) = P . Simetriqni algoritmi mogu se uslovno podeliti u dve kategorije. Neki od ih obrauju otvoreni tekst bit po bit; oni se zovu lanqane xifre. Drugi rade na otvorenom tekstu pode enom na grupe bita. Te grupe bita zovu se blokovi, a algoritmi su blokovske xifre. Tipiqna veliqina bloka je k
k
9.1. UVOD
225
bita | dovo no velika da otea analizu, a dovo no mala da bude praktiqna. Kod oba tipa algoritama za xifrovae i dexifrovae koristi se isti k uq. Pre pojave raqunara algoritmi su xifrovali otvoreni tekst znak po znak. Takav algoritam moe se shvatiti kao lanqani (koji transformixe niz znakova) ili blokovski, sa blokom veliqine 8 bita. Asimetriqni, odnosno algoritmi sa javnim k uqem su drugaqiji. Zamix eni su tako da k uq za xifrovae bude razliqit od k uqa za dexifrovae. Pored toga, k uq za dexifrovae ne moe se (u bilo kom razumnom vremenskom intervalu) izraqunati polazei od k uqa za xifrovae. Naziv sistemi sa javnim k uqem potiqe od qienice da se k uq za xifrovae moe dostaviti svima: osoba, koju primalac nikad nije sreo, moe da xifruje poruku k uqem za xifrovae, ali samo onaj ko ima odgovarajui k uq za dexifrovae moe da dexifruje tu poruku. U takvim sistemima k uq za xifrovae zove se javni k uq, a k uq za dexifrovae | tajni k uq. Xifrovae javnim k uqem oznaqava se sa C = E (P ). Iako su javni i tajni k uq razliqiti, dexifrovae odgovarajuim tajnim k uqem oznaqava se sa C = D (P ). Ponekad se poruke xifruju tajnim, a dexifruju javnim k uqem; ovo se koristi za takozvani digitalni potpis, (zamenu za obiqan potpis) koji se moe prik uqiti xifratu poruke. Ako se sa CRC(P ) oznaqi "kontrolna suma" poruke (blok fiksirane duine od npr. 32, 64 ili vixe bita za kontrolu ispravnosti poruke), a sa E , D , odnosno E , D , xifrovae i dexifrovae (javni i tajni k uq) uqesnika A, odnosno B, onda se kao potpis poruke E (P ) koju A xa e B moe iskoristiti xifrat D (CRC(P )). Primalac B dexifruje E (P ) svojim tajnim k uqem D , izraqunava kontrolnu sumu CRC(P ) i verodostojnost potpisa proverava tako xto izraqunatu kontrolnu sumu uporedi sa rezultatom dexifrovaa potpisa D (CRC(P )) (javnim k uqem E ). Ako se ta dva rezultata slau, onda je primalac uveren da je poruku mogao dobiti samo od nekoga ko zna tajni k uq D , dakle od uqesnika A. Osnovni ci kriptografije je oquvae tajnosti poruke, odnosno odbrana tajnosti enog sadraja od nekoga ko "prisluxkuje" kanal veze (u da em tekstu napadaq. Kriptoanaliza je nauka ili vextina odreivaa otvorenog teksta poruke bez poznavaa k uqa. Kriptoanaliza takoe moe da pronae nedostatke xifarskog sistema koji bi doveli do takvog rezultata. Pokuxaj kriptoanalize zove se napad. Uspexan napad (dekriptirae) podrazumeva da napadaq deta no poznaje algoritam za xifrovae. U stvarnom ivotu to nije uvek sluqaj, ali je to uobiqajena pretpostavka pri kriptoanalizi. Ta pretpostavka je razumna: ako sigurnost sistema zavisi od tajnosti algoritma, onda to nije velika sigurnost. Postoji nekoliko tipova kriptoanalitiqkih napada, prema koliqini informacija koje stoje na raspolagau napadaqu. U svim varijantama pretpostav a se da napadaq potpuno poznaje algoritam za xifrovae. • Napad na osnovu xifrata. Kriptoanalitiqar ima xifrate vixe poruka, dobijene istim algoritmom za xifrovae. Posao kriptoanalitiqara je da rekonstruixe tekstove xto vixe poruka, ili jox 64
k
k
a
a
b
b
b
a
b
b
a
a
a
226
9. PRIMENE U KRIPTOGRAFIJI
bo e, da rekonstruixe k uq korixen za xifrovae poruka, da bi se mogle dexifrovati druge poruke xifrovane istim k uqem. Dakle, dato je C = E (P ), C = E (P ), ..., C = E (P ), a treba odrediti P , P , ..., P ; k ; ili algoritam za odreivae P na osnovu C = E (P ). • Napad na osnovu parova (otvoreni tekst, xifrat). Kriptoanalitiqar zna ne samo xifrate vixe poruka, nego i odgovarajue otvorene tekstove. Zadatak je rekonstruisati k uq korixen za xifrovanje poruka, ili pronai postupak za otvarae narednih poruka xifrovanih istim k uqem. Dakle, dato je P , C = E (P ), P , C = E (P ), ..., P , C = E (P ), a treba odrediti k ili algoritam za odreivae P na osnovu C = E (P ). • Napad na osnovu izabranog otvorenog teksta. Kriptoanalitiqar zna parove (otvoreni tekst, xifrat) za vixe poruka, pri qemu on sˆa m moe da bira otvorene tekstove. Ovo je moniji napad od prethodnog, jer kriptoanalitiqar moe da izabere takve otvorene tekstove sa xifratom, koji daju mnogo vixe informacije o k uqu. Zadatak je rekonstruisati k uq korixen za xifrovae poruka, ili pronai postupak za otvarae novih poruka xifrovanih istim k uqem. Dakle, dato je P , C = E (P ), P , C = E (P ), ..., P , C = E (P ), pri qemu kriptoanalitiqar bira P , P , ..., P , a treba odrediti k ili algoritam za odreivae P na osnovu C = E (P ). Drugi i trei tip napada su qexi nego xto to izgleda na prvi pogled: moe se ukrasti poruka koja je ve xifrovana, ili se moe potplatiti neko da xifruje izabranu poruku. Qak ni podmiivae ne mora da bude neophodno: ako predate provokativnu poruku ambasadoru strane zem e, moete sa sigurnoxu oqekivati da e je on xifrovanu poslati na razmatrae u svoju zem u. Razliqiti xifarski sistemi obezbeuju razliqite nivoe sigurnosti, u zavisnosti od toga koliko ih je texko razbiti. Teorijski je mogue razbiti (dekriptirati) svaki algoritam sem jednog (sluqajna xifra, ode ak 9.3), pod pretpostavkom da je na raspolagau dovo no vremena i raqunarskih resursa. Ako je cena dekriptiraa algoritma vea od vrednosti xifrovanih podataka, onda je xifrovae verovatno bezbedno. Raqunari postaju sve bri i jeftiniji, a proseqna vrednost podataka postaje sve vea. Vano je obezbediti da se te dve linije ne preseku. Neki algoritmi se mogu razbiti samo ako se utroxi vreme due od starosti svemira, i uz pomo raqunara veeg od sve materije u svemiru. Takvi algoritmi se teorijski mogu razbiti, ali ne i praktiqno, i mogu se smatrati sigurnim . Algoritam je bezuslovno siguran ako, bez obzira na koliqinu xifrata koji napadaq ima na raspolagau, ta koliqina nije dovo na za rekonstrukciju otvorenog teksta. Jedino se sluqajna xifra, (ode ak 9.3) ne moe razbiti, qak ni ako su na raspolagau neograniqeni resursi. Kriptografija se vixe 1
1
2
k
n+1
k
2
k
1
2
k
2
n
k
n+1
1
n
n+1
n
k
n
k
n
n+1
1
k
1
n+1
k
k
n+1
2
1
n+1
k
1
2
2
k
1
n+1
n+1
2
n
1
n
n
n
2
2
n
9.2. KLASIQNA KRIPTOGRAFIJA
227
bavi sistemima za koje je razbijae praktiqno neizvod ivo sa raspoloivim (sadaxim ili buduim) resursima; to su takozvani praktiqno sigurni xifarski sistemi. Pri tome se naravno "praktiqno raspoloivi resursi" ne mogu precizno definisati. Mera sigurnosti algoritma za xifrovae je broj operacija koje treba izvrxiti prilikom egovog razbijaa. Ako je, na primer, za neki algoritam taj broj 2 , i na raspolagau je milion procesora koji izvrxavaju po bilion takvih operacija u sekundi, onda je za razbijae algoritma potrebno vixe od 10 godina (treba imati na umu da se starost svemira proceuje na 10 godina). Razumno je takav algoritam smatrati praktiqno sigurnim. Za razliku od broja operacija za razbijae algoritma, koji je konstantan, brzina raqunara sigurno nije konstantna. U toku poslede polovine veka mo raqunara je fantastiqno poveana, i nema razloga pretpostaviti da se ovaj trend nee nastaviti. Mnogi kriptoanalitiqki napadi su savrxeno prilagoeni paralelnim raqunarima. Posao se moe razbiti na milione delova, tako da ih pojedini procesori obrauju potpuno nezavisno (tj. nije potrebna nikakva komunikacija izmeu paralelnih procesora). Rei da je neki algoritam siguran zato xto se ne moe razbiti sadaxom tehnologijom, najqexe je neozbi no. Dobri sistemi naprav eni su tako da budu sigurni i protiv napada raqunarima kakvi e biti prav eni u dalekoj budunosti. 128
16
10
9.2. Klasiqna kriptografija
Pre pojave raqunara kriptografija se bavila sistemima zasnovanim na xifrovau slova (znakova). Kriptografski algoritmi zameivali su slova jedno drugim ili su ih meusobno premextali. Bo i sistemi radili su obe ove stvari, i to vixe puta. Danaxi algoritmi su komplikovaniji, ali je filozofija ostala praktiqno nepromeena. Osnovna promena je u tome da algoritmi xifruju bite umesto slova. To je, meutim, samo promena veliqine alfabeta, sa npr. 26 na dva. Veina dobrih algoritama za xifrovae i da e kombinuje elemente zamene (supstitucije) i transpozicije (premextaa). Xifre zamene su one kod kojih se otvoreni tekst maskira tako xto se slova otvorenog teksta zameuju drugim u xifratu. Primalac primeuje inverzne zamene i tako dobija polazni otvoreni tekst. U klasiqnoj kriptografiji postoji nekoliko osnovnih tipova xifri zamene. • Xifra proste zamene je ona kod koje se slova otvorenog teksta zameuju odgovarajuim slovom (uvek na isti naqin) u xifratu. Kriptogrami u enigmatskim qasopisima spadaju u ovu kategoriju • Homofonska xifra sliqna je xifri proste zamene, izuzev xto se znak otvorenog teksta na nekoliko naqina moe zameniti znakovima xifrata. Na primer, "A" se moe zameniti sa 5, 13, 25 ili 56, "B" se moe zameniti sa 7, 19, 31 ili 42, itd.
228
9. PRIMENE U KRIPTOGRAFIJI
•
Polialfabetska xifra zamene formira se od vixe xifara proste zamene. Moe se, na primer, koristiti pet razliqitih xi-
fara proste zamene; koja od ih e biti korixena zavisi od rednog broja slova u otvorenom tekstu. Quvena Cezarova xifra, kod koje se svako slovo zameuje slovom koje je tri slova udesno do ega (po modulu 26) (A se zameuje sa D, B sa E, ..., W sa Z , ..., X sa A, Y sa B i Z sa C ) je xifra proste zamene. Ako se u imenu HAL raqunara iz filma "Odiseja u svemiru 2001" slova zamene sledeim u abecedi, dobija se IBM, xto verovatno nije sluqajno. Xifre proste zamene se mogu lako razbiti, jer ne meaju skup uqestanosti slova u otvorenom tekstu. Homofonske xifre su bile koriwene ve oko 1401. godine. Mnogo ih je tee razbiti od xifre proste zamene, ali one ipak ne maskiraju potpuno statistiqke osobine otvorenog teksta. Napad sa poznatim otvorenim tekstom je trivijalan. Napad sa poznavaem xifrata je tei, ali se pomou raqunara izvrxava za nekoliko sekundi. Polialfabetske xifre otkrio je Leon Batista 1568. godine. Koristila ih je armija Unije u ameriqkom graanskom ratu. Iako se dosta lako razbijaju (naroqito pomou raqunara), mnogi komercijalni programi za xifrovae koriste ovakve xifre (na primer, xifrovae u okviru tekst procesora WordPerfect ). Polialfabetske xifre zamene imaju vixe jednoslovnih k uqeva, koji se koriste za xifrovae po jednog slova otvorenog teksta. Prvi k uq xifruje prvo slovo otvorenog teksta, drugi k uq xifruje drugo slovo otvorenog teksta, itd. Poxto se iskoriste svi k uqevi, poqie se ponovo ispoqetka. Ako ima ukupno 20 jednoslovnih k uqeva, onda e svako dvadeseto slovo otvorenog teksta biti xifrovano istim k uqem. Ovo je period xifre. U klasiqnoj kriptografiji xifre sa dugim periodom bilo je znatno tee razbiti od onih sa kratkim periodom. Postoje tehnike koje (pomou raqunara) lako razbijaju ovakve xifre sa vrlo dugaqkim periodom. Xifra sa tekstualnim k uqem je ona kod koje se jedan tekst (u xpijunskim filmovima je to qesto biblija) koristi za xifrovae drugog teksta; to je takoe primer polialfabetske xifre. Iako ova xifra ima period duine jednake duini otvorenog teksta, ona se lako moe razbiti. Xifra transpozicije je ona kod koje slova otvorenog teksta ostaju nepromeena, ali im se mea redosled. Na primer, moe se otvoreni tekst prepisati u vrste jednake duine, pa zatim xifrat proqitati po kolonama. Oko 1920. godine pojavile su se prve maxine nameene automatizaciji procesa xifrovaa. Zasnivale su se na konceptu rotora, mehaniqkog diska nameenog za izvoee proizvo ne zamene. Najpoznatija rotorska maxina je Enigma, koju su Nemci znatno pobo xanu, koristili u drugom svetskom ratu. Ma koliko da je bila komplikovana, Enigma je razbijena, xto je bitno uticalo na ishod rata. Razmotriemo sada nekoliko primera savremenih algoritama za xifrovae: sluqajnu xifru, DES i RSA.
9.3. SLUQAJNA XIFRA
229
9.3. Sluqajna xifra
Moda zvuqi neobiqno, ali postoji apsolutno tajni xifarski sistem. To je takozvana xifra sa jednokratnim k uqem , ili sluqajna xifra, koju su 1917. godine patentirali Moborn i Vernam (J. Mauborgne, G. Vernam ). U svom klasiqnom obliku, ova xifra je prosto veliki skup sluqajnih, nezavisnih znakova k uqa, ispisanih na listove papira i spojenih zajedno u svesku. Poxi alac koristi svaki znak k uqa za xifrovae taqno jednog znaka otvorenog teksta. Primalac ima identiqnu svesku, i koristi slova iz e da dexifruje odgovarajue znakove xifrata. Svaki k uq se koristi samo jednom, za samo jednu poruku. Poxi alac xifruje poruku, a zatim unixtava iskorixene listove iz sveske k uqeva | to je uobiqajena mera predostronosti. Primalac postupa isto posle dexifrovaa poruke. Nova poruka | nova strana, i nova slova k uqa. Pod pretpostavkom da napadaq ne moe doi do strana sveske iskorixenih za xifrovae, ovaj sistem je savrxeno siguran. Od zadatog xifrata se dexifrovaem (uz sluqajni izbor odgovarajueg k uqa, sa uniformnom raspodelom verovatnoe) sa jednakom verovatnoom moe dobiti svaki otvoreni tekst iste duine. Na primer, pretpostavimo da su slova alfabeta numerisana na sledei naqin ˇ C ´ D D A B C C E F 1 2 3 4 5 6 7 8 9 ˇ T L M N O P R S S 15 16 17 18 19 20 21 22 23
G H I 10 11 12 U V Z 24 25 26
J K 13 14 ˇ Z 27
Xifrovae znaka otvorenog teksta vrxi se egovim sabiraem sa slovom k uqa (preciznije, sabiraju se ihovi redni brojevi; ako se dobije zbir vei od 27, umauje se za 27; dobijeni brojˇ zameuje se znakom prema goroj tablici). Pretpostavimo da je poruka POCNITENAPAD , a da je odgovarajui ˇCFGGEAG ´ niz k uqa iz sveske TBFRGFARFMZˇCˇ . Tada je xifrat LRJGS . Poxto je svaki niz k uqa jednako verovatan (jer se k uqevi generixu na sluqajan naqin), protivnik nema informaciju kojom bi dexifrovao xifrat. ˇ Niz k uqa moe da bude, na primer, BDIZAMNAKRBB posle qegaˇ bi - UCITENAPAM rezultat dexifrovaa bio SUMNJIVOLICE , ili, na primer, BD sa rezultatom dexifrovaa SVASTIKINBUT . Ideja je, da istaknemo jox jednom, da, poxto je svaki otvoreni tekst jednako verovatan, kriptoanalitiqar nema naqina da ustanovi koji otvoreni tekst je poslat. Sliqno, ako se niz sluqajnih bita k uqa XOR-uje (sabere po modulu dva, bit po bit) sa porukom, dobija se xifrat potpuno sluqajanog izgleda, pa je kriptoanalitiqar bespomoan, bez obzira koliki su mu raqunarski resursi na raspolagau. Problem sa ovim sistemom, i to ozbi an, je da se znakovi k uqa moraju generisati sluqajno. Svi napadi na ovaj sistem ustvari su napadi na metod
230
9. PRIMENE U KRIPTOGRAFIJI
korixen za generisae niza znakova k uqa. Ako se u tu svrhu koristi kriptografski slab algoritam, to moe da izazove nevo e. Ako se koristi pravi izvor sluqajnih brojeva | xto je mnogo tee izvod ivo, nego xto izgleda na prvi pogled | sistem je siguran. Korixee generatora pseudosluqajnih brojeva u opxtem sluqaju ne rexava problem. Postoji mnogo sistema kod kojih se sluqajni brojevi zameuju pseudosluqajnim (generisanim nekim algoritmom), a koji se mogu dekriptirati. Nizovi koje oni generixu samo izgledaju sluqajno, ali pa iva analiza otkriva pravilnosti, koje kriptoanalitiqar moe da iskoristi. Ipak, mogue je generisati i prave sluqajne brojeve, qak i pomou mikroraqunara. Postoji jox jedan problem sa ovakvim sistemom. Duina niza znakova k uqa jednaka je duini poruke. To moe da bude praktiqno rexee za prenos nekoliko kratkih poruka, ali texko moe da funkcionixe sa kanalom za prenos podataka brzinom od milion bita u sekundi. Moe se na CD-ROM smestiti 650 megabajta niza k uqa, i tako praktiqno realizovati sluqajnu xifru za prenos podataka malom brzinom. Tada ostaje problem sigurnog quvaa CD-ROM -a za vreme dok se ne koristi, odnosno egovog unixtavaa u trenutku kad je egov sadraj iskorixen do kraja. Qak i ako se rexi problem prenosa k uqa do primaoca, mora se obezbediti da poxi alac i primalac budu potpuno sinhronizovani. Ako se xifrat pri prijemu "pomeri" za makar jedan bit, dobie se potpuno besmislena poruka. S druge strane, ako se neki biti pogrexno prenesu, samo oni e biti dexifrovani pogrexno (tj. nema tzv. xirea grexaka). Sluqajna xifra se koristi i u danaxe vreme, pre svega za ultrasigurne kanale male brzine. Na primer, govorilo se da je veza "crvenim telefonima" izmeu bivxeg SSSR i SAD (da li je ta veza i danas aktivna?) bila xifrovana sluqajnom xifrom.
9.4. DES
Algoritam DES (skraenica od Data Encryption Standard ) korixen je xirom sveta kao standard vixe od 20 godina. Iako se pojav uju prvi simptomi egovog zastarevaa, on je dosta dobro izdrao vixegodixe pokuxaje kriptoanalize. Do oko 1970. godine nevojna istraivaa iz kriptografije bila su retka, i bilo je malo objav enih radova iz ove oblasti. Postojalo je vixe komercijalnih algoritama i ureaja za xifrovae, xto je naravno onemoguavalo xifrovanu komunikaciju izmeu dva razliqita ureaja. Nekadaxi ameriqki Biro za standarde pokrenuo je program za zaxtitu raqunarskih podataka, u okviru koga je bilo zamix eno projektovae standardnog algoritma za xifrovae, koji bi xtitio podatke prilikom prenosa i smextaa. Algoritam je trebalo da zadovo i propisane kriterijume: da obezbedi visoki nivo zaxtite, da bude kompletno specificiran i razum iv, da egova sigurnost bude zasnovana na tajnosti k uqa (a ne algoritma), da moe da bude
9.4. DES
231
dostupan svim korisnicima, prilagod iv svim primenama, da se moe efikasno realizovati u elektronskim ureajima, da bude efikasan pri korixeu, da se moe verifikovati taqnost egove realizacije i da se moe izvoziti (drugim reqima, da ipak ne bude previxe siguran). Tek na drugi konkurs javio se ozbi niji kandidat, firma IBM sa algoritmom zasnovanim na sliqnom algoritmu, zvanom Lucifer, razvijenim oko 1970. Predloeni algoritam, iako komplikovan, sastoji se samo od jednostavnih logiqkih operacija sa malim grupama bita, pa se dosta efikasno moe realizovati bilo hardverski, bilo programski. Algoritam je usvojen za standard, dostupan svima, iako je prethodno bio patentiran. U usvajau konaqnog rexea za ovaj algoritam uqestvovala je i NSA (skraenica od National Security Agency ; ameriqka vladina ustanova koja se izmeu ostalog bavi i kriptografijom, odnosno kriptoanalizom), pa neki autori sumaju da je ustvari algoritam Lucifer oslab en. Najozbi nija primedba te vrste odnosi se na veliqinu k uqa (128 bita za Lucifer, 56 bita za DES). Bez obzira na sve primedbe, algoritam je usvojen kao ameriqki standard za xifrovae nevojnih vladinih komunikacija 1976. godine. Kasnije su usledili drugi (takoe ameriqki) standardi za naqine korixea ovog algoritma. U leto 1998. godine nesigurnost DES-a je demonstrirana, tako xto je specijalizovani raqunar od 250000 dolara za 56 sati odredio k uq za DES. Problem sa veliqinom k uqa moe se rexiti npr. trostrukim xifrovaem DES-om, sa tri nezavisna k uqa. Trenutno je u toku konkurs za AES (Advanced Encryption Standard ), naslednika DES-a. DES je blokovska xifra, koja xifruje blokove od 64 bita i daje blokove od 64 bita xifrata. Duina k uqa je 56 bita. U osnovi, algoritam je kombinacija dve vrste transformacija, "konfuzije" i "difuzije". Osnovni elemenat DES-a (takozvana runda) je kompozicija dve takve transformacije (smene i permutacije) teksta, odreene k uqem. DES ima 16 rundi: istu kombinaciju transformacija DES primeuje na otvoreni tekst 16 puta, videti sliku 4. Posle poqetne permutacije IP, blok se razdvaja na levu i desnu polovinu, duine po 32 bita. Postoji ukupno 16 identiqnih rundi, u kojima se koristi funkcija oznaqena sa f za kombinovae podataka sa k uqem (u svakoj rundi koristi se drugi deo od 48 bita k uqa). Posle 16-te runde leva i desna polovina se objediuju, pa zavrxna permutacija (inverzna permutacija poqetne permutacije) zak uquje obradu bloka. U svakoj rundi se biti k uqa cikliqki pomeraju odreen broj puta a onda se uvek sa istih pozicija bira 48 od 56 bita k uqa. Desna polovina podataka se proxiruje na 48 bita "proxirujuom permutacijom" i XOR-uje (sabira po modulu 2, bit po bit) sa odgovarajuim bitima k uqa, zatim se zameuje sa 32 bita (qitaem po 4 bita iz 8 tablica) i jox jednom permutuje. Ove qetiri operacije qine funkciju f . Izlaz iz bloka f kombinuje se zatim sa levom polovinom podataka operacijom XOR. Rezultat ovih operacija postaje nova desna polovina. Stara desna polovina postaje nova leva polovina. Ove operacije (slika 5) qine rundu algoritma DES, i ponav aju se 16 puta.
232
9. PRIMENE U KRIPTOGRAFIJI
Otvoreni tekst
®
© ª
? IP
?
?
L0
R0
¶³ f ¾ µ´ k
?
¾ +n
?
t K1
?
L1 = R 0
¶³ f ¾ µ´ k
?
¾ +n
?
R1 = L0 ⊕ f (R0 , K1 )
t K2
?
L2 = R 1
R2 = L1 ⊕ f (R1 , K2 )
...
?
?
?
?
R15 = L14 ⊕ f (R14 , K15 )
L15 = R14
¶³ f ¾ µ´ k
?
¾ +n
t K16
?
?
R16 = L15 ⊕ f (R15 , K16 )
?
®
L16 = R15
© ª
? IP −1
?
? Xifrat
Ris. 4. Algoritam za xifrovae DES. Ako je B rezultat i-te runde, L i R su leva i desna polovina B , K je -bitni k uq za rundu i, a f je funkcija koja obuhvata smene, permutovae i -ovae sa k uqem, onda se i-ta runda opisuje jednakostima (9.1) L = R i
i
i
i
i
48 XOR
i
Ri
i−1
=
Li−1 ⊕ f (Ri−1 , Ki )
Poqetna permutacija koja premexta bite u okviru ulaznog bloka zadata je tabelom 1. Ova, kao i naredne tabele, qita se sleva udesno, odozgo na dole. Na primer, poqetna permutacija 1. bit premexta na poziciju 58, 2. bit na poziciju 50, itd. Jasno je da poqetna i zavrxna permutacija ne utiqu na sigurnost DES-a.
9.4. DES
bitaK uq28 bita Pomerenih Pomerenih ¾ ¾ 28 bita 28 bita 56 bita Permutovani izbor K , 48 bita Proxirujua blok S R ? - +k - tabele permutacija 32 bita 32 bita 48 bita
233
28
i
i−1
-
blok P - +k permutacija 6
Ri
? Li−1
58 62 57 61
Li
50 54 49 53
42 46 41 45
Ris. 5. Jedna runda algoritma DES. 34 38 33 37
26 30 25 29
18 22 17 21
10 14 9 13
2 6 1 5
60 64 59 63
52 56 51 55
44 48 43 47
36 40 35 39
28 32 27 31
20 24 19 23
Tablica 1. Poqetna permutacija DES-a.
12 16 11 15
4 8 3 7
Prvi korak u transformisau 64-bitnog k uqa je izbacivae svakog osmog bita, videti tabelu 2. Izostav eni biti koriste se za proveru ispravnosti unoxea k uqa. Od dobijenog 56-bitnog k uqa za svaku rundu DES-a generixe se novi 48bitni k uq K , 1 ≤ i ≤ 16, na sledei naqin. Najpre se 56-bitni k uq deli na dve 28-bitne polovine. Posle toga se polovine cikliqki pomeraju ulevo za jednu ili dve pozicije, zavisno od rednog broja runde, videti tabelu 3. Posle cikliqkog pomeraa, bira se 48 od 56 bita k uqa. Ova operacija bira podskup bita k uqa i istovremeno ih permutuje, pa se zove permutovani izbor; opisana je tabelom 4. Na primer, bit na poziciji 14 (17, 33) pomerenog k uqa premexta se na poziciju 1 (2, 35) potk uqa K , a 18-ti bit pomerenog k uqa se ignorixe. i
i
57 10 63 14
49 2 55 6
41 59 47 61
33 51 39 53
25 43 31 45
17 35 23 37
9 27 15 29
1 19 7 21
58 11 62 13
50 3 54 5
42 60 46 28
34 52 38 20
26 44 30 12
Tablica 2. Permutacija bita k uqa za DES.
18 36 22 4
234
9. PRIMENE U KRIPTOGRAFIJI
Proxirujua permutacija je operacija koja blok R proxiruje sa 32 na 48 bita. Dobijeni blok se XOR-uje sa delom k uqa K . Zatim se duina ponovo smauje na 32 bita supstitucijom. Time xto jedan bit moe da utiqe na dve supstitucije, zavisnost od ulaznih bita prostire se bre (takozvani lavinski efekat. Jedna od osnovnih zamisli pri projektovau DES-a je upravo postizae ci a da jedan ulazni bit utiqe na xto vixe izlaznih bita, i to xto ranije. Proxirujua permutacija zadata je tabelom 5, odnosno slikom 6. Svaki ulazni 4-bitni blok (b , b , b , b ) daje 6 bita izlaza, tako da se b i b pojav uju po dva puta, a b i b po jednom. Tabela na mestu i, 1 ≤ i ≤ 48, sadri indeks ulaznog bita koji se kopira na poziciju i u izlazu. Na primer, bit na poziciji 3 u ulaznom bloku kopira se na poziciju 4 u izlaznom bloku, a bit na poziciji 21 u ulaznom bloku kopira se na pozicije 30 i 32 u izlaznom bloku. i−1
i
0
0
3
1
5 6 7 8
1 2 3 4
9 10 11 12
1
2
3
2
13 14 15 16
~
32
···
I ª
±
48 2 3 4 5 1
6 7
8 9 10 11 14 15 16 17 20 21 22 23 12 13 18 19 24
Ris. 6. Proxirujua permutacija DES-a. runda 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 broj pomeraa 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
Tablica 3. Broj cikliqkih pomeraa k uqa za pojedine runde DES-a.
1423 1719 1112 244 261 58 163 287 1527 206 2113 102 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 Tablica 4. Permutovani izbor bita k uqa. 32 8 16 24
1 9 17 25
2 10 18 26
3 11 19 27
4 12 20 28
5 13 21 29
4 12 20 28
5 13 21 29
6 14 22 30
7 15 23 31
8 16 24 32
9 17 25 1
Tablica 5. Proxirujua permutacija DES-a.
9.4. DES
235
Poxto se blok K XOR-uje sa proxirenim blokom, dobijenih 48 bita vodi se na blok za supstituciju. Ova operacija izvodi se pomou 8 tablica, supstitucionih blokova S , S , . . . , S , videti tabelu 6. Ulaznih 48 bita deli se na osam 6-bitnih blokova, adresa za blokove S. Ako ulaz bloka S predstav a xest bita (b , b , b , b , b , b ), onda je b b binarno zapisan redni broj vrste (od 0 do 3), a b b b b je binarno zapisan redni broj kolone (od 0 do 15). Osam proqitanih elemenata (4bitnih brojeva) iz tablica se objediavaju i vode na izlaz. i
1
1
2
3
4
5
6
2
8
1 6
2 3 4 5
Supstitucioni blok S 14 4 13 1 2 15 0 15 7 4 14 2 4 1 14 8 13 6 15 12 8 2 4 9 Supstitucioni blok S 15 1 8 14 6 11 3 13 4 7 15 2 0 14 7 11 10 4 13 8 10 1 3 15 Supstitucioni blok S 10 0 9 14 6 3 13 7 0 9 3 4 13 6 4 9 8 15 1 10 13 0 6 9 Supstitucioni blok S 7 13 14 3 0 6 13 8 11 5 6 15 10 6 9 0 12 11 3 15 0 6 10 1 Supstitucioni blok S 2 12 4 1 7 10 14 11 2 12 4 7 4 2 1 11 10 13 11 8 12 7 1 14 Supstitucioni blok S 12 1 10 15 9 2 10 15 4 2 7 12 9 14 15 5 2 8 4 3 2 12 9 5 Supstitucioni blok S 4 11 2 14 15 0 13 0 11 7 4 9 1 4 11 13 12 3 6 11 13 8 1 4 Supstitucioni blok S 13 2 8 4 6 15 1 15 13 8 10 3 7 11 4 1 9 12 2 1 14 7 4 10 1
2
3
4
5
6
7
8
11 13 2 1 3 8 13 4 15 6 3 8 9 0 7 13 11 13 7 2 6 9 12 15 8 1 7 10 11 7 14 8
8 1 11 7 4 14 1 2 5 10 0 7 10 3 13 8 6 1 8 13 8 5 3 10 13 10 14 7 1 4 2 13
3 10 15 5 9 12 5 11 1 2 11 4 1 4 15 9 8 5 15 6 0 6 7 11 3 14 10 9 10 12 0 15
10 6 12 11 7 0 8 6 13 8 1 15 2 7 1 4 5 0 9 15 13 1 0 14 12 3 15 5 9 5 6 12
6 12 9 3 2 1 12 7 12 5 2 14 8 2 3 5 3 15 12 0 3 13 4 1 9 5 6 0 3 6 10 9
12 11 7 14 13 10 6 12 7 14 12 3 5 12 14 11 15 10 5 9 4 14 10 7 7 12 8 15 14 11 13 0
5 9 3 10 12 6 9 0 11 12 5 11 11 1 5 12 13 3 6 10 14 0 1 6 5 2 0 14 5 0 15 3
9 5 10 0 0 9 3 5 4 11 10 5 12 10 2 7 0 9 3 4 7 11 13 0 10 15 5 2 0 14 3 5
Tablica 6. Supstitucioni blokovi DES-a.
0 3 5 6 5 11 2 14 2 15 14 2 4 14 8 2 14 8 0 5 5 3 11 8 6 8 9 3 12 9 5 6
7 8 0 13 10 5 15 9 8 1 7 12 15 9 4 14 9 6 14 3 11 8 6 13 1 6 2 12 7 2 8 11
236
9. PRIMENE U KRIPTOGRAFIJI
Neka je, na primer, ulaz za tabelu S (drugim reqima, biti na pozicijama od 31 do 36 u bloku dobijenom posle XOR-ovaa sa K ) 110011. Prvi i xesti bit daju binarni broj 11, xto odgovara qetvrtoj vrsti tabele. Sreda qetiri bita daju binarni broj 1001, odnosno 9, xto odgovara 10-oj koloni tabele. Time je zadat elemenat (4, 10) tabele S , odnosno 14, ili binarno 1110. Dakle, 6-bitni blok 110011 zameuje se 4bitnim blokom 1110. Ovo je kritiqan korak algoritma. Sve ostale operacije su linearne i lako ih je analizirati. Supstitucioni blokovi su nelinearni, i vixe od ostalih elemenata doprinose sigurnosti DES-a. Rezultat faze supstitucije je osam 4-bitnih blokova, koji se kombinuju u jedinstveni 32-bitni blok. Ovaj blok obrauje se "permutacionim blokom", koji dobijene bite permutuje na naqin odreen tabelom 7 Tabela za svaki bit pokazuje na koju poziciju e biti premexten; na primer, bit 4 premexta se na poziciju 21, a bit 23 na poziciju 3. Na kraju se permutovani blok XOR-uje sa levom polovinom L prethodnog 64bitnog bloka. Poxto se zamene leva i desna polovina, moe se poqeti sa narednom rundom. Izlaz iz 16-te runde permutuje se zavrxnom permutacijom, koja je ustvari inverzna permutacija polazne permutacije, videti tabelu 8. Pri tome se posle poslede runde leva i desna polovina ne zameuju, tj. blok R L se dovodi na ulaz zavrxne permutacije (videti sliku 4). Posle svih ovih supstitucija, permutacija, XOR-ovaa i pomeraa bita, moglo bi se pomisliti da je algoritam za dexifrovae potpuno drugaqiji, i isto tako komplikovan kao i algoritam za xifrovae. Naprotiv, ove operacije su kombinovane tako da isti algoritam izvodi i xifrovae i dexifrovae. Zaista, jednakostima (9.1) ekvivalentne su jednakosti 6
i
6
i−1
16
Ri−1
=
Li
Li−1
=
Ri ⊕ f (Li , Ki )
16
koje izraavaju ulaz u i-tu rundu preko izlaza iz e (operacija XOR je inverzna samoj sebi). Jedina razlika je u tome xto se k uqevi K moraju koristiti obrnutim redosledom (K , K , . . . , K umesto K , K , . . . , K ). Algoritam formiraa k uqeva za runde isti je kao kod xifrovaa, izuzev xto se cikliqka pomeraa izvode udesno, a broj pomeraa se iz tabele 3 qita zdesna ulevo, umesto sleva udesno (ukupan broj pomeraa je 4 × 1 + 12 × 2 = 28, pa se posle 16-te runde obe polovine k uqa nalaze u poqetnom poloaju). i
16
15
1
1
2
16
16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
Tablica 7. Permutacioni blok DES-a.
40 38 36 34
8 6 4 2
48 46 44 42
16 14 12 10
56 54 52 50
24 22 20 18
64 62 60 58
32 30 28 26
39 37 35 33
7 5 3 1
47 45 43 41
15 13 11 9
55 53 51 49
23 21 19 17
Tablica 8. Zavrxna permutacija DES-a.
63 61 59 57
31 29 27 25
9.4. DES
237
Sigurnost DES-a u toku dueg perioda analiziralo je mnogo udi. Razmatrani su duina k uqa, broj iteracija i struktura supstitucionih blokova. Posebno su misteriozni supstitucioni blokovi { toliko konstanti, bez vid ivog razloga zaxto su izabrane bax takve ihove vrednosti. Iznoxene su sume da je NSA ugradila u DES skrivenu manu, xto joj omoguuje jednostavno dekriptirae poruka. Te sume trebalo je da budu opovrgnute izvextajem posebnog senatskog komiteta 1978. godine. Izvextaj meutim nije objav en zbog tajnosti; objav en je samo egov rezime, u kome se kae da je NSA uticala na razvoj DES-a tako xto je • IBM ubedila da je dovo no da duina k uqa bude 56 bita, • indirektno pomogla u razvoju supstitucionih blokova, i • potvrdila da, uz sve ihovo poznavae problematike, DES nema bilo kakve statistiqke ili matematiqke slabosti. Kasnije, 1992. godine jedan od qlanova IBM-ovog tima je qak i to opovrgao, tvrdei da je DES u potpunosti delo udi iz IBM-a. O karakteristikama DES-a objav eno je vixe rezultata. U skupu svih 2 moguih k uqeva, posebno se izdvajaju qetiri sa osobinom da potk uqevi K imaju iste vrednosti u svim rundama (takozvani slabi k uqevi ). Ako se k uqevi za DES biraju sluqajno, onda je verovatnoa da se izabere neki od slabih k uqeva beznaqajno mala. 56
i
Najozbi nija primedba na DES odnosi se na duinu k uqa. Jox 1979. godine proceeno je da bi se za 20 miliona dolara mogao napraviti paralelni raqunar, koji bi odreivao jedan k uq dnevno. Kao xto je ve reqeno, 1998. godine je sliqan raqunar naprav en za 250000 dolara. 9.4.1. Naqini korixea DES-a. Pored samog algoritma DES, standardizovani su i egovi naqini korixea. Osnovni je ECB (skraeno od Electronic Codebook , elektronska kodna kiga), a sastoji se u podeli otvorenog teksta na blokove od po 64 bita P , koji se xifruju istim k uqem K , C = DES (P ), i = 1, 2, . . .. Nedostatak ovog naqina je u tome xto ako se u otvorenom tekstu pojave dva ista bloka, onda e i ihovi xifrati biti jednaki. Da bi se to izbeglo, predloena su dva druga naqina, CBC (skraeno od Cipher Block Chaining , ulanqavae blokova xifrata) i CFB (skraeno od Cipher Feedback , U okviru postupka CBC blok otvorenog teksta se pre xifrovaa XOR-uje sa prethodnim blokom xifrata: C = DES (P ⊕ C ), i = 1, 2, . . . (videti sliku 7). Blok C nije xifrat, nego takozvani inicijalizacioni vektor (na primer, vektor od 64 nule). Jasno je da xifrovae svakog bloka zavisi od svih prethodnih blokova. Dexifrovae je inverzna operacija, P = DES (C ) ⊕ C . Postupak CBC identiqne blokove otvorenog teksta zameuje razliqitim xifratima samo ako su neki prethodni blokovi otvorenog teksta razliqiti. Dve identiqne poruke i da e daju isti xifrat. Jox gore, dve poruke sa istim poqetkom imae isti xifrat, do pojave prve razlike. Naqin da se ovaj problem izbegne je umetae sluqajnog bloka bita ispred poruke. Xifrat tog bloka (XOR-ovanog sa inicijalizacionim vektorom) je ustvari pravi inicijalizacioni vektor, koji se prenosi kao deo xifrata, a neophodan je za i
i
K
i
i
K
i
i−1
0
−1 K
i
i
i−1
238
9. PRIMENE U KRIPTOGRAFIJI Ci−1 ¾
- Ci−1
C 0 = I0
? - +n -
Pi
linija
t- · · ·
DES
6
C0 = I0
t
? - +n - Pi
- DES −1 6
K
K
(a) Xifrovae
(b) Dexifrovae
Ris. 7. Upotreba DES-a u okviru postupka CBC. ispravno dexifrovae. Vano je da se za svaku poruku koristi drugi inicijalizacioni vektor. To se moe postii sluqajnim izborom inicijalizacionog vektora za svaku poruku. Drugi naqin je da se iskoristi redni broj poruke. Dodavaem inicijalizacionog vektora za identiqne otvorene tekstove dobijaju se razliqiti xifrati. Prema tome, napadaq ne moe na osnovu xifrata da zak uqi bilo xta o otvorenom tekstu. Postupak CBC rexava problem ponav aa poruka, ali ima i jedan nedostatak. Pretpostavimo da se u toku prenosa zbog grexke u prenosu promenio neki bit xifrata iz bloka C . Ako promeeni blok C oznaqimo sa = DES (C ) ⊕ C , koji je bitno C , dexifrovaem se dobija blok P drugaqiji od originalnog otvorenog teksta | to je posledica osobine DES-a da sliqne blokove (one koji se razlikuju na samo nekoliko bitskih pozicija) transformixe xifrovaem/dexifrovaem u bitno razliqite blokove. Naredni blok P = DES (C ) ⊕ C ima samo jednu bitsku grexku, na istoj bitskoj poziciji gde je grexka u C . Svi ostali blokovi dexifruju se bez grexke. Dakle, jedna grexka u xifratu kvari dva uzastopna bloka pri dexifrovau. Ta osobina zove se prostirae grexaka. Da bi se ovaj problem rexio, odnosno ublaio, potrebno je zaxtitnim kodiraem smaiti verovatnou grexke na kanalu. Grexka drugog tipa, kad se pri prenosu u xifrat umetne (suvixan) bit, ili iz ega "ispadne" neki bit, fatalna je za dexifrovae, jer kvari sve blokove xifrata posle grexke. Zato je neophodno da se pri prenosu oquva struktura blokova, odnosno granice izmeu ih. Sa dexifrovaem xifrata dobijenog postupkom CBC, ne moe se zapoqeti pre nego xto se primi kompletan blok xifrata, xto za neke primene predstav a problem. Postupak CFB xifruje podatke pode ene na delove mae od veliqine bloka. Moe se, na primer, xifrovati jedan po jedan ASCII znak otvorenog teksta (takozvani 8-bitni CFB). Na sliqan naqin, moe se xifrovati bit po bit, korixeem 1-bitnog CFB. Na slici 8 prikazan je 8-bitni CFB. Za xifrovae i-tog znaka otvorenog teksta, p , koristi se, na primer, najniih osam bita z rezultata xifrovaa i−1
0 i−1
i
−1 K
i
−1 K
0 i−1
0 i−1
0 i−1
i−1
i
i
i−1
i−2
9.4. DES
prethodnih osam znakova xifrata, DES
239
K (ci−8 ci−7
. . . ci−1 )
ci = pi ⊕ zi = pi ⊕ DESK (ci−8 ci−7 . . . ci−1 ),
i ≥ 1.
Moe se zamisliti da novi znak xifrata ulazi sa desne strane u pomeraqki registar, sa qije leve strane "ispada" najstariji znak xifrata; time je spreman ulaz za DES za xifrovae narednog znaka p otvorenog teksta. Da bi se proces xifrovaa mogao ispravno odvijati od samog poqetka, mora se u pomeraqki registar upisati inicijalizacioni vektor (c c . . . c ). Kao i kod CBC, za svako naredno xifrovae mora se upotrebiti novi, drugaqiji inicijalizacioni vektor. egov sadraj nije tajna, i moe se poslati otvoreno, zajedno sa porukom. Dexifrovae je inverzan proces, i+1
−7 −6
pi = ci ⊕ zi = ci ⊕ DESK (ci−8 ci−7 . . . ci−1 )
0
i ≥ 1.
I na prijemnoj i predajnoj strani DES izvrxava samo xifrovae; u i-tom koraku xifrovaa i dexifrovaa ulazi u DES su identiqni. Iz goreg izraza vidi se da dexifrovani znak zavisi od prethodnih devet znakova xifrata. Drugim reqima, jedna grexka u prenosu prouzrokuje grexku kod najvixe devet dexifrovanih znakova. Pomeraqki registar
Pomeraqki registar
¾
ci−8 ci−7 ci−6 ci−5 ci−4 ci−3 ci−2 ci−1
¾
ci−8 ci−7 ci−6 ci−5 ci−4 ci−3 ci−2 ci−1
K uq K - DES Kraji levi bajt ? ? - +n - ci
(a) Xifrovae
¾
K uq K - DES Kraji levi bajt ?
zi
pi
¾
zi
t-
···
linija
t- ci
? - +n - pi
(b) Dexifrovae
Ris. 8. Upotreba DES-a u okviru 8-bitnog CFB.
Spomenimo da se DES moe koristiti i u tzv. brojaqkom reimu. Niz ulaza za DES su uzastopni 64-bitni brojevi (uzastopna staa brojaqa). Sliqno 1-bitnom CFB, u svakom koraku se od izlaznih 64 bita uzima samo jedan (na primer najnii bit), koji se XOR-uje sa narednim bitom otvorenog teksta. Dexifrovae se vrxi XOR-ovaem bita xifrata sa istim nizom izlaznih bita iz DES-a.
240
9. PRIMENE U KRIPTOGRAFIJI
9.5. RSA
Sistem RSA je najpoznatiji primer asimetriqnog xifarskog sistema. Od vixe asimetriqnih algoritama predloenih do sada, RSA je najjednostavniji za razumevae i realizaciju, a takoe i najpopularniji. Ime je dobio po svojim pronalazaqima (Rivest, Shamir i Adleman ), a objav en je 1978. godine. Analiza do sada nije ni dokazala, ni opovrgla sigurnost ovog sistema. Sigurnost RSA zasniva se na sloenosti faktorizacije velikih brojeva. Javni i tajni k uqevi odreeni su parom velikih prostih brojeva (od 100 do 200 i vixe dekadnih cifara). Smatra se da je odreivae otvorenog teksta na osnovu xifrata i k uqa za xifrovae ekvivalentno faktorizaciji proizvoda dva velika prosta broja. Da bi se formirao par k uqeva, treba najpre izabrati dva velika prosta broja p i q. Veliki prost broj sa k cifara dobija se tako xto se redom generixu sluqajni brojevi sa k cifara, i odbacuju | dok se ne naie na prost broj. Poznato je da je meu brojevima sa k dekadnih cifara "gustina" prostih brojeva priblino 1/ln 10 = 1/(k ln 10). To obezbeuje da se posle odreenog (ne prevelikog) broja pokuxaja mora naii na prost broj. S druge strane, postoje efikasni algoritmi za proveru da li je zadati broj prost (xto nije u suprotnosti sa qienicom da se ne znaju efikasni algoritmi za faktorizaciju velikih brojeva). Neka je n = pq proizvod naenih prostih brojeva. Neka je sa φ(n) oznaqena tzv. Ojlerova funkcija od broja n, jednaka broju brojeva maih od n koji su uzajamno prosti sa n. Nije texko proveriti da za za proste brojeve p i q vai φ(pq) = (p − 1)(q − 1). Sledei korak je izbor sluqajnog k uqa e za xifrovae, kao broja izmeu 1 i φ(n), uzajamno prostog sa φ(n). Postupak za nalaee e sliqan je onom za nalaee brojeva p i q: generixu se sluqajni brojevi sa zadatim brojem cifara i za ih se proverava da li su uzajamno prosti sa φ(n); dobijeni brojevi se odbacuju sve dok se ne naie na nekog, koji jeste uzajamno prost sa φ(n). I u ovom sluqaju se zna da se posle odreenog broja pokuxaja sa velikom verovatnoom mora naii na broj uzajamno prost sa φ(n). Posledi korak je odreivae k uqa za dexifrovae | takvog broja d za koji vai k
ed ≡ 1 (mod (p − 1)(q − 1)),
odnosno ed − 1 = l(p − 1)(q − 1) za neki celi broj l. Ovaj problem ekvivalentan je rexavau linearne Diofantove jednaqine ed − l(p − 1)(q − 1) = 1, u kojoj su nepoznate d i l. Ova jednaqina ima rexee, jer je najvei zajedniqki delilac enih koeficijenata e i (p − 1)(q − 1) jednak 1. Kao xto smo videli u ode ku 8.3, za ovaj problem postoji efikasan algoritam sloenosti O(log n), zasnovan na Euklidovom algoritmu. Par (e, n) je javni k uq, a broj d je tajni k uq. Brojevi p i q vixe nisu potrebni i treba ih obrisati (treba spreqiti da ih sazna bilo ko sem vlasnika tajnog k uqa).
9.5. RSA
241
Da bi se xifrovala poruka m, treba je podeliti na blokove, tako da se svaki od ih moe jednoznaqno predstaviti brojem izmeu 0 i n−1 (za binarne podatke moe se izabrati najvei stepen dvojke mai od n). Ako su, na primer, p i q brojevi od 100 dekadnih cifara, onda n ima 200 cifara, pa svaki blok m otvorenog teksta treba da bude duine nexto ispod 200 cifara. Xifrat e se sastojati od blokova c sliqne duine. Postupak xifrovaa je jednostavan: i
i
ci = mei mod n.
Dexifrovae na prijemnom kraju vrxi se na sliqan naqin, stepenovaem izloiocem d po modulu n, xto pokazuje sledea teorema. Teorema 9.1. Pod gorim uslovima je c ≡ m (mod n). Dokaz teoreme direktno koristi Ojlerovu teoremu, odnosno en specijalni sluqaj, Fermaovu teoremu. Teorema 9.2 (Ojlerova teorema). Ako je m > 1 i broj a je uzajamno prost sa m, onda je a ≡ 1 (mod m). Dokazatel~stvo. Neka su r , r , . . . , r svi razliqiti pozitivni brojevi mai od m, koji su uzajamno prosti sa m. Skup ostataka brojeva ar za i = 1, 2, . . . , s pri de eu sa m jednak je skupu {r , r , . . . , r }, jer su svaka dva ostatka ar (mod m) i ar (mod m) za i 6= j | razliqita: ihova razlika a(r − r ) ne moe biti de iva sa m, jer je a uzajmno prostoQsa m, a razlika Q r −r po modulu je maa od m. Odatle sledi daQje (ar ) ≡ r (mod m). Skraivaem ove kongruencije proizvodom r , uzajamno prostim sa m, dobija se tvree teoreme. ¤ Fermaova teorema, (P. Fermat , 1601-1665.) specijalni sluqaj Ojlerove teoreme, dobija se kad je m jednako prostom broju p. Tada je φ(m) = p − 1, pa je a ≡ 1 (mod p) za svako a koje nije de ivo sa p. Mnoeem ove kongruencije sa a dobija se kongruencija a ≡ a (mod p), koja je taqna za svaki celi broj a (ona je oqigledno taqna i ako je a de ivo sa p). Drugim reqima, za prost broj p i proizvo an celi broj a, broj a − a uvek je de iv sa p. Na sliqan naqin dobija se da je a − a de ivo sa p za proizvo an prirodan broj l. Prelazimo na dokaz teoreme 9.1. Dokazatel~stvo. Zamenom se dobija d i
i
φ(m)
1
2
s
i
1
i
i
i
2
s
j
j
s i=1 s i=1 i
j
i
s i=1 i
p−1
p
p
1+l(p−1)
1+l(p−1)(q−1)
cdi = med i = mi
,
jer je ed−1 umoak broja φ(n) = (p−1)(q −1). Zbog posledice Ojlerove teoreme razlika m −m je de iva prostim brojem p; analogno, ona je de iva i sa q. Prema tome, ova razlika je de iva proizvodom pq = n, odnosno 1+l(p−1)(q−1) i
i
1+l(p−1)(q−1)
cdi = mi
≡ mi
(mod n). ¤
242
9. PRIMENE U KRIPTOGRAFIJI
Pregled elemenata sistema RSA dat je u tabeli 9. Postupak formiraa k uqeva i xifrovaa ilustrovaemo jednim primerom. Primer 9.1. Neka je p = 47 i q = 71; tada je n = pq = 3337. Eksponent za xifrovae e treba da bude uzajamno prost sa φ(n) = (p − 1)(q − 1) = 46 · 70 = 3220. Neka je e = 79. Da bi se odredio multiplikativni inverz d = 79 (mod 3220), najpre se primeuje Euklidov algoritam na brojeve 3220 i 79: −1
3220 = 40 · 79 79 = 1 · 60 60 = 3 · 19 19 =6·3 3 = 3 · 1.
+60 +19 +3 +1
Odatle se dobija predstava jedinice (najveeg zajedniqkog delioca 3220 i 79) u obliku linearne kombinacije dva posleda qlana niza ostataka 3220, 79, 60, 19, 3: 1 = 19−6·3. Qlanovi niza ostataka su zbog preglednosti podeb ani. Korixeem gorih jednakosti unazad, dobijamo izraz za jedinicu u obliku linearne kombinacije prva dva elementa niza ostataka, odnosno brojeva e = 79 i (p − 1)(q − 1) = 3220: 1 = 19 − 6 · 3 = 19 − 6 · (60 − 3 · 19) = −6 · 60 + 19 · 19 = −6 · 60 + 19 · (79 − 60) = 19 · 79 − 25 · 60 = 19 · 79 − 25 · (3220 − 40 · 79) = 1019 · 79 − 25 · 3220
Prema tome, d = 1019. Brojevi e i n predstav aju javni k uq, a d je tajni k uq. Brojevi p i q se odbacuju (brixu). Da bi se xifrovala poruka m = 6882326879666683,
ona se prvo mora razbiti na mae blokove. U ovom sluqaju poruka se moe podeliti na trocifrene blokove m = 688, m = 232, m = 687, m = 966, m = 668 i m = 3. Xifrovaem prvog bloka dobija se 1
5
2
3
4
6
68879 mod 3337 = 1570 = c1 .
Javni k uq Tajni k uq Xifrovae Dexifrovae
n e
proizvod dva prosta broja p i q (quvaju se u tajnosti) uzajamno prost sa (p − 1)(q − 1)
d
e−1 (mod (p − 1)(q − 1))
c = me (mod n)
Tablica 9. Elementi sistema RSA.
m = cd (mod n)
ZADACI
243
Nastav ajui na isti naqin dobija se xifrovana poruka c = 1570 2756 2714 2276 2423 0158. Dexifrovae se postie stepenovaem k uqem d = 1019. Dakle, 1570 (mod 3337) = 688 = m . Ostatak poruke dexifruje se na isti naqin. Jasno je da se poruka moe xifrovati eksponentom d, a dexifrovati eksponentom e, jer je uloga eksponenata simetriqna. Sigurnost sistema RSA zavisi od teine problema faktorizacije velikih brojeva. Strogo govorei ovo nije taqno; radi se o hipotezi, koja nikad nije dokazana, da je izraqunavae m, na osnovu c i e ekvivalentno sa faktorizacijom broja n. Postoji mogunost da se pronae bitno drugaqiji postupak kriptoanalize RSA. Meutim, ako takav postupak kriptoanalize omoguuje odreivae d, onda se moe iskoristiti za faktorizaciju. U svakom sluqaju, najprirodniji naqin napada na RSA je faktorizacija modula n (videti zadatak 9.6). Trenutno se mogu rastav ati na qinioce brojevi od oko 120 dekadnih cifara. Ako se n izabere tako da ima 1024 bita (308 cifara), moe se smatrati da ovakav napad praktiqno nije izvod iv. RSA ima jedan praktiqan nedostatak: najbre realizacije RSA su od 100 do 1000 puta sporije od DES-a. Zbog toga se obiqno RSA koristi samo za razmenu k uqeva za DES (ili neki drugi blokovski sistem), a onda se za sva ostala xifrovaa koristi DES. 1019
1
9.6. Rezime
Kriptografija je oblast u kojoj efikasni algoritmi imaju znaqajnu primenu. Razmotreni su primeri nekih klasiqnih sistema. Kao predstavnici savremenih kriptografskih sistema prikazani su DES i RSA, jedan simetriqni i jedan asimetriqni sistem.
Zadaci
9.1. Sledei tekst dobijen je xifrovaem Cezarovom xifrom sa nepoznatim pomakom (abecedaˇ je ista kao u ode ku 9.3): ˇ EJCDVTCDZNKVDZDUTSDPTSUJA Kako glasi otvoreni tekst? 9.2. Na raspolagau je jedan par (P, C = DES (P )), pri qemu se o k uqu K zna da se sastoji od ASCII znakova iz skupa {A, B, . . . , Z }. Pod pretpostavkom da se jedno xifrovae algoritmom DES moe izvrxiti za 1ms, odnosno 1µs, koliko traje odreivae k uqa K proverom svih moguih sluqajeva? 9.3. Neka¯.x¯ oznaqava negaciju bloka x, bit po bit. Dokazati da iz DES (P ) = C sledi DES (P¯ ) = C 9.4. Osoba A koristi za xifrovae svojih poruka dvostruki algoritam DES: C = DES (DES (P )), gde su P , C 64-bitni blokovi poruke i xifrata, a K i K su dva nezavisna 56-bitna k uqa. Konstruisati algoritam za odreivae K i K polazei od 10 parova (P , C ) takvih da je C = DES (DES (P )). Na raspolagau je memorija veliqine 2 bajtova, a broj xifrovaa algoritmom DES treba da bude mai od 2 . K
K
¯ K
K2
1
K1
1
64
i
i
i
K2
K1
i
2
61
2
244
9. PRIMENE U KRIPTOGRAFIJI
9.5. Odrediti sve slabe k uqeve algoritma DES (k uqeve za koje svi delovi k uqa K imaju iste vrednosti). 9.6. Pokazati da se, polazei od javnog k uqa (n, e) i tajnog k uqa d za RSA, moe doi do faktorizacije broja n = pq. 9.7. Korisnik A sistema RSA sa parametrima n = pq, e i d odluqi da promeni k uqeve e i d (ali ne i n = pq ), jer suma da je neko saznao k uq d. Moe li osoba B , znajui prethodni par (d, e), da qita naredne poruke za A? Kako? 9.8. Pokazati da se umesto φ(n) u sistemu RSA moe koristiti tzv. Karmajklova funkcija χ(n) = NZS (p − 1, q − 1). 9.9. U primeru RSA xifrovaa 9.1 postoji potencijalni problem: posledi blok je pri xifrovau interpretiran kao broj 3, isto kao i da je posledi blok bio npr. 003. Samim tim, nije sigurno da e se dexifrovaem dobiti originalna poruka. Kako se moe rexiti ovaj problem? i
Glava 10
Redukcije 10.1. Uvod
Zapoqeemo ovo poglav e jednom anegdotom. Matematiqaru je objaxeno kako moe da skuva qaj: treba da uzme qajnik, napuni ga vodom iz slavine, stavi qajnik na xtedak, saqeka da voda provri, i na kraju stavi qaj u vodu. A onda su ga pitali: kako moe da skuva qaj ako ima qajnik, pun vrele vode? Jednostavno, kae on; prosue vodu i tako svesti problem na ve rexen. U ovom poglav u pozabaviemo se idejom redukcije, odnosno svoea jednog problema na drugi. Pokazaemo da redukcije, iako ponekad neracionalne, mogu biti i vrlo korisne. Na primer, ako ubacite u sanduqe poxte na Novom Beogradu pismo za qoveka koji stanuje odmah pored te poxte, pismo e, bez obzira na blizinu odredixta, prei put do Glavne poxte u Beogradu, pa nazad do poxte na Novom Beogradu, i tek onda e ga poxtar odneti vaxem poznaniku. Qesti su sluqajevi kad nije lako prepoznati specijalni sluqaj i za ega skrojiti efikasnije specijalno rexee. U praksi je qesto efikasnije sve specijalne sluqajeve tretirati na isti naqin. Na takvu situaciju qesto se nailazi i pri konstrukciji algoritama. Kad naiemo na problem koji se moe shvatiti kao specijalni sluqaj drugog problema, koristimo poznato rexee. To rexee ponekad moe biti previxe opxte ili previxe skupo. Meutim, u mnogim sluqajevima je korixee opxteg rexea najlakxi, najbri i najelegantniji naqin da se problem rexi. Ovaj princip se qesto koristi. Za neke raqunarske probleme, na primer rad sa nekom bazom podataka, obiqno nije neophodno napisati program koji rexava samo taj problem. Opxte rexee ne mora biti najefikasnije, ali je mnogo jednostavnije iskoristiti upravo ega. Pretpostavimo da je dat problem P , koji izgleda komplikovano, ali liqi na poznati problem Q. Moe se nezavisno (od poqetka) rexavati problem P , ili se moe iskoristiti neki od metoda za rexavae Q i primeniti ga na P . Postoji, meutim, i trea mogunost. Moe se pokuxati sa nalaeem redukcije, odnosno svoea jednog problema na drugi. Neformalno, redukcija je rexavae jednog problema korixeem "crne kutije" koja rexava drugi problem. Redukcijom se moe postii jedan od dva ci a, zavisno od smera. Rexee P , koje koristi crnu kutiju za rexavae Q, moe se transformisati u algoritam za rexavae P , ako se zna algoritam za rexavae Q. S druge strane, ako se za P zna da je teak problem, i zna se doa granica sloenosti za algoritme koji rexavaju P , onda je to istovremeno i doa 245
246
10. REDUKCIJE
granica sloenosti za problem Q. U prvom sluqaju je redukcija iskorixena za dobijae informacije o P , a u drugom | o Q. Na primer, u ode ku 10.4.2 razmatraju se problemi mnoea i kvadriraa matrica. Jasno je da se kvadrirae moe izvesti primenom algoritma za mnoee; prema tome, kvadrirae matrice moe se svesti na mnoee matrica. U ode ku 10.4.2 se pokazuje da je mogue pomnoiti dve matrice primenom algoritma za kvadrirae; drugim reqima, mnoee matrica svodi se na kvadrirae. Svrha ove druge redukcije je izvoee dokaza da se kvadrirae matrice ne moe izvesti asimptotski bre od izraqunavaa proizvoda dve proizvo ne matrice (pod uslovima koji su razmotreni u ode ku 10.4.2). U ovom poglav u videemo nekoliko primera redukcija. Nalaee redukcije jednog problema na drugi moe biti korisno qak i ako ne daje novu dou ili goru granicu sloenosti problema. Redukcija omoguuje bo e razumevanje oba problema. Ona se moe iskoristiti za nalaee novih tehnika za napad na problem ili egove varijante. Na primer, redukcija se moe iskoristiti za konstrukciju paralelnog algoritma za rexavae problema. Jedan od efikasnih naqina za upotrebu redukcija je definisae vrlo opxteg problema, na koga se mogu svesti mnogi drugi problemi. Takav problem treba da bude dovo no opxti, da pokrije xiroku klasu problema, dok sa druge strane treba da bude dovo no jednostavan, da bi imao efikasno rexee. Linearno programirae, jedan od takvih problema, razmotriemo u ode ku 10.3. I ranije smo ve sretali sa primerima redukcija | na primer, redukciju problema nalaea tranzitivnog zatvorea na problem nalaea svih najkraih puteva (ode ak 6.8). Redukcije su dovo no vane da zasluuju da im se posveti posebno poglav e. One su pored toga osnova i za materijal sledeeg poglav a.
10.2. Primeri redukcija
U ovom ode ku razmotriemo nekoliko primera upotrebe redukcija kao metoda za konstrukciju efikasnih algoritama. 10.2.1. Cikliqko uporeivae stringova. Poqiemo sa jednostavnom varijantom problema pronalaea uzorka u tekstu. Problem. Neka su A = a a . . . a i B = b b . . . b dva stringa duine n. Ustanoviti da li je string B cikliqki pomeraj stringa A. Problem je ustanoviti da li postoji indeks k, 0 ≤ k ≤ n − 1, takav da je a = b za sve i, 0 ≤ i ≤ n − 1. Oznaqimo ovaj problem sa CUS, a osnovni problem traea uzorka u tekstu sa TUT (ode ak 5.6). Problem CUS moe se rexiti, na primer, izmenom algoritma KMP, opisanog u ode ku 5.6. Postoji bo i naqin da se doe do rexea. Ideja je formulisati CUS kao regularni primer ulaza za problem TUT. Drugim reqima, traimo neki tekst T i uzorak P , tako da je pronalaee P u T ekvivalentno utvrivau da je B cikliqki pomeraj A. Ako nam to poe za rukom, onda se rexee TUT sa 0 1
i
(k+i) mod n
n−1
0 1
n−1
10.2. PRIMERI REDUKCIJA
247
stringovima T i P moe iskoristiti za rexavae CUS sa stringovima A i B . Kad se problem razmotri na ovaj naqin, lako je videti rexee: za T treba uzeti AA (odnosno string A nadovezan na samog sebe). Jasno je da je B cikliqki pomeraj A ako i samo ako je B podstring stringa AA. Poxto problem TUT umemo da reximo za linearno vreme, doxli smo do algoritma za rexavae CUS linearne sloenosti. 10.2.2. Redukcije sa uporeivaem nizova. Razmotrimo problem uporeivaa nizova iz ode ka 5.7: dati su nizovi znakova A = a a . . . a , B = b b . . . b su dva niza znakova, a zadatak je promeniti A znak po znak, i tako ga uqiniti jednakim nizu B. Dozvo ene su tri edit operacije | umetae, brisae i zamena znaka. Znaju se cene svake operacije, a ci je minimizacija cene editovaa. Rexee dato u ode ku 5.7 zasniva se na popuavau tabele dimenzija n × m, u kojoj svaki elemenat odgovara parcijalnom editovau: elemenat tabele u preseku i-te vrste i j-te kolone je najmaa cena transformisaa prvih i znakova A u j prvih znakova B. Ci se postie izraqunavaem elementa u doem desnom uglu tabele. Videli smo da se svaki elemenat moe izraqunati na osnovu samo tri "prethodna" elementa, xto odgovara trima moguim varijantama za posledu edit operaciju. Isti problem moe se posmatrati na drugi naqin ako tabeli pridruimo usmereni graf. Svaki elemenat tabele odgovara qvoru grafa, odnosno parcijalnom editovau. Grana (v, w) u grafu postoji ako se editovae koje odgovara qvoru w dobija dodavaem jedne edit operacije editovau koje odgovara qvoru v. Primer takvog grafa dat je na slici 1, gde je A = caa i B = aba. Horizontalne grane odgovaraju umetaima, vertikalne brisaima, a dijagonalne zamenama znakova. Tako, na primer, put istaknut na slici 1 odgovara brisau c, zameni a sa a, umetau b i jox jednoj zameni a sa a. U osnovnoj varijanti problema cene grana su 1, izuzev dijagonalnih grana kod kojih se zamena vrxi nepromeenim znakom, qija je cena 0. Problem se na taj naqin transformixe u obiqan problem nalaea svih rastojaa od zadatog qvora u grafu. Svakoj grani dode ena je teina, i mi traimo najkrai put od qvora (0, 0) do qvora (n, m). Dakle, problem nalaea edit rastojaa sveden je na problem nalaea svih rastojaa od zadatog qvora u grafu. Nalaee svih rastojaa od zadatog qvora u opxtem sluqaju nije lakxe od direktnog rexavaa problema. Ova redukcija ipak nije beskorisna. Razmotrimo, na primer, sledeu varijantu problema uporeivaa nizova. Cene edit operacija ne moraju da zavisi samo od pojedinaqnih znakova. Cena umetaa bloka znakova unutar drugog niza moe biti razliqita od umetaa istog broja znakova jednog po jednog, na razliqitim mestima. Isto moe da bude sluqaj i sa brisaima. Drugim reqima, umesto da cene dode ujemo pojedinaqnim umetaima, brisaima i zamenama, cene se mogu dodeliti blokovima umetanja, brisaa i zamena, nezavisno od ihove veliqine. Ili drugaqije, umetau bloka od k znakova moe se dodeliti cena c + c k, gde je c "poqetna cena", a c cena za svaki naredni znak. Postoji mnogo drugih korisnih metrika. One se mnogo lakxe modeliraju korixeem formulacije u vidu problema najkraih 1 2
1 2
m
1
2
2
1
n
248
10. REDUKCIJE ∅ ∅ u
a -u 6
b -u 6
a -u 6
u c ?
R -? u 6
R -? u 6
R -? u 6
0
0 R -? u 6
u a ?
R -? u 6
0
0 R -? u 6
u a ?
R -? u 6
R ? -u 6
R ? -u 6
Ris. 1. Graf koji odgovara nizovima A = caa i B = aba.
puteva, nego prilagoavaem polaznog problema. Isto tako, mogu se dodati nove grane sa podgodno izabranim cenama, ne meajui suxtinu problema. 10.2.3. Nalaee trouglova u neusmerenom grafu. Postoji tesna veza izmeu grafova i matrica. Graf G = (V, E) sa n qvorova v , v , ... v , moe se predstaviti svojom matricom povezanosti | kvadratnom matricom A = (a ) reda n, takvom da je a = 1 ako (v , v ) ∈ E , odnosno a = 0 u ostalim sluqajevima. Ako je G neusmereni graf, matrica A je simetriqna. Ako je G teinski graf, onda se takoe moe predstaviti kvadratnom matricom A = (a ) reda n, pri qemu je elemenat a jednak teini grane (v , v ), odnosno 0, ako te grane nema u grafu. Postoje i drugi naqini da se matrica pridrui grafu. Tako se grafu G = (V, E) sa n qvorova i m grana moe pridruiti n × m matrica u kojoj je (i, j) elemenat jednak 1 ako i samo ako je i-ti qvor susedan sa j-tom granom. Veze grafova i matrica ne zadravaju se samo na reprezentaciji. Mnoge osobine grafova mogu se bo e razumeti analizom odgovarajuih matrica. Sliqno, mnoge osobine matrica otkrivaju se posmatraem odgovarajuih grafova. Nije iznenaujue da se mnogi algoritamski problemi mogu rexiti korixeem ove analogije. To emo ilustrovati jednim primerom. Problem. Neka je G = (V, E) neusmereni povezani graf sa n qvorova i m grana. Potrebno je ustanoviti da li u G postoji trougao, odnosno takva tri qvora da izmeu svaka dva od ih postoji grana. Direktno rexee obuhvata proveru svih troqlanih podskupova skupa qvorova. Podskupova ima ¡ ¢ = n(n−1)(n−2)/6, a poxto se svaki od ih moe proveriti za konstantno vreme, vremenska sloenost ovakvog algoritma je O(n ). 1
ij
ij
ij
i
ij
n 3
j
2
n
ij
i
j
3
10.3. REDUKCIJE NA PROBLEM LINEARNOG PROGRAMIRA A
249
Moe se konstruisati i algoritam sloenosti O(mn) (zasnovan na proveri svih parova (grana, cˇvor) | da li grade trougao), koji je bo i ako graf nije gust. Moe li se ovo da e pobo xati? Prikazaemo sada algoritam koji je asimptotski bri, i suxtinski je drugaqiji. Svrha primera je da ilustruje vezu izmeu grafovskih i matriqnih algoritama. Neka je A matrica povezanosti grafa G. Poxto je graf G neusmeren, matrica A je simetriqna. Razmotrimo vezu elemenata matrice B = A = AA (proizvod je obiqan proizvod matrica) i grafa G. Prema definiciji proizvoda matrica je X 2
n
B[i, j] =
A[i, k] · A[k, j].
Iz ove jednakosti sledi da je uslov B[i, j] > 0 ispuen akko postoji indeks k, takav da su oba elementa A[i, k] i A[k, j] jedinice. Drugim reqima, B[i, j] > 0 je ispueno ako i samo ako postoji qvor v , takav da je k 6= i, k 6= j i da su oba qvora v i v povezana sa v (pretpostav amo da graf nema pet i, odnosno A[i, i] = 0 za i = 1, 2, . . . , n). Prema tome, u grafu postoji trougao koji sadri temena v i v akko je v povezan sa v i B[i, j] > 0. Konaqno, u G postoji trougao akko postoje takvi indeksi i, j da je A[i, j] = 1 i B[i, j] > 0. Navedena analiza sugerixe algoritam. Treba izraqunati matricu B = A i proveriti ispuenost uslova A[i, j] = 1, B[i, j] > 0 za svih n parova (i, j). Sloenost provere ovog uslova je O(n ), pa preovlaujui deo vremenske sloenosti algoritma potiqe od mnoea matrica. Time je problem nalaenja trougla u grafu sveden na problem mnoea matrica (preciznije, kvadriraa matrice, ali kao xto emo videti u ode ku 10.4.2, ta dva problema su ekvivalentna). Za mnoee matrica moe se iskoristiti Xtrasenov algoritam i tako dobiti algoritam za nalaee trougla u grafu sloenosti O(n ). Preciznije, opisana redukcija pokazuje da je sloenost ovog grafovskog problema O(M (n)), gde je M (n) sloenost mnoea Bulovih matrica reda n. k=1
k
i
i
j
j
k
i
j
2
2
2
2.81
10.3. Redukcije na problem linearnog programiraa
Prethodni ode ak sadri primere redukcija izmeu algoritama u razliqitim oblastima. Pokuxali smo da transformixemo jedan problem u drugi, da bismo mogli da iskoristimo poznati algoritam. U ovom ode ku emo takodje razmatrati redukcije, ali sa drugaqijim pristupom. Umesto da traimo kandidata za redukciju svaki put kad naiemo na novi problem, razmatramo "super{probleme", na koje se mogu svesti mnogi drugi problemi. Jedan takav super{problem (moda najvaniji) je linearno programirae. 10.3.1. Uvod i definicije. Sadraj mnogih problema je maksimizirae ili minimizirae neke funkcije, koja zadovo ava zadate uslove. Na primer, kod transportnog problema ci je maksimizirae fukcije toka, pod uslovom da su zadovo eni uslovi kapaciteta grana i konzervacije toka. Linearno programirae je opxta formulacija takvih problema, kad su funkcija i ograniqea linearni. Neka je x = (x , x , . . . , x ) vektor promen ivih. 1
2
n
T
250
10. REDUKCIJE
Ci na funkcija je linearna funkcija promen ivih | komponenti vektora :
x
X (10.1) c(x) = cx, gde su c konstante. Ci linearnog programiraa je pronai vrednost x koja zadovo ava zadata ograniqea (koja e biti navedena) i maksimizira ci nu funkciju. Kasnije emo videti da je lako zameniti minimizirae ci ne funkcije enim maksimiziraem. Prethodno navodimo opxti oblik zadatka linearnog programiraa sa tri tipa ograniqea, pri qemu se u konkretnim problemima ne moraju pojav ivati sva tri tipa ograniqea. Pokazaemo da se opxti problem moe svesti na problem sa samo dva tipa ograniqea. Neka su a , a , . . . , a realni vektori vrste jednake duine n, i neka su b , b , . . . , b realni brojevi. Nejednakosna ograniqea su ograniqea oblika (10.2) a · x ≤ b , 1 ≤ j ≤ k, pri qemu su svi simboli sem x konstante. Sliqna su jednakosna ograniqea (10.3) e · x = d , 1 ≤ j ≤ m, pri qemu su e , e , . . . , e takoe vektori vrste duine n, a d , d , . . . , d su realni brojevi. Obiqno se dodaju i posebna nenegativna ograniqea (iako se ona mogu shvatiti kao specijalni sluqaj prethodnih ograniqea) (10.4) x ≥ 0 za sve j ∈ P, gde je P zadati podskup skupa {1, 2, . . . , n}. Problem linearnog programiraa moe se formulisati na sledei naqin: maksimizirati funkciju c(x) (10.1), pri qemu treba da budu zadovo ena nejednakosna (10.2), jednakosna (10.3) i nenegativna ograniqea (10.4). Razume se da konkretni problemi ne moraju da sadre ograniqea svih tipova. Za ovako definisan problem u opxtem sluqaju postoji vixe ekvivalentnih formulacija. Na primer, jednakosna ograniqea tipa e · x = d mogu se ekvivalentno zameniti sa dva nejednakosna ograniqea e · x ≤ d i e · x ≥ d . Sliqno, nejednakosno ograniqee a · x ≤ b moe se zameniti sa dva ekvivalentna, a · x + y = b i y ≥ 0, pri qemu je y nova promen iva. U oba sluqaja zamena jednog skupa ograniqea drugim moe da povea broj ograniqea. Na ovom mestu neemo se baviti algoritmom za rexavae problema linearnog programiraa. Napomenimo samo da su postojei algoritmi dovo no efikasni u praksi, i da svoee nekog problema na linearno programirae nije samo uvebae redukcija, nego moe da bude i dobar naqin da se taj problem rexi. n
i i
i=1
i
1
1
2
2
k
k
j
j
1
2
j
j
m
1
2
m
j
j
j
i
i
i
i
i
i
i
j
j
j
j
10.3. REDUKCIJE NA PROBLEM LINEARNOG PROGRAMIRA A
251
10.3.2. Primeri redukcije na linearno programirae. U praksi su problemi retko direktno zadati kao problemi linearnog programiraa. Obiqno je neophodno uvesti odgovarajue definicije da bi se problem uklopio u ovu formulaciju. 10.3.2.1. Transportni problem. Ovaj problem razmatran je u ode ku 6.10. Neka promen ive x , x , . . . , x predstav aju vrednosti toka za svih n grana e , e , ..., e , Ci na funkcija je vrednost ukupnog toka 1
1
2
2
n
n
c(x) =
X
xj ,
j∈S
gde je S skup grana koje izlaze iz izvora s. Nejednakosna ograniqea odgovaraju ograniqeima kapaciteta xi ≤ ci ,
1 ≤ i ≤ n,
gde je c kapacitet grane e . Jednakosna ograniqea odgovaraju uslovima odranja toka X X x = x , za sve v ∈ V \ {s, t}. izlazi iz ulazi u Na kraju, sve promen ive treba da zadovo e nenegativna ograniqea x ≥ 0 za i ∈ {1, 2, . . . , n}. Vrednosti x koje maksimiziraju ci nu funkciju uz ova ograniqea odgovaraju oqigledno optimalnom toku. 10.3.2.2. Problem statiqkog usmeravaa. Neka je G = (V, E) graf koji predstav a komunikacionu mreu. Pretpostavimo da svaki qvor v ∈ V moe u jedinici vremena da primi samo B poruka (zbog jednostavnosti pretpostavlja se sve poruke imaju istu duinu). Pretpostavimo da nema ograniqea na broj poruka koje se mogu preneti bilo kojom granom, i da svaki qvor moe da quva neograniqenu zalihu poruka za slae. Problem je ustanoviti koliko poruka treba da prenesu pojedine grane u jedinici vremena, da bi se maksimizirao ukupan broj poruka koje mrea prenosi u jedinici vremena. Ovo je problem statiqkog usmeravaa, jer se pretpostav a da qvorovi uvek imaju poruke za slae; u praksi potrebe za prenosom zavise od vremena. U grafovskoj formulaciji problem glasi: dodeliti teine granama, tako da je zbir teina grana susednih qvoru v mai ili jednak od B , a da zbir teina svih grana bude maksimalan. Ovaj grafovski problem lako se moe formulisati kao problem linearnog programiraa. Svakoj grani e = (v, w) moe se dodeliti promen iva x , koja predstav a broj poruka kroz e u jedinici vremena. Ci na funkcija je P c(x) = x , a ograniqea su X x ≤B, za sve v ∈ V, i
i
i
ei
v
j
ej
v
i
i
i
i
i
i
i
i
i
i
ei
je susedna v
i
xi ≥ 0,
i
za sve i.
252
10. REDUKCIJE
10.3.2.3. Dobrotvorni problem. Pretpostavimo da n osoba ele da upute pomo u k ustanova. Osoba i ima ograniqee s na ukupan prilog u toku godine, kao i ograniqee a na iznos priloga ustanovi j (na primer, a moe da bude P 0 za neke ustanove). U opxtem sluqaju s je mae od a , pa svaka osoba treba da donese odluku o tome kome da uputi koliki prilog. Pretpostavimo da e da svaka ustanova j ima ograniqee t na ukupan iznos koji moe da primi (ovo ograniqee moda nije realno, ali je ipak interesantno). Ci je napraviti algoritam koji maksimizira zbir priloga. Ovaj problem je uopxtee problema uparivaa iz ode ka 6.9.2. Problem se moe rexiti postupkom sliqnim postupcima za nalaee optimalnog uparivaa, a moe se formulisati i kao problem linearnog programiraa. Ukupno ima nk promen ivih x , 1 ≤ i ≤ n, 1 ≤ j ≤ k, gde je x iznos koji osoba i uplauje ustanovi j. Ci na funkcija jeX i
ij
k j=1
i
ij
ij
j
ij
ij
c(x) =
Ograniqea su sledea:
xij .
i,j
za sve i, j, ≤s za sve i,
xij ≤ aij k X
xij
j=1
i
za sve j. Pored toga, sve promen ive naravno moraju biti nenegativne. 10.3.2.4. Problem pridruivaa. Promenimo malo dobrotvorni problem tako da svaka osoba moe da uplati prilog samo jednoj ustanovi, i da svaka ustanova moe da primi prilog od samo jedne osobe. Tako dobijamo standardni problem uparivaa, ali sa teinama. Svakom moguem uparivau pridruen je zbir priloga, a ci je ne samo pronai optimalno uparivae, nego i da maksimizirati sumu priloga. Ovo je teinski problem bipartitnog uparivaa, ili problem pridruivaa. Promen ive u ovom problemu ne mogu biti iste kao u prethodnom. Potrebno je na neki naqin okarakterisati uparivae. Treba obezbediti da je sa svakim qvorom povezana taqno jedna izabrana grana. To se moe postii dode ivaem po jedne promen ive x svakoj grani (i, j), tako da je x = 1 ako je grana izabrana, odnosno x = 0 u protivnom. Ci na funkcija je n X
xij ≤ tj
i=1
ij
ij
c(x) =
a ograniqea su
ij
X
aij xij ,
i,j k X j=1
xij = 1
za sve i,
10.4. PRIMENA REDUKCIJA NA NALAE E DO IH GRANICA
253
za sve j. Pored toga, sve promen ive x treba da budu nenegativne. Navedena ograniqea obezbeuju da je za svaki qvor izabrana najvixe jedna grana. Sa ovakvom formulacijom postoji jedan ozbi an problem. Promen ive treba da predstav aju izbor tipa "da"{"ne", a ihove optimalne vrednosti mogu da budu realni (dakle ne celi) brojevi! Potrebno je dodati ograniqea da promen ive mogu uzimati samo vrednosti 0 ili 1. U opxtem sluqaju takav problem je texko rexiti. Linearni programi qije promen ive moraju biti celi brojevi zovu se celobrojni linearni programi, a ihovo rexavae je celobrojno linearno programirae. Mnogi problemi razmotreni u prethodnim poglav ima mogu se na prirodan naqin formulisati kao problemi celobrojnog linearnog programiraa. Meutim, iako se linearni programi mogu efikasno rexavati, celobrojni linearni programi su obiqno (ali ne uvek) vrlo texki. Na ovaj problem vratiemo se i u sledeem poglav u. n X
xij = 1
i=1
ij
10.4. Primena redukcija na nalaee doih granica
Ako pokaemo da se proizvo an algoritam za rexavae problema A moe modifikovati (ne poveavajui mu pri tome znaqajno vremensku sloenost) tako da rexava problem B, onda je doa granica za problem B istovremeno i doa granica za problem A. Zaista, svaki algoritam za A je istovremeno i algoritam za B, pa je doa granica za B vea ili jednaka od doe granice za A. Prikazaemo tri primera dokaza doe granice sloenosti zasnovana na redukciji. 10.4.1. Doa granica za konstrukciju prostog mnogougla. Posmatrajmo problem povezivaa skupa taqaka u ravni prostim mnogouglom (videti ode ak 7.3). Videli smo kako se taj problem moe rexiti korixeem sortiraa. Ispostav a se da, pod odreenim pretpostavkama, ovaj problem ne moe da se rexi bre od sortiraa. Zbog toga se algoritam koji smo videli za nalaee prostog mnogougla ne moe pobo xati ako se ne pobo xa sortirae (pod "pobo xaem" se podrazumeva pobo xae za vixe od konstantnog faktora). Teorema 10.1. Neka je poznat algoritam za konstrukciju prostog mnogougla vremenske sloenosti O(T (n)). Tada postoji algoritam za sortirae sloenosti O(T (n) + n). Dokazatel~stvo. Razmotrimo n taqaka na krunici, slika 2. Jedini naqin da se te taqke poveu prostim mnogouglom je da se svaka taqka povee sa svojim susedima na krunici. U protivnom, ako dve taqke koje su susedi ne bi bile povezane, du koja sadri jednu od te dve taqke razdvajala bi preostale taqke na dve grupe, koje se ne mogu povezati ne presecajui ovu du. Posmatrajmo sada ulaz x , x , . . . , x za problem sortiraa. Ako bismo imali algoritam ("crnu kutiju") za rexavae problema prostog mnogougla, 1
2
n
254
10. REDUKCIJE
brojeve bismo mogli da sortiramo na sledei naqin. Ulaz x , x , . . . , x najpre preslikavamo u uglove y , y , . . . , y , iz opsega od 0 do 2π, sa istim meusobnim odnosima kao i x , x , . . . , x . To se moe postii linearnom funkcijom y = 2π(x −x )/(x −x ) koja interval (x ,x ) preslikava u interval (0, 2π); ovde je (x , x ) proizvo an interval koji sadri sve taqke x . Uglovi se zatim na prirodan naqin preslikavaju u taqke na jediniqnoj krunici: broju x odgovara taqka na krunici, qiji en polupreqnik sa fiksnom polupravom zaklapa ugao y . Ovo preslikavae brojeva u taqke izvodi se za linearno vreme. Sada se moe iskoristiti crna kutija za povezivae ovog skupa taqaka prostim mnogouglom, za vreme O(T (n)). Kao xto smo ve videli, mnogougao mora da spaja svaku taqku sa enim susedima na krunici. Zbog toga, prolazei taqke onim redom kojim su one sloene da bi qinile temena mnogougla, dobijamo niz taqaka sortiran po uglovima, a time i sortiran polazni niz brojeva. Sloenost ovakvog sortiraa je O(T (n) + n). ¤ 1
1
1
i
min
2
2
2
n
n
n
max
min
min
max
min
max
i
i
i
u y3
u y1 y5
u
y4 y2
u
u
Ris. 2. Pridruivae taqaka na krunici brojevima.
Da bismo dobili dou granicu za problem nalaea prostog mnogougla, moramo biti pa ivi u pogledu podrazumevanog modela raqunaa. Doa granica Ω(n log n) za problem sortiraa dokazana je u ode ku 5.3.6 pod pretpostavkom da se radi o modelu stabla odluqivaa. Da bi ova granica mogla da se iskoristi za problem nalaea prostog mnogougla, mora se koristiti isti model. Drugim reqima, mora se pretpostaviti da crna kutija koja rexava problem nalaea prostog mnogougla koristi O(T (n)) uporeivaa, na naqin koji je u skladu sa modelom stabla odluqivaa. Teorema dakle mora da sadri tu pretpostavku. Zatim se mora pokazati da je i redukcija u skladu sa modelom stabla odluqivaa. U ovom sluqaju redukcija je regularna jer prilikom dokaza doe granice za sortirae nije bilo nikakvih ograniqea na tip pitaa dozvoljenih u okviru stabla odluqivaa. Dakle, uporeivae koje radi sa x i y koordinatama koje odgovaraju uglu y raquna se kao jedno uporeivae u stablu odluqivaa. Stablo odluqivaa koje rexava problem nalaea prostog i
10.4. PRIMENA REDUKCIJA NA NALAE E DO IH GRANICA
255
mnogougla moe se transformisati u stablo odluqivaa za sortirae, bez znaqajne promene visine. Posledica 10.2. Ako se pretpostavi model stabla odluqivaa, konstrukcija prostog mnogougla koji povezuje skup od zadatih n taqaka u ravni zahteva u najgorem sluqaju Ω(n log n) uporeivaa. Ova redukcija ustanov ava qienicu da je sortirae centralni deo rexavaa problema konstrukcije prostog mnogougla. 10.4.2. Jednostavne redukcije sa matricama. U ode ku 8.5 razmotren je neobiqan, ali asimptotski brz postupak mnoea matrica. Na simetriqne matrice (one kojima je elemenat (i, j) jednak elementu (j, i) za svaki par indeksa (i, j)) qesto se nailazi u praksi. Prirodno je upitati se da li je jednostavnije mnoiti simetriqne matrice. Nije nelogiqno da simetrija omoguuje pronalaee bo ih izraza za mnoee npr. matrica reda 3. To bi moglo da proizvede asimptotski bo i algoritam za mnoee simetriqnih matrica. Pokazaemo da to ipak nije mogue, odnosno da je mnoee dve simetriqne matrice, sa taqnoxu do na konstantni faktor, iste sloenosti kao i mnoee dve proizvo ne matrice. Oznaqimo problem izraqunavaa proizvoda dve proizvo ne matrice sa P rM , a problem izraqunavaa proizvoda dve simetriqne matrice sa SimM. Jasno je da problem SimM nije tei od PrM, jer je SimM specijalni sluqaj PrM). Pretpostavimo sada da imamo algoritam koji rexava SimM. Pokazaemo da se taj algoritam moe iskoristiti kao crna kutija za rexavae opxtijeg problema PrM. Neka su A i B dve proizvo ne kvadratne matrice reda n. Oznaqimo sa A transponovanu matricu matrice A (tj. matricu dobijenu prebacivaem svakog elementa (i, j) matrice na poziciju (j, i)). Neposredno se proverava da je taqan sledei izraz u kome se pojav uje proizvod dve simetriqne 2n × 2n matrice µ ¶µ ¶ µ ¶ 0 A AB 0 0 B (10.5) = . A 0 B 0 0 A B Ovde 0 oznaqava n×n matricu qiji su svi elementi nule. Redukcija je posledica qienice da su matrice sa leve strane simetriqne. ihov proizvod moe se izraqunati korixeem algoritma za rexavae problema SimM. Meutim, gori levi blok ovog proizvoda je upravo proizvod AB. Prema tome, problem PrM moe se rexiti primenom algoritma za rexavae SimM na matrice dvostruko vee dimenzije. Tako dolazimo do sledeeg tvrea. Teorema 10.3. Ako postoji algoritam za mnoee dve realne simetriqne n×n matrice za vreme O(T (n)), pri qemu je T (2n) = O(T (n)), onda postoji algoritam za mnoee dve proizvo ne realne n × n matrice za vreme O(T (n) + n ). Dokazatel~stvo. Ako su date dve proizvo ne n × n matrice A i B, ihov proizvod nalazimo korixeem algoritma za mnoee simetriqnih T
T
T
2
T
T
256
10. REDUKCIJE
matrica na osnovu jednakosti (10.5). Potrebno je izvrxiti O(n ) operacija za izraqunavae A i B i formirae dve simetriqne matrice, i T (2n) operacija da se pomnoe dve dobijene simetriqne matrice, iz qega neposredno sledi tvree teoreme. ¤ Pretpostavka da je T (2n) = O(T (n)) nije prejaka, jer je, na primer, svaka polinomijalna funkcija zadovo ava. Navedena redukcija je interesantna samo u okviru dokaza doe granice. Teorema tvrdi da je nemogue iskoristiti simetriju prilikom mnoea matrica, i tako dobiti asimptotski bri algoritam. Navodimo jox jednu sliqnu redukciju. Teorema 10.4. Ako postoji algoritam koji izraqunava kvadrat realne n × n matrice za vreme O(T (n)), pri qemu je T (2n) = O(T (n)), onda postoji algoritam za mnoee dve proizvo ne realne n × n matrice za vreme O(T (n) + n ). Dokazatel~stvo. Kao i u dokazu teoreme 10.3, treba pronai matricu qiji kvadrat sadri dovo no informacija za izraqunavae proizvoda dve zadate matrice. Rexeeµse zasniva¶ na µsledeem izrazu: ¶ 2
T
T
2
0 B
A 0
2
=
AB 0
Iz ega neposredno sledi tvree teoreme.
0 BA
.
10.5. Uobiqajene grexke
¤
Sa redukcijama treba biti oprezan. Navexemo primere uobiqajenih grexaka koje se mogu napraviti pri pokuxaju redukcije. Najqexa grexka je da se redukcija izvede u pogrexnom smeru, a do e dolazi uglavnom pri redukcijama za dobijae doih granica. U tom sluqaju redukcija treba da pokae da je neki problem P teak bar koliko drugi problem Q, qiju sloenost znamo. Tada treba poi od proizvo nog ulaza za problem Q, i pokazati da se on moe rexiti crnom kutijom za rexavae problema P . Razmotrimo, na primer, sledei pokuxaj redukcije problema sortiraa na problem kompresije podataka Hofmanovim kodom (ode ak 5.5). Ci je pokazati da je Ω(n log n) doa granica sloenosti za Hofmanovo kodirae. Polazi se od zapaaa da, ako su uqestanosti znakova jako razliqite, onda kodno stablo postaje toliko neuravnoteeno da se moe iskoristiti za sortirae uqestanosti, videti primer na slici 3. U tom sluqaju su znakovi u kodnom stablu poreani po opadajuim uqestanostima (sa najqexim znakom najbliim korenu stabla). To upravo znaqi da se Hofmanovo kodirae moe iskoristiti za sortirae uqestanosti. Prema tome, formirae kodnog stabla je texko bar toliko koliko i sortirae, pa je time izgleda dokazana doa granica sloenosti Ω(n log n). Grexka u dokazu krije se u qienici da smo poxli od specijalnog ulaza za problem sortiraa: razmatrali smo samo takve uqestanosti, koje su znaqajno
10.5. UOBIQAJENE GREXKE
257
u u 16
u u8
u u4
u u2
u1
Ris. 3. Hofmanovo kodno stablo kad se uqestanosti znakova drastiqno razlikuju.
razdvojene. Da bi se doxlo do doe granice sloenosti za problem kodiraa, mora se poi od proizvo nog ulaza za problem sortiraa: treba dokazati da se proizvo ni brojevi mogu sortirati pomou algoritma za Hofmanovo kodirae. Ovakvu grexku razmotriemo jox jednom u narednom poglav u. Ispostav a se da se u ovom sluqaju grexka moe ispraviti. Ideja je da se utroxi jox malo vremena da bi se promenio (proizvo ni!) ulaz za problem sortiraa, tako da se on moe iskoristiti kao ulaz za kodirae. Neka je ulaz niz razliqitih prirodnih brojeva X = x , x , . . . , x . Moe se pretpostaviti da su brojevi razliqiti, jer doa granica za sortirae vai i za ulaze od razliqitih brojeva (xta vixe, doa granica je dokazana za razliqite brojeve). Kodno stablo Hofmanovog koda za ove uqestanosti moe biti proizvo nog oblika, pa je prethodno razmatrae neprimen ivo. Meutim, svaki broj x moe se zameniti uqestanoxu y = 2 . Poxto za svaki prirodni broj m vai 2 > P 2 , kodno stablo imae oblik kao na slici 3 (svaka uqestanost u nizu vea je od zbira svih uqestanosti maih od e). Prema tome, algoritam za Hofmanovo kodirae moe se iskoristiti za sortirae brojeva y . Potrebno je jox uveriti se da broj operacija izvedenih pri redukciji nije nedozvo eno veliki. Stepenovae moe da sadri veliki broj operacija, ali to ovde nije bitno, jer doa granica za sortirae obuhvata samo uporeivaa. U ode ku 5.3.6 nisu uqiene nikakve pretpostavke o broju ostalih operacija. Prema tome, dokazano je da, ako se pretpostavi model stabla odluqivaa, formirae Hofmanovog kodnog stabla u najgorem sluqaju zahteva Ω(n log n) uporeivaa (potencijalno je mogue bre formirati stablo algoritmom koji nije obuhvaen modelom stabla odluqivaa). Kod algoritama dobijenih redukcijom vano je da sama redukcija ne unese znaqajnu neefikasnost. Razmotrimo problem ranca iz ode ka 4.10 i egovo uopxtee kad se kopije svakog od predmeta mogu u ranac staviti neograniqeni broj puta. Direktna redukcija uopxtenog problema na polazni (u kome se svaki predmet moe iskoristiti samo jednom) je sledea. Neka je veliqina ranca K . U ranac moe da stane najvixe K/s kopija predmeta veliqine s . Prema tome, 1
m
i 0; potrebno je pridruiti granama e ∈ E teine w(e) tako da suma teina grana susednih proizvo nom qvoru bude maa ili jednaka od h, a da suma teina svih grana bude maksimalna. Formulisati ovaj problem kao problem linearnog programiraa. 10.9. Razmotrimo jox jednom dobrotvorni problem iz ode ka 10.3.2.3, uz pretpostavku da nije ograniqen iznos koji ustanove mogu da prime. Svesti ovu varijantu problema na linearno programirae. 10.10. Neka je S skup od n temena proizvo nog konveksnog mnogougla, zadatih proizvo nim redosledom. Dokazati da je vremenska sloenost ureea taqaka tako da odreuju uobiqajenu reprezentaciju mnogougla Ω(n log n). 10.11. U ode ku 8.5 videli smo da je dovo no 7 umesto 8 mnoea da se izraquna proizvod dve proizvo ne 2 × 2 matrice, i da to vodi asimptotski bo em algoritmu za mnoee matrica. Kvadrat realne 2×2 matrice moe se izraqunati pomou samo 5 mnoea (zadatak 8.15). Objasniti zaxto ovo zapaae ne protivreqi teoremi 10.4. 10.12. Doa (gora) trougaona matrica je kvadratna matrica u kojoj su elementi iznad (ispod) glavne dijagonale jednaki nuli. Dokazati da ako postoji algoritam sloenosti O(T (n)) za mnoee n × n doe trougaone matrice sa n × n gorom trougaonom matricom, onda postoji algoritam sloenosti O(T (n) + n ) za mnoee dve proizvo ne n × n matrice. Pri tome se moe koristiti pretpostavka da je T (cn) = O(T (n)) za proizvo nu konstantu c > 0. 10.13. Dokazati da ako postoji algoritam sloenosti O(T (n)) za mnoee dve n × n doe trougaone matrice, onda postoji algoritam sloenosti O(T (n) + n ) za mnoee dve proizvo ne n × n matrice. Moe se pretpostaviti da je T (cn) = O(T (n)) za proizvo nu konstantu c > 0. 10.14. Neka je S skup od n taqaka u ravni. Taqke iz S definixu teinski neusmereni graf na sledei naqin. Graf je kompletan (svaka dva egova qvora povezana su granom), a teine grana jednake su euklidskom rastojau izmeu odgovarajuih taqaka. Pokazati da je doa granica sloenosti algoritma za nalaee minimalnog povezujueg stabla (MCST) u ovom grafu Ω(n log n). 10.15. Neka je S skup od n taqaka u ravni. Dijametar S je najvee rastojae nekih dveju taqaka iz S. Oznaqimo sa DM problem odreivaa dijametra skupa od n taqaka, a sa DS problem utvrivaa da li su disjunktna dva skupa A i B od ukupno n realnih brojeva. Dokazati da ako postoji algoritam koji problem DM rexava za vreme O(T (n)), onda postoji algoritam sloenosti O(T (n) + n) za rexavae problema DS. 1
2
k i=1
k
2
2
i
Glava 11
NP
-kompletnost 11.1. Uvod
Ovo poglav e je bitno drugaqije od ostalih. U prethodnim poglav ima razmatrane su tehnike za rexavae algoritamskih problema i ihove primene ih na konkretne probleme. Bilo bi lepo kad bi svi problemi imali elegantne efikasne algoritme, do kojih dolazi korixeem malog skupa tehnika. Meutim, stvarni ivot nije tako jednostavan. Postoji mnogo problema koji se ne pokoravaju do sada razmotrenim tehnikama. Mogue je da prilikom ihovog rexavaa nije uloeno dovo no napora, ali se sa dosta razloga moe pretpostaviti da postoje problemi koji nemaju efikasno opxte rexee. U ovom poglav u opisaemo tehnike za prepoznavae nekih takvih problema. Vremenska sloenost veine do sada razmatranih algoritama ograniqena je nekim polinomom od veliqine ulaza. Za takve algoritme kaemo da su efikasni algoritmi, a za odgovarajue probleme da su rexivi. Drugim reqima, za algoritam kaemo da je efikasan ako je egova vremenska sloenost O(P (n)), gde je P (n) polinom od veliqine problema n. Podsetimo se da je veliqina ulaza definisana kao broj bita potrebnih za predstav ae ulaza. Ovo nije strogo formalna definicija: mogue je iste podatke predstaviti bitima na vixe naqina; meutim, duine svih dovo no efikasnih predstav aa istih podataka ne mogu se znaqajno razlikovati. Klasu svih problema koji se mogu rexiti efikasnim algoritmom oznaqavaemo sa P (polinomijalno vreme). Ova definicija moe da izgleda qudno na prvi pogled. Tako, na primer, algoritam sloenosti O(n ) se ni po kojim merilima ne moe smatrati efikasnim; sliqno, algoritam sa vremenom izvrxavaa 10 n texko je smatrati efikasnim, iako je linearne sloenosti. Ipak, ova definicija ima smisla iz dva razloga. Prvo, ona omoguuje razvoj teorije kojom emo se sada pozabaviti; drugo, i vanije, ovu definiciju je lako primeniti. Ispostav a se da ogromna veina rexivih problema ima praktiqno upotreb iva rexea. Drugim reqima, vremenska sloenost polinomijalnih algoritama na koje se u praksi nailazi je najqexe polinom malog stepena, retko iznad kvadratnog. Obrnuto je obiqno takoe taqno: algoritmi sa vremenskom sloenoxu veom od proizvo nog polinoma obiqno se ne mogu praktiqno izvrxavati za velike ulaze. Postoji dosta problema za koje se ne zna ni jedan algoritam polinomijalne sloenosti. Neki od tih problema e jednom moda biti rexeni efikasnim 10
7
261
262
11. NP-KOMPLETNOST
algoritmima. Meutim, ima razloga za verovae da se mnogi problemi ne mogu rexiti efikasno. Voleli bismo da budemo u stau da prepoznamo takve probleme, da ne bismo gubili vreme na traee nepostojeeg algoritma. U ovom poglav u razmotriemo kako pristupati problemima za koje se ne zna da li su u klasi P. Specijalno, razmotriemo jednu potklasu takvih problema, klasu takozvanih NP-kompletnih problema. Ovi problemi mogu se grupisati u jednu klasu jer su svi meusobno strogo ekvivalentni | efikasni algoritam za neki NP-kompletan problem postoji ako i samo ako za svaki NPkompletan problem postoji efikasni algoritam. Xiroko je rasprostraeno verovae da ne postoji efikasan algoritam za bilo koji NP-kompletan problem, ali se ne zna dokaz ovakvog tvrea. Qak i kad bi postojali efikasni algoritmi za rexavae NP-kompletnih problema, oni bi sigurno bili vrlo komplikovani, jer se takvim problemima mnogo istraivaqa bavilo tokom dugog niza godina. Do ovog trenutka se za stotine (moda hi ade) problema zna da su NP-kompletni, xto ovu oblast qini vrlo znaqajnom. Ovo poglav e sastoji se iz dva dela. U prvom se definixe klasa NPkompletnih problema i navode primeri dokaza pripadnosti nekih problema toj klasi. Zatim se razmatra nekoliko tehnika za priblino rexavae NPkompletnih problema. Ta rexea nisu uvek optimalna, ili se ne mogu primeniti na proizvo an ulaz, ali je bo e imati ih nego nixta.
11.2. Redukcije polinomijalne vremenske sloenosti
U ovom ode ku ograniqiemo se na probleme odluqivaa, tj. razmatraemo samo one probleme na koje se posle izvrxavaa odreenog algoritma moe odgovoriti sa "da" ili "ne". Ovo ograniqee uproxava razmatranja. Vei deo problema lako se moe prevesti u probleme odluqivaa. Na primer, umesto da traimo optimalno uparivae u zadatom grafu, moemo da postavimo pitae da li za zadato k postoji uparivae veliqine bar k . Ako umemo da reximo problem odluqivaa, obiqno moemo da reximo i polazni problem | binarnom pretragom, na primer. Problem odluqivaa moe se posmatrati kao problem prepoznavaa jezika . Neka je U skup moguih ulaza za problem odluqivaa. Neka je L ⊆ U skup svih ulaza za koje je rexee problema "da". Za L se kae da je jezik koji odgovara problemu, pa pojmovi problem i jezik mogu da se koriste ravnopravno. Problem odluqivaa je ustanoviti da li zadati ulaz pripada jeziku L. Sada emo uvesti pojam redukcije polinomijalne sloenosti izmeu jezika, kao osnovni alat u ovom poglav u. Definicija 11.1. Neka su L i L dva jezika, podskupa redom skupova ulaza U i U . Kaemo da je L polinomijalno svod iv na L , ako postoji algoritam polinomijalne vremenske sloenosti, koji dati ulaz u ∈ U prevodi u ulaz u ∈ U , tako da u ∈ L ako i samo ako u ∈ L . Algoritam je polinomijalan u odnosu na veliqinu ulaza u . Pretpostav amo da je pojam 1
1
2
2
1
2
1
2
2
1
1
2
1
2
1
11.2. REDUKCIJE POLINOMIJALNE VREMENSKE SLOENOSTI
263
veliqine dobro definisan u prostorima ulaza U i U , tako da je, na primer, veliqina u ograniqena polinomom od veliqine u . Algoritam iz definicije svodi jedan problem na drugi. Ako znamo algoritam za prepoznavae L , onda ga moemo superponirati sa algoritmom redukcije i tako dobiti algoritam za rexavae L . Oznaqimo algoritam redukcije sa AR, a algoritam za prepoznavae L sa AL . Proizvo ni ulaz u ∈ U moe se primenom AR transformisati u ulaz u ∈ U , i primenom AL ustanoviti da li u ∈ L , a time i da li u ∈ L . Posledica specijalnog sluqaja ovog razmatraa je sledea teorema. Teorema 11.1. Ako je jezik L polinomijalno svod iv na jezik L , i postoji algoritam polinomijalne vremenske sloenosti za prepoznavae L , onda postoji algoritam polinomijalne vremenske sloenosti za prepoznavae L . Dokazatel~stvo. Dokaz sledi iz prethodnog razmatraa. ¤ Relacija polinomijalne svod ivosti nije simetriqna: polinomijalna svod ivost L na L ne povlaqi uvek polinomijalnu svod ivost L na L . Ova asimetrija potiqe od qienice da definicija svod ivosti zahteva da se proizvo an ulaz za L moe transformisati u ekvivalentan ulaz za L , ali ne i obrnuto. Mogue je da ulazi za L , dobijeni na ovaj naqin, predstav aju samo mali deo svih moguih ulaza za L . Prema tome, ako je L polinomijalno svod iv na L , onda moemo smatrati da je problem L tei. Dva jezika L i L su polinomijalno ekvivalentni, ili jednostavno ekvivalentni, ako je svaki od ih polinomijalno svod iv na drugi. Specijalno, svi netrivijalni problemi iz klase P su ekvivalentni (videti zadatak 11.1). Relacija "polinomijalne svod ivosti" je tranzitivna, kao xto pokazuje sledea teorema. Teorema 11.2. Ako je L polinomijalno svod iv na L i L je polinomijalno svod iv na L , onda je L polinomijalno svod iv na L . Dokazatel~stvo. Neka su jezici L , L i L podskupovi skupova moguih ulaza redom U , U i U . Superponiraem algoritama redukcije L na L , odnosno L na L dobija se algoritam redukcije L na L . Proizvo an ulaz u ∈ U konvertuje se najpre u ulaz u ∈ U , koji se zatim konvertuje u ulaz u ∈ U . Poxto su redukcije polinomijalne sloenosti, a kompozicija dve polinomijalne funkcije je polinomijalna funkcija, rezultujui algoritam redukcije je takoe polinomijalne sloenosti (to je jedan od razloga zaxto su za meru sloenosti rexivih problema izabrani polinomi). ¤ Suxtina metoda koji emo primeivati u ovom poglav u je da ako se za neki problem ne moe nai efikasan algoritam, onda pokuxavamo da ustanovimo da li je on ekvivalentan nekom od problema za koje znamo da su texki. Klasa NP-kompletnih problema sadri stotine takvih meusobno ekvivalentnih problema. 1
2
2
1
2
1
2
1
2
1
2
2
2
2
1
2
1
1
2
2
1
1
2
2
1
1
2
2
2
1
2
2
1
2
1
3
2
1
1
1
2
1
1
3
3
2
2
3
2
3
3
1
3
1
2
2
3
2
264
11. NP-KOMPLETNOST
11.3. Nedeterminizam i Kukova teorema
Teorija NP-kompletnosti zasnovana je znaqajnom Kukovom (S. A. Cook ) teoremom 1971. godine. Pre nego xto formulixemo ovu teoremu, potrebno je da uvedemo jox neke pojmove. Pokuxaemo da izbegnemo tehniqke deta a i da diskusiju zadrimo na intuitivnom nivou. Kiga Gerija i onsona [2] (M. R. Garey, D. S. Johnson ) dobro pokriva ovu oblast. Teorija NPkompletnosti je deo xire oblasti koja se zove sloenost izraqunavaa, qiji najvei deo nije predmet ove kige. Razmatrae emo ograniqiti na one delove koji omoguuju korixee te teorije.
Do sada se nismo bavili preciznijim definisaem pojma algoritma. To nije vano sve dok se koriste uobiqajene operacije koje podravaju svi raqunari (na primer sabirae, uporeivae, pristup memoriji). Precizna definicija algoritma je bitna npr. za dokazivae doih granica sloenosti (tako je model stabla odluqivaa korixen prilikom dokaza doe granice sloenosti sortiraa, ode ak 5.3.6; meutim, taj model je vrlo ograniqen). Osnovni model izraqunavaa je Tjuringova maxina. Drugi qesto korixeni model je maxina sa uniformnim pristupom . Na sreu, ovi i drugi razumni modeli ekvivalentni su za naxe svrhe, jer se algoritam za jedan model uvek moe transformisati u algoritam za drugi model, tako da se vreme izvrxavaa ne mea vixe nego za polinomijalni faktor. Kukova teorema je, na primer, dokazana korixeem Tjuringove maxine kao modela izraqunavaa, ali je taqna i za druge modele. Na ovom mestu neemo eksplicitno koristiti ni jedan specijalni model. Meutim, zbog jasnijeg razumevaa pojma nedeterministiqkog algoritma, osloniemo se na definiciju Tjuringove maxine i nedeterministiqke Tjuringove maxine. Kao model izraqunavaa moe se koristiti deterministiqka Tjuringova maxina (DTM), koja je xematski prikazana na slici 1. DTM se sastoji od uprav aqkog bloka sa konaqnim brojem staa, glave za qitae/pisae i dvostrano neograniqene trake, pode ene na beskonaqni broj jednakih elija, numerisanih celim brojevima . . . , −2, −1, 0, 1, 2, 3, . . .. Uprav aqki blok Traka
Glava za qitae/pisae
?
···
··· −3
−2
−1
0
1
2
3
4
Ris. 1. Xematski prikaz deterministiqke Tjuringove maxine (DTM). Program za DTM sastoji se od sledeih komponenti:
11.3. NEDETERMINIZAM I KUKOVA TEOREMA
265
(1) konaqnog skupa Γ simbola koji se zapisuju na traku, podskupa Σ ⊂ Γ ulaznih simbola, i posebno izdvojenog praznog simbola b ∈ Γ \ Σ; (2) konaqnog skupa staa Q, qiji su elementi pored ostalih poqetno stae q i dva zavrxna staa q i q ; (3) funkcije prelaza δ : (Q \ {q , q }) × Γ → Q × Γ × {−1, 1}. Program se izvrxava na sledei naqin. Ulaz za program je req x ∈ Σ (sastav ena od znakova iz skupa Σ). Req se zapisuje na traci u elijama sa rednim brojevima 1, 2, . . . , |x|, po jedan simbol u svakoj eliji (ovde |x| oznaqava duinu reqi x). Sve druge elije u poqetnom trenutku sadre prazan simbol, pa se zato kae da su prazne. Program poqie sa radom nalazei se u stau q , pri qemu se glava za qitae/pisae nalazi nad elijom sa brojem 1. Zatim se proces izraqunavaa nastav a korak po korak. Ako je trenutno stae q jednako bilo q , bilo q , onda se proces izraqunavaa zavrxava, i to sa rezultatom "da" ako je q = q , odnosno "ne" ako je q = q . U protivnom, trenutno stae pripada skupu Q \ {q , q }, a glava za qitae/pisae qita sa trake neki simbol s ∈ Γ, pa je definisana vrednost δ(q, s). Pretpostavimo da je δ(q, s) = (q , s , ∆). U tom sluqaju glava brixe znak s, umesto ega pixe znak s i pomera se za jednu eliju ulevo ako je ∆ = −1, odnosno udesno ako je ∆ = +1. Istovremeno, uprav aqki blok prelazi iz staa q u stae q . Time se zavrxava jedan korak procesa izraqunavaa, i program je spreman za izvrxavae sledeeg koraka (ako on postoji). U tabeli 1 prikazan je primer jednostavnog programa M za DTM. Funkcija prelaza δ definisana je tablicom, u kojoj se u preseku vrste q i kolone s nalazi vrednost δ(q, s). Na slici 2 prikazano je izvrxavae programa M sa ulazom x = 10100; prikazani su stae, poloaj glave i sadraji nepraznih elija trake pre i posle svakog koraka. Zapaamo da se izraqunavae zavrxava posle osam koraka u stau q , pa se za ulaz 10100 dobija odgovor "da". U opxtem sluqaju kaemo da program M , koji ima ulazni alfabet Σ, prihvata req x ∈ Σ , ako i samo ako se, primeen na ulaz x, zaustav a u stau q . Jezik L koji prepoznaje program M , zadaje se izrazom L = {x ∈ Σ |M prihvata x}. Nije texko videti da program iz tabele 1 prepoznaje jezik {x ∈ {0, 1} | dva posleda znaka x su nule} , odnosno, ako x shvatimo kao binarne cifre ulaznog broja N , onda M proverava da li je N de ivo sa 4. 0
NE
da
ne
da
∗
0
ne
da
da
ne
da
0
ne
0
0
0
da
∗
M
da
∗
M
∗
q q0 q1 q2 q3
Γ = {0, 1, b}, Σ = {0, 1} Q = {q0 , q1 , q2 , q3 , qda , qne } 0 1 b (q0 , 0, +1) (q0 , 1, +1) (q1 , b, −1) (q2 , b, −1) (q3 , b, −1) (qne , b, −1) (qda , b, −1) (qne , b, −1) (qne , b, −1) (qne , b, −1) (qne , b, −1) (qne , b, −1) δ(q, s)
Tablica 1. Primer programa za DTM M = (Γ, Q, δ).
266
11. NP-KOMPLETNOST q0 :
···
b
5 1
q0 :
···
b
1
0 5 0
q0 :
···
b
1
q0 :
···
b
q0 :
···
q0 :
1
0
0
b
···
0
0
b
···
0
1 5 1
0
b
···
1
0
1
0 5 0
b
···
b
1
0
1
0
0 5 0
···
···
b
1
0
1
0
b 5 b
q1 :
···
b
1
0
1
b
···
q2 :
···
b
1
0
b
b
···
qda :
···
b
1
0
1 5 1
0 5 0
b
b
···
0 5 0
b
···
Ris. 2. Izvrxavae programa M iz tabele 1 sa ulazom 10100 na DTM.
Primetimo da definicija prepoznavaa jezika ne zahteva da se program zaustav a za sve ulaze iz Σ ; dovo no je da se M zaustav a za ulaze iz L . Ako x pripada skupu Σ \ L , onda se izvrxavae programa M na ulazu x ili zavrxava u stau q , ili traje neograniqeno. S druge strane, program za DTM koji odgovara naxem shvatau algoritma, trebalo bi da se zaustav a na svim reqima ulaznog alfabeta. U tom smislu program iz tabele 1 jeste algoritamski, jer se, poqevxi izvrxavae sa bilo kojom reqi od simbola 0, 1, zaustav a (dolazi do nekog od zavrxnih staa). Imajui u vidu model DTM, lako je precizno definisati vremensku sloenost. Vreme potrebno programu M za DTM za izraqunavae sa ulazom x je broj koraka koje DTM izvrxava do zaustav aa. Neka je Z skup celih nenegativnih brojeva. Ako se program M zaustav a za sve ulaze x ∈ Σ , onda se vremenska sloenost T : Z → Z tog programa definixe kao ½ ¯ ¾ ¯ postoji takva req x ∈ Σ , |x| = n, da je vreme T (n) = max m ¯¯ , izvrxavaa M sa ulazom x jednako m Program M je polinomijalni program za DTM ako postoji polinom p, takav da je za sve n ∈ Z ispueno T (n) ≤ p(n). Sada se moe i formalno definisati klasa jezika P: P = {L| postoji polinomijalni program M za DTM, za koji je L = L} . Termin "polinomijalni algoritam" koristiemo uglavnom neformalno. egov formalni ekvivalent je polinomijalni program za DTM. Meutim, zbog onoga xto je reqeno o ekvivalentnosti "realnih" modela raqunara u odnosu na pojam "polinomijalno vreme rada", ako se formalno klasa P definixe za proizvo ni od tih modela, dobie se ista klasa jezika. ∗
∗
M
M
ne
+
∗
M
+
+
∗
M
+
M
M
11.3. NEDETERMINIZAM I KUKOVA TEOREMA
267
Zbog toga, dokazujui da se neki problem moe rexiti polinomijalnim algoritmom, nema potrebe ulaziti u deta e odgovarajue DTM. Kao i do sada, razmatraemo algoritme u maxinski nezavisnom stilu, kao da oni rade direktno sa komponentama samog problema (skupovima, grafovima, brojevima i sliqno), a ne sa kodiranim ulazom za problem. U sluqaju postojaa e e i strp ea, za svaki polinomijalni algoritam moe konstruisati odgovarajui polinomijalni program za DTM. Naxa neformalna razmatraa algoritama treba shvatati kao uputstvo za takvu kostrukciju.
Sada emo definisati drugu vanu klasu jezika (odnosno problema odluqivaa) | klasu NP. Pre nego xto preemo na formalnu definiciju zasnovanu na Tjuringovim maxinama, pokuxaemo da razjasnimo smisao pojmova na kojima se zasniva klasa NP. Razmotrimo kao primer problem trgovaqkog putnika. Problem. Zadat je teinski graf G = (V, E) sa |V | = n qvorova (tako da je za proizvo ne qvorove { gradove v , v ∈ V , teina grane (v , v ) ∈ E jednaka d(v , v )) i broj B ∈ Z . Ustanoviti da li u G postoji Hamiltonov ciklus sa zbirom teina grana maim ili jednakim od B. Drugim reqima, postoji li takav niz qvorova (v , v , . . . , v ) da je i
j
i
+
π(1)
n−1 X i=1
π(2)
j
i
j
π(n)
d(vπ(i) , vπ(i+1) ) + d(vπ(n) , vπ(1) ) ≤ B?
Polinomijalni algoritam za rexavae ovog problema nije poznat. Pretpostavimo, meutim, da je za neki konkretan ulaz za ovaj problem dobijen odgovor "da". Ako u to posumamo, moemo zahtevati "dokaz" tog tvrea | niz qvorova koji ima traenu osobinu. Kad imamo ovakav niz qvorova, lako moemo da proverimo da li je to Hamiltonov ciklus, da izraqunamo egovu duinu i uporedimo je sa zadatom granicom B. Pored toga, oqigledno je vremenska sloenost ovakvog algoritma provere polinomijalna u odnosu na veliqinu ulaza. Upravo pojam polinomijalne prover ivosti karakterixe klasu NP. Primetimo da prover ivost za polinomijalno vreme ne povlaqi i mogunost rexavaa za polinomijalno vreme. Utvrujui da se za polinomijalno vreme moe proveriti odgovor "da" za problem trgovaqkog putnika, mi ne uzimamo u obzir vreme koje nam moe biti potrebno za pronalaee e enog ciklusa u eksponencijalnom broju svih moguih ciklusa u grafu. Mi samo tvrdimo da se za svaki zadati niz qvorova i za konkretan ulaz u, za polinomijalno vreme moe proveriti da li taj niz "dokazuje" da je za ulaz u odgovor "da". Klasa NP se neformalno moe definisati pomou pojma nedeterministiqkog algoritma. Takav algoritam sastoji se od dve razliqite faze: faze pogaaa i faze provere. Za zadati ulaz u, u prvoj fazi se izvodi prosto "pogaae" neke strukture S. Zatim se u i S zajedno predaju kao ulaz fazi provere, koja se izvodi na obiqan (deterministiqki) naqin, pa se zavrxava
268
11. NP-KOMPLETNOST
odgovorom "da" ili "ne", ili se izvrxava beskonaqno dugo. Nedeterministiqki algoritam "rexava" problem odluqivaa Π, ako su za proizvo ni ulaz u ∈ U za ovaj problem ispuena sledea dva uslova: (1) Ako u ∈ L , onda postoji takva struktura S, qije bi pogaae za ulaz u dovelo do toga da se faza provere sa ulazom (u, S) zavrxi odgovorom "da". (2) Ako u ∈/ L , onda ne postoji takva struktura S, qije bi pogaae za ulaz u obezbedilo zavrxavae faze provere sa ulazom (u, S) odgovorom "da". Na primer, nedeterministiqki algoritam za rexavae problema trgovaqkog putnika mogao bi se konstruisati koristei kao fazu pogaaa izbor proizvo nog niza gradova (qvorova), a kao fazu provere | gore pomenuti algoritam "provere dokaza" za problem trgovaqkog putnika. Oqigledno je da za proizvo an konkretan ulaz u postoji takvo pogaae S, da se kao rezultat rada faze provere sa ulazom (u, S) dobija "da", onda i samo onda, ako za ulaz u postoji Hamiltonov ciklus traene duine. Kae se da nedeterministiqki algoritam koji rexava problem odluqivaa Π radi za "polinomijalno vreme", ako postoji polinom p takav da za svaki ulaz u ∈ U postoji takvo pogaae S, da se faza provere sa ulazom (u, S) zavrxava sa odgovorom "da" za vreme p(|u|). Iz toga sledi da je veliqina strukture S obavezno ograniqena polinomom od veliqine ulaza, jer se na proveru pogaaa S moe utroxiti najvixe polinomijalno vreme. Klasa NP, definisana neformalno, | to je klasa svih problema odluqivaa koji pri razumnom kodirau mogu biti rexeni nedeterministiqkim (N { nondeterministic ) algoritmom za polinomijalno (P { polynomial ) vreme. Na primer, problem trgovaqkog putnika pripada klasi NP. U sliqnim neformalnim definicijama termin "rexava" treba oprezno koristiti. Treba da bude jasno da je osnovni smisao "polinomijalnog nedeterministiqkog algoritma" u tome da objasni pojam "prover ivosti za polinomijalno vreme", a ne u tome da bude realni metod rexavaa problema odluqivaa. Za svaki konkretan ulaz takav algoritam ima ne jedno, nego nekolikoNamoguih izvrxavaa | po jedno za svako mogue pogaae. kraju emo formalizovati navedenu definiciju u terminima jezika i Tjuringovih Π
Π
Π
Π
maxina. Formalni ekvivalent nedeterministiqkog algoritma je program za nedeterministiqku Tjuringovu maxinu sa jednom trakom (NDTM). Zbog jednostavnosti koristiemo malo nestandardni model NDTM. Model NDTM ima istu strukturu kao i DTM; razlika je samo u tome xto NDTM ima pogaaqki blok sa svojom glavom, koja moe samo da pixe po traci (videti sliku 3). Pogaaqki blok kontrolixe zapisivae "pogaaa", i to mu je jedina svrha. Program za NDTM definixe sa na isti naqin kao i program za DTM, i u tu svrhu koriste se: alfabet simbola trake Γ; ulazni alfabet Σ; prazan znak b; skup staa Q, qiji su elementi pored ostalih poqetno stae q , zavrxna staa q i q ; funkcija prelaza δ : (Q \ {q , q }) × Γ → Q × Γ × {−1, 1}. Izvrxavae programa za NDTM sa ulazom x ∈ Σ za razliku od izvrxavaa programa za DTM ima dve razliqite faze. U prvoj fazi izvodi se "pogaae". U poqetnom trenutku req x zapisana je na traci u elijama sa rednim brojevima 1, 2, . . . , |x| (ostale elije su prazne), glava za qitae/pisae "stoji" nad elijom sa brojem 0
da
ne
da
ne
∗
11.3. NEDETERMINIZAM I KUKOVA TEOREMA
Uprav aqki blok
Pogaaqki blok Traka
269
Pogaaqka glava
Glava za qitae/pisae
?
?
···
··· −3
−2
−1
0
1
2
3
4
Ris. 3. Xematski prikaz nedeterministiqke Tjuringove maxine sa jednom trakom (NDTM).
, glava za pisae pogaaqkog bloka stoji kod elije sa brojem −1, a uprav aqki blok je "pasivan". Zatim pogaaqki blok poqie da uprav a pogaaqkom glavom, koja izvrxava po jedan korak u svakom trenutku, pa ili pixe jedan znak iz alfabeta Γ u eliju koja se nalazi naspram e i pomera se za jednu eliju ulevo, ili se zaustav a. U drugom sluqaju pogaaqki blok prelazi u pasivno stae, a uprav aqki blok poqie rad iz staa q . Pogaaqki blok (dok radi) odluquje da li da nastavi sa radom (a onda i koji znak iz Γ da napixe na traci), ili da pree u pasivno stae, pri qemu to radi potpuno proizvo no. Na taj naqin pogaaqki blok do trenutka zavrxetka svog rada moe da ispixe proizvo nu req iz Γ , pa je qak mogue i da se nikad ne zaustavi. Faza provere poqie onog trenutka kad uprav aqki blok pree u stae q . Poqevxi od tog trenutka, izvrxavae programa za NDTM ostvaruje se po istim pravilima kao izvrxavae programa za DTM. Pogaaqki blok i egova glava postaju neaktivni, poxto su izvrxili svoju ulogu zapisujui na traci req{pogaae. Naravno, req{pogaae moe biti uqitana (i obiqno jeste) od strane glave za qitae/pisae u procesu provere. Izraqunavae se zavrxava onda kad uprav aqki blok pree u jedno od dva zavrxna staa (q ili q ); ono se zove prihvatajue izraqunavae ako se zaustav a u stau q . Sva ostala izraqunavaa, bez obzira da li se zavrxavaju ili ne, zovu se neprihvatajua izraqunavaa. Primetimo da proizvo ni program M za NDTM moe da ima beskonaqno mnogo moguih izraqunavaa za dati ulaz x, po jedno za svaku req{pogaae iz Γ . Kaemo da program M za NDTM prihvata x, ako je bar jedno od egovih izraqunavaa sa ulazom x prihvatajue. Jezik koji program M prepoznaje je jezik L = {x ∈ Σ |M prihvata x}. Vreme potrebno NDTM programu M za prihvatae reqi x ∈ L | to je minimalni broj koraka koji se izvrxavaju u fazi pogaaa i fazi provere do trenutka zaustav aa u stau q , pri qemu se minimum trai po svim prihvatajuim izraqunavaima programa M sa ulazom x. Vremenska sloenost programa M za NDTM | to je funkcija T : Z → Z definisana na sledei naqin µ ½ ¯ ¾¶ ¯ postoji takva req x ∈ L , |x| = n, da je vreme prihT (n) = max {1} ∪ m ¯¯ . vataa x programom M jednako m Primetimo da vremenska sloenost programa M zavisi samo od broja koraka koji se izvrxavaju u prihvatajuim izraqunavaima, a takoe da stav amo T (n) = 1 ako ne postoji ni jedan ulaz veliqine n koga prihvata program M . NDTM program je NDTM program sa polinomijalnim vremenom izvrxavaa ako postoji polinom p, takav da je T (n) ≤ p(n) za sve n ≥ 1. Na kraju, klasa NP formalno se 1
0
∗
0
da
ne
da
∗
M
∗
M
da
M
M
M
M
M
+
+
270
11. NP-KOMPLETNOST
definixe sa
postoji NDTM program M sa polinomijalnim vremenom ¾ . izvrxavaa, za koji je L = L Nije texko ustanoviti vezu izmeu ovih formalnih i prethodnih neformalnih definicija. Ma jedan deta treba posebno obratiti pau Dok nedeterministiqki algoritam pogaa strukturu S koja na neki naqin zavisi od konkretnog ulaza za problem, pogaaqki blok NDTM potpuno ignorixe ulaznu req. Iako se proizvo na req iz Γ moe dobiti kao rezultat rada pogaaqkog bloka, to nije bitno, jer se program za NDTM uvek moe konstruisati tako da faza provere poqie proverom da li pogaae (pri implicitnoj interpretaciji koju program daje reqima) odgovara pogaajuoj strukturi za zadati ulaz. U protivnom program moe odmah da pree u zavrxno stae q . Poxto se svaki realistiqki model raqunara moe dopuniti analogom razmotrenog "pogaaqkog bloka sa glavom za pisae", naxe formalne definicije mogle bi se parafrazirati za svaki drugi standardni model raqunara. Svi takvi modeli ekvivalentni su sa taqnoxu do deterministiqkih polinomijalnih izraqunavaa, pa e sve na taj naqin dobijene verzije klase NP biti identiqne. Prema tome, ispravno je poistoveivae formalno definisane klase NP sa klasom svih problema odluqivaa koji se mogu "rexiti" nedeterministiqkim algoritmima sa polimomijalnim vremenom izvrxea. NP =
½ ¯ ¯ L ¯¯
M
∗
ne
Nedeterministiqki algoritmi su vrlo moni, ali ihova snaga nije neograniqena. Postoje problemi koji se ne mogu efikasno rexiti nedeterministiqkim algoritmom. Na primer, posmatrajmo sledei problem: da li je veliqina optimalnog uparivaa u zadatom grafu jednaka taqno k? Nedeterministiqkim algoritmom lako se moe pronai uparivae veliqine k, ako ono postoji, ali se ne moe lako ustanoviti (qak ni nedeterministiqki) da ne postoji vee uparivae. Klasa problema za koje postoji nedeterministiqki algoritam polinomijalne vremenske sloenosti zove se NP. Izgleda razumno smatrati da su nedeterministiqki algoritmi moniji od deterministiqkih, ali da li je to taqno? Jedan naqin da se to dokae bio bi da se pronae neki NP problem koji nije u P. To do sada nikome nije poxlo za rukom. U protivnom, da bi se dokazalo da su ove dve klase jednake (odnosno P=NP), trebalo bi pokazati da svaki problem iz klase NP moe da bude rexen deterministiqkim algoritmom polinomijalne vremenske sloenosti. Ni ovakvo tvree niko nije uspeo da dokae (i malo je onih koji veruju u egovu taqnost). Problem utvrivaa odnosa izmeu P i NP poznat je kao problem P=NP. Sada emo definisati dve klase, koje ne samo da sadre brojne vane probleme za koje se ne zna da li su u P, nego sadre najtee probleme u NP. Definicija 11.2. Problem X je NP-teak problem ako je svaki problem iz klase NP polinomijalno svod iv na X . Definicija 11.3. Problem X je NP-kompletan problem ako (1) pripada klasi NP, i (2) X je NP-teak. Posledice definicije klase NP-texkih problema je da, ako se za bilo koji NP-teak problem dokae da pripada klasi P, onda je P=NP.
11.3. NEDETERMINIZAM I KUKOVA TEOREMA
271
Kuk je 1971. godine dokazao da postoje NP-kompletni problemi. Specijalno, naveo je primer jednog takvog problema, koji emo uskoro prikazati. Kada se zna jedan NP-kompletan problem, dokazi da su drugi problemi NP-kompletni postaju jednostavniji. Ako je dat novi problem X , dovo no je dokazati da je Kukov problem (ili bilo koji drugi NP-kompletan problem) polinomijalno svod iv na X . To sledi iz sledee leme. Lema 11.1. Problem X je NP-kompletan ako (1) X pripada klasi NP, i (2') postoji NP-kompletan problem Y koji je polinomijalno svod iv na X . Dokazatel~stvo. Problem Y je prema uslovu (2) NP-teak, pa je svaki problem u klasi NP je polinomijalno svod iv na Y . Poxto je Y polinomijalno svod iv na X , a polinomijalna svod ivost je tranzitivna relacija, svaki problem u klasi NP je polinomijalno svod iv i na problem X . ¤ Mnogo je lakxe dokazati da su dva problema polinomijalno svod iva, nego direktno dokazati da je ispuen uslov (2). Zbog toga je Kukov rezultat kamen teme ac cele teorije. Da e, sa pojavom novih problema za koje se zna da su NP-kompletni, raste broj mogunosti za dokazivae uslova (2'). Ubrzo poxto je Kukov rezultat postao poznat, Karp (R. M. Karp ) je za 24 vana problema pokazao da su NP-kompletni. Od tog vremena je za stotine problema (moda hi ade, zavisno od naqina brojaa varijacija istog problema) dokazano da su NP-kompletni. U sledeem ode ku prikazaemo pet primera NP-kompletnih problema, sa dokazima ihove NP-kompletnosti. Navexemo takoe (bez dokaza) vixe NP-kompletnih problema. Najtei deo dokaza je obiqno (ne uvek) dokaz ispuenosti uslova (2'). Izloiemo sada problem za koji je Kuk dokazao da je NP-kompletan, sa idejom dokaza. Problem je poznat kao problem zadovo ivosti (SAT, skraenica od satisfiability ). Neka je S Bulov izraz u konjuktivnoj normalnoj formi (KNF). Drugim reqima, S je konjunkcija vixe klauza (disjunkcija grupa literala | simbola promen ivih ili ihovih negacija). Na primer, S = (x + y + z¯) · (¯x + y + z) · (¯x + y¯ + z¯), gde sabirae, odnosno mnoee odgovaraju disjunkciji, odnosno konjunkciji (ili, odnosno i ), a svaka promen iva ima vrednost 0 (netaqno) ili 1 (taqno). Poznato je da se svaka Bulova funkcija moe predstaviti izrazom u KNF. Za Bulov izraz se kae da je zadovo iv, ako postoji takvo dode ivae nula i jedinica promen ivim, da izraz ima vrednost 1. Problem SAT sastoji se u utvrivau da li je zadati izraz zadovo iv (pri qemu nije neophodno pronai odgovarajue vrednosti promen ivih). U navedenom primeru izraz S je zadovo iv, jer za x = 1, y = 1 i z = 0 ima vrednost S = 1. Problem SAT je u klasi NP jer se za (nedeterministiqki) izabrane vrednosti promen ivih za polinomijalno vreme (od veliqine ulaza | ukupne duine formule) moe proveriti da li je izraz taqan. Problem SAT je NPteak jer se izvrxavae programa NDTM za algoritam koji rexava proizvo an izabrani problem iz klase NP moe opisati Bulovim izrazom (dokaz ove qienice nije jednostavan). Pod "opisati" se ovde podrazumeva da e izraz
272
11. NP-KOMPLETNOST
biti zadovo iv ako i samo ako Tjuringova maxina sa zadatim ulazom zavrxava rad i dolazi do prihvatajueg staa. To nije lako uraditi i takav izraz moe da bude dugaqak i komplikovan, ali egova veliqina je ograniqena polinomom od broja koraka koje izvrxava Tjuringova maxina. Prema tome, ulaz za svaki problem, za koji postoji nedeterministiqki polinomijalni algoritam, moe se transformisati u ulaz za problem SAT. Teorema 11.3 (Kukova teorema). Problem SAT je NP-kompletan.
11.4. Primeri dokaza NP-kompletnosti
U ovom ode ku dokazaemo da su NP-kompletni sledeih pet problema: pokrivaq grana, dominirajui skup, 3 SAT, 3-obojivost i problem klika. Svaki od ovih problema bie deta nije izloen. Dokazivae NP-kompletnosti zasniva se na tehnikama koje e biti rezimirane na kraju ode ka. Da bi se dokazala NP-kompletnost nekog problema, mora se najpre dokazati da on pripada klasi NP, xto je obiqno (ali ne uvek!) lako, a zatim treba pronai redukciju polinomijalne vremenske sloenosti na nax problem nekog problema za koji se zna da je NP-kompletan. Redosled redukcija u dokazima NPkompletnosti pet navedenih problema prikazan je na slici 4. Da bi se ovi dokazi lakxe razumeli, navedeni su redosledom prema teini, a ne prema rastojau od korena stabla na slici 4; redosled dokaza prikazan je brojevima uz grane. SAT 4
)
Klike ?1
Pokrivaq grana
3
q
3SAT ?5
3-obojivost
?2
Dominirajui skup
Ris. 4. Redosled dokaza NP-kompletnosti u tekstu.
11.4.1. Pokrivaq grana. Neka je G = (V, E) neusmereni graf. Pokrivaq grana grafa G je takav skup qvorova, da je svaka grana G susedna bar jednom od qvorova iz skupa.
11.4. PRIMERI DOKAZA NP-KOMPLETNOSTI
273
Problem. Zadat je neusmereni graf G = (V, E) i prirodni broj k. Ustanoviti da li u G postoji pokrivaq grana sa ≤ k qvorova. Teorema 11.4. Problem pokrivaq grana je NP-kompletan. Dokazatel~stvo. Problem pokrivaq grana je u klasi NP, jer se za pretpostav eni podskup od ≤ k qvorova lako proverava za polinomijalno vreme da li je pokrivaq grana grafa. Da bismo dokazali da je problem pokrivaq grana NP-kompletan, treba da na ega svedemo neki NP-kompletan problem. U tu svrhu iskoristiemo problem klika (dokaz da je problem klika NPkompletan bie dat u ode ku 11.4.4). U neusmerenom grafu G = (V, E) klikagranama je takav podgraf C grafa G u kome su svi qvorovi meusobno povezani iz G. Drugim reqima, klika je kompletan podgraf. Problem klika glasi: za zadati graf G i prirodni broj k, ustanoviti da li G sadri kliku veliqine k. Potrebno je transformisati proizvo an ulaz za problem klika u ulaz za problem pokrivaq grana, tako da je rexee problema klika "da" akko je "da" rexee odgovarajueg problema pokrivaq grana. Neka je G = (V, E), k proizvo an ulaz za problem klika. Neka je G¯ = (V, E)¯ komplement grafa G, odnosno graf sa istim skupom qvorova kao i G, i komplementarnim skupom grana u odnosu na G (odnosno izmeu proizvo na dva qvora u G¯ grana postoji akko izmeu ta dva qvora u G ne postoji grana). Neka je n = |V |. Tvrdimo da je¯ problem klika (G, k) sveden na problem pokrivaq grana grafa, sa ulazom G, n − k (videti primer na slici 5, gde su isprekidanim linijama prikazane grane iz G). Pretpostavimo da je C = (U, F ) klika u G. Skup qvorova V \ U pokriva sve grane u G¯, jer u G¯ nema grana koje povezuju¯ qvorove iz U (sve te grane su u G). Prema tome, V \ ¯U je pokrivaq grana za G. Drugim reqima, ako G ima kliku veliqine k , onda G ima pokrivaq grana veliqine n − k . Obrnuto, neka je D pokrivaq grana u G¯. Tada D pokriva sve grane u G¯, pa u G¯ ne moe da postoji grana koja povezuje neka¯ dva qvora iz V \ D. Prema tome, V \ D je klika u G. Zak uqujemo da ako u G postoji pokrivaq grana veliqine n − k, onda u G postoji klika veliqine k. Ova redukcija se oqigledno moe izvrxiti za polinomijalno vreme: potrebno je samo konstruisati graf G¯ polazei od grafa G i izraqunati razliku n − k. ¤ 11.4.2. Dominirajui skup. Neka je G = (V, E) neusmereni graf. Dominirajui skup je skup D ⊂ V , takav da je svaki qvor G u D, ili je susedan bar jednom qvoru iz D. Problem. Dat je neusmereni graf G = (V, E) i prirodni broj k. Ustanoviti da li u G postoji dominirajui skup sa najvixe k qvorova. Teorema 11.5. Problem dominirajui skup je NP-kompletan. Dokazatel~stvo. Problem dominirajui skup je u klasi NP, jer se za pretpostav eni podskup od najvixe k qvorova lako za polinomijalno vreme proverava da li je dominirajui skup. Izvexemo redukciju problema pokrivaq grana na problem dominirajui skup. Ako je zadat proizvo an ulaz (G, k)
274
11. NP-KOMPLETNOST
: pokrivaq grana V \ U od n − k qvorova
G: klika U od k qvorova
¯ G
t
t
t
t
t
t
Ris. 5. Redukcija problema klika na problem pokrivaq grana.
za problem pokrivaq grana, ci je konstruisati novi graf G koji ima dominirajui skup odreene veliqine akko G ima pokrivaq grana veliqine najvixe k. Pri tome se, bez smaea opxtosti, moe pretpostaviti da G nema izolovanih qvorova (oni ne utiqu na pokrivaq grana, ali moraju biti uk uqeni u dominirajui skup). Polazei od grafa G, dodajemo mu |E| novih qvorova i 2|E| novih grana na sledei naqin. Za svaku granu (v, w) iz G dodajemo novi qvor vw i dve nove grane (v, vw) i (w, vw) (slika 6). Drugim reqima, svaku granu transformixemo u trougao. Oznaqimo novi graf sa G . Graf G je lako konstruisati za polinomijalno vreme. 0
0
0
vw
t
v
tw
t
vz t vu z
t uv
t
t
t
u
t zw
Ris. 6. Redukcija problema pokrivaq grana na problem do-
minirajui skup. Tvrdimo da G ima pokrivaq grana veliqine m akko G ima dominirajui skup veliqine m. Neka je D dominirajui skup grafa G . Ako D sadri bilo koji od novih qvorova vw, onda se takav qvor moe zameniti bilo qvorom v , bilo qvorom w, posle qega e i novi skup biti dominirajui skup (v i w pokrivaju sve qvorove koje pokriva vw). Prema tome, bez smaea opxtosti moe se pretpostaviti da D sadri samo qvorove iz G. Meutim, poxto D 0
0
11.4. PRIMERI DOKAZA NP-KOMPLETNOSTI
275
"dominira" nad svim novim qvorovima, on mora za svaku granu iz G da sadri bar jedan en kraj, pa je zbog toga D istovremeno i pokrivaq grana grafa G. Obrnuto, ako je C pokrivaq grana u G, onda je svaka grana G susedna nekom qvoru iz C , pa je i svaki novi qvor iz G susedan nekom qvoru iz C . Stari qvorovi su takoe pokriveni qvorovima iz C , jer po pretpostavci qvorovi iz C pokrivaju sve grane. ¤ 11.4.3. 3 SAT. Problem 3 SAT je uproxena verzija obiqnog problema SAT. Ulaz za problem 3 SAT je KNF u kojoj svaka klauza ima taqno tri literala. Problem. Zadat je Bulov izraz u KNF, u kome svaka klauza sadri taqno tri literala. Ustanoviti da li je izraz zadovo iv. Teorema 11.6. Problem 3 SAT je NP-kompletan. Dokazatel~stvo. Ovaj problem je na prvi pogled lakxi od obiqnog problema SAT, zbog dopunskog ograniqea da svaka klauza ima po tri promen ive. Pokazaemo da algoritam koji rexava 3 SAT moe da se iskoristi da rexi obiqan problem SAT (odnosno da se SAT moe svesti na 3 SAT). Pre toga, jasno je da 3 SAT pripada klasi NP. Mogu se izabrati ("pogoditi") vrednosti promen ivih i za polinomijalno vreme proveriti da li je izraz taqan. Neka je E proizvo an ulaz za SAT. Svaku klauzu u E zameniemo sa nekoliko klauza od po taqno tri literala. Neka je C = (x + x + · · · + x ) proizvo na klauza iz E, takva da je k ≥ 4. Ovde je zbog udobnosti sa x oznaqen literal, odnosno bilo promen iva, bilo negacija promen ive. Pokazaemo kako se C moe ekvivalentno zameniti sa nekoliko klauza od po taqno tri literala. Ideja je uvesti nove promen ive y , y , . . . , y , koje klauzu transformixu u deo ulaza za 3 SAT, ne meajui zadovo ivost izraza. Za svaku klauzu iz E uvode se nove, razliqite promen ive; C se zameuje konjunkcijom klauza C , tako da je 0
1
2
k
i
1
2
k−3
0
C 0 = (x1 +x2 +y1 )(x3 +¯ y1 +y2 )(x4 +¯ y2 +y3 ) · · · (xk−2 +¯ yk−4 +yk−3 )(xk−1 +xk +¯ yk−3 ).
Tvrdimo da je izraz, dobijen od E zamenom C sa C , zadovo iv akko je zadovo iv izraz E. Ako je izraz E zadovo iv, onda bar jedan od literala x mora imati vrednost 1. U tom sluqaju se mogu izabrati vrednosti promen ivih y u C tako da sve klauze u C budu taqne. Na primer, ako je x = 1, onda se moe staviti y = 1 (xto qini taqnom prvu klauzu), y = 0 (druga klauza je taqna zbog x = 1), i y = 0 za sve i > 2. Uopxte, ako je x = 1, onda stav amo y = y = · · · = y = 1 i y = y = · · · = y = 0, xto obezbeuje da bude C = 1. Obrnuto, ako izraz C ima vrednost 1, tvrdimo da bar jedan od literala x mora imati vrednost 1. Zaista, ako bi svi literali x imali vrednost 0, onda bi izraz C imao istu taqnost kao i izraz C = (y ) · (¯ y + y ) · (¯ y + y ) · · · (¯ y +y ) · (¯ y ), koji oqigledno nije zadovo iv (da bi bilo C = 1, moralo bi da bude redom y = 1, pa y = 1, itd, y = 1, y = 0, i y = 1, xto je kontradikcija). 0
i
0
i
0
3
1
2
3
1
0
i
2
i
i−2
i
00
k−3
1
k−3
2
2 00
k−3
0
i
k−3
0
i
1
i−1
3
k−4
k−3
k−3
1
2
276
11. NP-KOMPLETNOST
Pomou ove redukcije sve klauze sa vixe od tri literala mogu se zameniti sa nekoliko klauza od po taqno tri literala. Ostaje da se transformixu klauze sa jednim ili dva literala. Klauza oblika C = (x + x ) zameuje se ekvivalentnom izrazom 1
2
C 0 = (x1 + x2 + z)(x1 + x2 + z¯),
gde je z nova promen iva. Konaqno, klauza oblika C = x moe se zameniti izrazom C = (x + y + z)(x + y¯ + z)(x + y + z¯)(x + y¯ + z¯), u kome su y i z nove promen ive. Prema tome, proizvo ni ulaz za problem SAT moe se svesti na ulaz za problem 3 SAT, tako da je prvi izraz zadovo iv akko je zadovo iv drugi. Jasno je da se ova redukcija izvodi za polinomijalno vreme. ¤ 11.4.4. Klike. Problem klika definisan je u ode ku 11.4.1, u kome je razmatran problem pokrivaq grana. Problem. Dat je neusmereni graf G = (V, E) i prirodni broj k. Ustanoviti da li G sadri kliku veliqine bar k. Teorema 11.7. Problem klika je NP-kompletan. Dokazatel~stvo. Problem klika je u klasi NP, jer se za svaki pretpostav eni podskup od k qvorova za polinomijalno vreme moe proveriti da li je klika. Pokazaemo sada da se problem SAT moe svesti na problem klika. Neka je E proizvo ni Bulov izraz u KNF, E = E ·E · · · E . Posmatrajmo, na primer, klauzu E = (x + y + z + w). oj pridruujemo "kolonu" od qetiri qvora, oznaqena literalima iz E (bez obzira xto se neki od ih moda pojav uju i u drugim klauzama). Drugim reqima, graf G koji konstruixemo imae po jedan qvor za svaku pojavu bilo koje promen ive. Ostaje pitae kako povezati ove qvorove, tako da G sadri kliku veliqine bar k akko je izraz E zadovo iv. Primetimo da se vrednost k moe izabrati proizvo no, jer je potrebno svesti problem SAT na problem klika, odnosno rexiti problem SAT koristei algoritam za rexavae problema klika. Naravno, algoritam za rexavae problema klika mora da radi za svaku vrednost k. Ovo je vana fleksibilnost, koja se qesto koristi u dokazima NP-kompletnosti. U ovom sluqaju za k emo izabrati vrednost jednaku broju klauza m. Grane u grafu G mogu se zadati na sledei naqin. Qvorovi iz iste kolone (odnosno qvorovi pridrueni literalima iz iste klauze) ne povezuju se granama. Qvorovi iz razliqitih kolona su skoro uvek povezani: izuzetak je sluqaj dva qvora od kojih jedan odgovara promen ivoj, a drugi komplementu te iste promen ive. Primer grafa koji odgovara izrazu 1
0
1
1
1
1
1
2
m
i
i
E = (x + y + z¯) · (¯ x + y¯ + z) · (y + z¯)
prikazan je na slici 7. Jasno je da se G moe konstruisati za polinomijalno vreme.
11.4. PRIMERI DOKAZA NP-KOMPLETNOSTI x u
277
x ¯ u uy
y u
y¯ u u z¯
z¯ u
z u
Ris. 7. Redukcija problema SAT sa ulazom (x + y + z¯) · (¯x +
na problem klika. Tvrdimo da G ima kliku veliqine bar m, akko je izraz E zadovo iv. Najpre zapaamo da zbog konstrukcije maksimalna klika ne moe imati vixe od m qvorova, nezavisno od E. Pretpostavimo da je izraz E zadovo iv. Tada postoji takvo dode ivae vrednosti promen ivim, da u svakoj klauzi postoji bar jedan literal sa vrednoxu 1. Qvor koji odgovara tom literalu prik uquje se kliki (ako ima vixe takvih literala, bira se proizvo an od ih). Dobijeni podgraf jeste klika, jer jedini naqin da dva qvora iz razliqitih kolona ne budu povezana je da jedan od ih bude komplement drugog | xto je nemogue, jer je svim izabranim literalima dode ena vrednost 1. Obrnuto, pretpostavimo da G sadri kliku veliqine bar m. Klika mora da sadri taqno jedan qvor iz svake kolone (jer po konstrukciji qvorovi iz iste kolone nisu povezani). Odgovarajuim literalima dode ujemo vrednost 1. Ako na ovaj naqin nekoj promen ivoj nije dode ena vrednost, to se moe uqiniti na proizvo an naqin. Izvdeno dode ivae vrednosti promen ivima je neprotivreqno: ako bi nekoj promen ivoj x i enom komplementu x¯, uk uqenim u kliku, istovremeno bila dode ena vrednost 1, to bi znaqilo da odgovarajui qvorovi (po konstrukciji) nisu povezani | suprotno pretpostavci da su oba qvora u kliki. ¤ 11.4.5.(ili3-obojivost. Neka je G = (V, E) neusmereni graf. Ispravno bojee samo bojee) grafa G je takvo pridruivae boja qvorovima, da je svakom qvoru pridruena neka boja, a da su susednim qvorovima uvek pridruene razliqite boje. Problem (3-obojivost ). Dat je neusmereni graf G = (V, E). Ustanoviti da li se G moe obojiti sa tri boje. Teorema 11.8. Problem 3-obojivost je NP-kompletan. Dokazatel~stvo. Problem 3-obojivost pripada klasi NP, jer se moe pretpostaviti proizvo no bojee grafa sa 3 boje, a zatim za polinomijalno y¯ + z) · (y + z¯)
278
11. NP-KOMPLETNOST
vreme proveriti da li je pretpostav eno bojee ispravno. Izvexemo redukciju problema 3 SAT na problem 3-obojivost. Dokaz je nexto komplikovaniji iz dva razloga. Najpre, problemi se odnose na razliqite objekte | Bulove izraze u KNF, odnosno grafove. Drugo, ne moe se prosto zameniti jedan objekat (na primer qvor ili grana) drugim (na primer klauzom); mora se voditi raquna o kompletnoj strukturi. Ideja je da se iskoriste sastavni elementi, koji se povezuju u celinu. Neka je E proizvo an ulaz za problem 3 SAT. Treba konstruisati graf G, tako da je izraz E zadovo iv akko je G 3-obojiv. Najpre konstruixemo osnovni trougao M . Poxto je M trougao (kompletni graf sa tri qvora), za egovo bojee potrebne su taqno tri boje. Oznaqimo te boje sa T (taqno), F (netaqno) i A, videti doi trougao na slici 8. Pored toga, za svaku promen ivu x dodajemo novi trougao M , qije qvorove oznaqavamo sa x, x¯ i A, pri qemu se qvor oznaqen sa A poklapa sa qvorom iz M sa istom oznakom. Prema tome, ako se u izrazu pojav uje k promen ivih, imamo k + 1 trouglova sa zajedniqkim qvorom A (slika 8). Ovo obezbeuje da, ako je, na primer, qvor x obojen bojom T , onda qvor x¯ mora biti obojen bojom F (jer su oba qvora susedna qvoru obojenom bojom A), i obrnuto. Ovo je u skladu sa znaqeem x¯. x
x
x ¯
t
t
y¯ t y t
tz t z¯
t A
t T
t F
Ris. 8. Prvi deo konstrukcije za redukciju 3 SAT na 3obojivost grafa. Potrebno je dodati uslov, koji bi obezbeivao da u svakoj klauzi bar jedan literal ima vrednost 1. To se moe obezbediti na sledei naqin. Pretpostavimo, na primer, da se radi o klauzi (x + y + z). Ovde se x, y, z mogu smatrati literalima, tj. nedostatak negacija nad simbolima x, y, z ne smauje opxtost razmatraa. Za ovu klauzu uvodimo xest novih qvorova i povezujemo ih sa postojeim qvorovima na naqin prikazan na slici 9. Nazovimo tri nova qvora povezana sa T i x, y ili z spo axim qvorovima (oznaqeni su sa O na slici), a tri nova qvora u trouglu | unutraxim qvorovima (oznaqeni su sa I na slici). Tvrdimo da ova konstrukcija obezbeuje (ako je mogue bojee sa tri boje) da bar jedan od qvorova x, y ili z mora biti obojen bojom T . Ni jedan od qvorova x, y, z ne moe biti obojen bojom A, jer su svi oni povezani sa qvorom A (videti sliku 8). Ako bi sva tri qvora x, y, z bili obojeni bojom F , onda bi tri nova spo axa qvora povezana sa ima morali biti obojeni
11.4. PRIMERI DOKAZA NP-KOMPLETNOSTI
279
bojom A, pa se unutraxi trougao ne bi mogao obojiti sa tri boje! Kompletan graf koji odgovara izrazu (¯x + y + z¯) · (¯x + y¯ + z) prikazan je na slici 10. x
T
t
t
tO tI tI
It y
t Ot
tO
t
z
t
t T
T
Ris. 9. Podgrafovi koji odgovaraju klauzama u redukciji 3 SAT
na 3-obojivost.
t
tx
t
t t t
y t
y¯ t
t
t z¯ t
t x ¯
t tz
t A
t
t
t t
tF
t
T
Ris. 10. Graf koji odgovara izrazu (¯x + y + z¯) · (¯x + y¯ + z) u redukciji 3 SAT na 3-obojivost. Sada moemo da kompletiramo dokaz, i to u dva smera: (1) ako je izraz E zadovo iv, G se moe obojiti sa tri boje, i (2) ako se G moe obojiti sa tri boje, onda je izraz E zadovo iv. Ako je izraz E zadovo iv, onda postoji takvo dode ivae vrednosti promen ivim, da u svakoj klauzi bar jedan literal ima vrednost 1. Obojimo qvorove grafa u skladu sa ihovim vrednostima (sa T ako je vrednost 1, odnosno sa F u protivnom). Trougao M obojen je bojama T , F i A na opisani naqin. U podgrafu koji odgovara klauzi bar jedan literal ima vrednost 1; odgovarajui spo axi qvor bojimo sa F , a ostale spo axe
280
11. NP-KOMPLETNOST
qvorove sa A, posle qega je bojee unutraxih qvorova lako izvesti. Prema tome, G se moe obojiti sa tri boje. Obrnuto, ako se G moe obojiti sa tri boje, nazovimo boje u skladu sa bojeem trougla M (koji mora biti obojen sa tri boje). Zbog trouglova na slici 8, boje promen ivih omoguuju neprotivreqno dode ivae vrednosti promen ivim. Konstrukcija sa slike 9 obezbeuje da je bar jedan literal u svakoj klauzi obojen sa T . Konaqno, jasno je da se graf G moe konstruisati za polinomijalno vreme, qime je dokaz zavrxen. ¤ 11.4.6. Opxta zapaaa. Razmotriemo ukratko nekoliko opxtih metoda za dokazivae NP-kompletnosti nekog problema Q. Prvi uslov | da Q pripada klasi NP | obiqno se lako dokazuje (ne uvek). Posle toga treba izabrati neki problem za koji se zna da je NP-kompletan, a za koji izgleda da je povezan, ili sliqan sa Q. Texko je definisati ovu "sliqnost", jer ponekad izabrani problem i Q izgledaju jako razliqito (na primer, problem klika i SAT). Izbor pravog problema koji e biti sveden na Q je ponekad izuzetno teak, i zahteva veliko iskustvo. Mora se pokuxati sa nekoliko redukcija, dok se ne doe do pogodnog problema. Vano je da se izvede redukcija na Q, polazei od proizvo nog ulaza poznatog NP-kompletnog problema. Najqexa grexka u ovakvim dokazima je izvodjee redukcije u obrnutom smeru. Pravi smer obezbeuje npr. sledee pravilo: treba obezbediti da se poznati NP-kompletan problem moe rexiti crnom kutijom, koja izvrxava algoritam za rexavae Q. To moda malo protivreqi intuiciji. Prirodno bi bilo, pokuxati sa rexavaem problema Q, poxto je to zadati problem. Ovde pak pokuxavamo da reximo drugi problem (poznati NP-kompletan problem), koristei rexee problema Q. Mi i ne pokuxavamo da reximo Q! Postoji vixe "stepeni slobode" koji se mogu koristiti pri redukciji. Na primer, ako Q sadri neki parametar, onda se egova vrednost moe fiksirati na proizvo an naqin (suprotno od parametara u problemu koji se svodi na Q, koji se ne smeju fiksirati!). Poxto je Q samo alat za rexavae poznatog NP-kompletnog problema, moe se iskoristiti na proizvo an naqin. Pored fiksiraa parametara, mogu se koristiti restrikcije Q na specijalne sluqajeve dobijene i na druge naqine. Na primer, mogu se koristiti samo neki tipovi ulaza za Q (ako se radi o grafovima | bipartitni grafovi, stabla i sliqno). Drugi vaan izvor fleksibilnosti je qienica da je efikasnost redukcije nebitna | dovo no je da se redukcija moe izvesti za polinomijalno vreme. Mogu se ignorisati ne samo konstante, tako xto bi se, na primer, duplirala veliqina problema: isto tako moe se i kvadrirati veliqina problema! Moe se uvesti polinomijalno mnogo novih promen ivih, moe se zameniti svaki qvor u grafu novim velikim grafom i sliqno. Ne postoji potreba za efikasnoxu (sve dok se ostaje u granicama polinomijalnog), jer svrha redukcije nije da se transformixe u algoritam. Postoje neke uobiqajene tehnike za dobijae redukcija. Najjednostavnija je dokazati da je poznati NP-kompletan problem specijalan sluqaj problema
11.4. PRIMERI DOKAZA NP-KOMPLETNOSTI
281
Q. Ako je tako, dokaz je direktan, jer je rexavae Q istovremeno i rexavae poznatog NP-kompletnog problema. Posmatrajmo, na primer, problem pokrivae skupova pokrivae skupova. Ulaz je kolekcija podskupova S , S , . . . , S zadatog skupa U i prirodni broj k. Problem je ustanoviti da li postoji podskup W ⊆ U sa najvixe k elemenata, koji sadri bar po jedan elemenat svakog od podskupova S . Zapaamo da je problem pokrivaq grana specijalni sluqaj problema pokrivaa skupova u kome U odgovara skupu qvorova V , a svaki skup S odgovara jednoj grani i sadri dva qvora kojima je ta grana susedna. Prema tome, ako znamo da reximo problem pokrivaa skupova za proizvo ne skupove, onda moemo da reximo i problem pokrivaq grana. Moramo, meutim, biti pa ivi kad koristimo ovaj pristup. U opxtem sluqaju nije taqno da dodavae novih zahteva qini problem teim. Posmatrajmo problem pokrivaq grana. Pretpostavimo da smo dodali ograniqenje da pokrivaq grana ne sme da sadri dva susedna qvora. Drugim reqima, traimo mali skup qvorova koji je istovremeno i pokrivaq grana i nezavisan skup (nezavisan skup je podskup qvorova grafa, takav da izmeu egova dva proizvo na elementa ne postoji grana). Ovaj problem je na prvi pogled tei i od problema pokrivaq grana i od problema nezavisan skup, jer treba brinuti o vixe zahteva. Ispostav a se, meutim, da je ovo lakxi problem, i da se moe rexiti za polinomijalno vreme (videti zadatak 6.65). Razlog ovoj pojavi je u tome xto dopunski zahtevi toliko suavaju familiju podskupova kandidata, da se minimum lako nalazi. Druga relativno jednostavna tehnika koristi lokalne redukcije. Objekat, ulaz za jedan problem, preslikava se u objekat koji je ulaz za drugi problem. Preslikavae se izvodi na lokalni naqin, nezavisno od ostalih objekata. Dokaz NP-kompletnosti problema dominirajueg skupa izveden je na ovaj naqin. Svaka grana u jednom grafu zameena je trouglom u drugom grafu. Potexkoa sa ovom tehnikom je kako na najbo i naqin definisati odgovarajue objekte. Najkomplikovanija tehnika je upotreba sastavnih elemenata { blokova, kao xto je to uqieno pri dokazu NP-kompletnosti problema 3-obojivost. Blokovi obiqno zavise jedan od drugog, pa je ihovo nezavisno projektovae neizvod ivo. Moraju se imati na umu svi ci evi problema, da bi se moglo koordinirati projektovae razliqitih blokova. 11.4.7. Jox neki NP-kompletni problemi. Sledi spisak sadri jox nekoliko NP-kompletnih problema, koji mogu biti korisni kao polazna osnova za nove redukcije. Pronalaee pravog problema za redukciju obiqno je vixe od polovine dokaza NP-kompletnosti. Hamiltonov ciklus: Hamiltonov ciklus u grafu je prost ciklus koji sadri svaki qvor grafa taqno jednom. Problem je ustanoviti da li zadati graf sadri Hamiltonov ciklus. Problem je NP-kompletan i za neusmerene i za usmerene grafove. (Redukcija problema pokrivaq grana.) Hamiltonov put: Hamiltonov put u grafu je prosti put koji sadri svaki qvor grafa taqno jednom. Problem je ustanoviti da li zadati graf 1
i
i
2
n
282
11. NP-KOMPLETNOST
sadri Hamiltonov put. Problem je NP-kompletan i za neusmerene i usmerene grafove. (Redukcija problema pokrivaq grana.) Problem trgovaqkog putnika: Neka je zadat teinski kompletan graf G i broj W . Ustanoviti da li u G postoji Hamiltonov ciklus sa zbirom teina grana ≤ W . (Direktna redukcija problema Hamiltonov ciklus.) Nezavisan skup: Nezavisan skup u grafu je podskup qvorova grafa, takav da izmeu egova dva proizvo na elementa ne postoji grana. Ako je zadat graf G i prirodni broj k, ustanoviti da li G sadri nezavisni skup sa bar k qvorova. (Direktna redukcija problema klika.) 3-dimenzionalno uparivae: Neka su X , Y i Z disjunktni skupovi od po k elemenata, i neka je M zadati skup trojki (x, y, z) takvih da je x ∈ X , y ∈ Y i z ∈ Z . Problem je ustanoviti da li postoji takav podskup skupa M koji svaki elemenat sadri taqno jednom. Odgovarajui dvodimenzionalni problem uparivaa je obiqan problem bipartitnog uparivaa. (Redukcija problema 3 SAT.) Particija: Ulaz je skup X qijem je svakom elementu x pridruena egova veliqina s(x). Problem je ustanoviti da li je mogue podeliti skup na dva disjunktna podskupa sa jednakim sumama veliqina. (Redukcija problema 3-dimenzionalno uparivae.) Primetimo da se ovaj i sledei problem mogu efikasno rexiti algoritmom Ranac iz ode ka 4.10, ako su veliqine mali celi brojevi. Meutim, poxto je veliqina ulaza srazmerna broju bita potrebnih da se predstavi ulaz, ovakvi algoritmi (koji se zovu pseudopolinomijalni algoritmi) su ustvari eksponencijalni u odnosu na veliqinu ulaza. Problem ranca: Ulaz su dva broja S, V i skup X qijem je svakom elementu x pridruena veliqina s(x) i vrednost v(x). Problem je ustanoviti da li postoji podskup B ⊆ X sa ukupnom veliqinom ≤ S i ukupnom vrednoxu ≥ V . (Redukcija problema particije.) Problem pakovaa: Ulaz je niz brojeva a , a , . . . , a i dva broja b, k. Problem je ustanoviti da li se ovaj skup moe razloiti u k podskupova, tako da je suma brojeva u svakom podskupu ≤ b. (Redukcija problema particije.) 1
2
n
11.5. Tehnike za rad sa NP-kompletnim problemima
Pojam NP-kompletnosti je osnova za elegantnu teoriju koja omoguuje prepoznavae problema za koje najverovatnije ne postoji polinomijalni algoritam. Meutim, dokazivaem da je problem NP-kompletan, sam problem nije eliminisan! I da e je potrebno rexiti ga. Tehnike za rexavae NP-kompletnih problema su ponekad drugaqije od tehnika koje smo do sada razmatrali. Ni jedan NP-kompletan problem se (najverovatnije) ne moe rexiti taqno i kompletno algoritmom polinomijalne vremenske sloenosti. Zbog toga smo prinueni na kompromise. Najqexi kompromisi odnose se na optimalnost, garantovanu efikasnost, ili kompletnost rexea. Postoje i druge alternative, od kojih svaka ponexto rtvuje. Isti algoritam se moe koristiti u razliqitim situacijama, primeujui razliqite kompromise.
11.5. TEHNIKE ZA RAD SA NP-KOMPLETNIM PROBLEMIMA
283
Algoritam koji ne daje uvek optimalan (ili taqan) rezultatu zove se priblian algoritam. Posebno su zanim ivi priblini algoritmi koji mogu da garantuju granicu za stepen odstupaa od taqnog rexea. Nexto kasnije videemo tri primera takvih algoritama. U ode ku 5.8 razmatrali smo probabilistiqke algoritme koji mogu da pogrexe. Najpoznatiji u toj klasi je algoritam za prepoznavae prostih brojeva. Za problem prepoznavaa prostih brojeva se ne zna da li je u P, ali se smatra da nije NP-kompletan. Ovde se neemo baviti algoritmima za prepoznavae prostih brojeva, jer zahtevaju predznae iz teorije brojeva. Raxireno je verovae da se NP-kompletni problemi ne mogu rexiti algoritmom polinomijalne vremenske sloenosti, kod kojih je verovatnoa grexke mala za sve ulaze. Takvi algoritmi su po svemu sudei efikasni za probleme, za koje se ne zna da li su u klasi P, ali se ne veruje da su NP-kompletni. Takvi problemi nisu qesti. Probabilistiqki algoritmi se mogu koristiti kao deo drugih strategija | na primer, kao deo priblinih algoritama. Drugi kompromis mogu je u vezi sa zahtevom da polinomijalno bude vreme izvrxavaa u najgorem sluqaju. Moe se pokuxati sa rexavaem NP-kompletnih problema za polinomijalno srede vreme. Potexkoa sa ovim pristupom je kako definisati proseqno vreme. Na primer, texko je isk uqiti ulaze za koje je konkretan problem trivijalan (kao xto je graf koji ima samo izolovane qvorove) iz izraqunavaa proseka. Takvi trivijalni ulazi mogu znatno da utiqu na prosek. Algoritmi predvieni za pojedine tipove sluqajnih ulaza mogu da budu korisni ako je stvarna raspodela verovatnoa ulaza u skladu sa pretpostav enom. Meutim, obiqno je nalaee taqne raspodele je obiqno vrlo texko. Najtei deo posla pri konstrukciji algoritama, koji u proseku dobro rade, je najqexe ihova analiza. Konaqno, mogu se praviti kompromisi u vezi sa kompletnoxu algoritama; naime, moe se dozvoliti da algoritam radi efikasno samo za neke specijalne ulaze. Na primer, problem pokrivaq grana moe se rexiti za polinomijalno vreme za bipartitne grafove. Prema tome, kad se formulixe apstraktni problem polazei od situacije iz realnog ivota, treba obezbediti da svi dopunski uslovi koje ulaz zadovo ava budu uk uqeni u apstraktnu definiciju. Drugi primer su algoritmi sa eksponencijalnom vremenskom sloenoxu, koji se ipak mogu izvrxavati za male ulaze, xto je qesto potpuno zadovo avajue. U ovom ode ku opisaemo vixe ovakvih tehnika i ilustrovati ih primerima. Zapoqiemo sa dve opxte i korisne tehnike koje se zovu pretraga i granae sa odsecaem. Ove tehnike su sliqne. Mogu se koristiti kao osnova za priblini algoritam, ili kao taqan algoritam za male ulaze. Na kraju navodimo nekoliko primera priblinih algoritama. 11.5.1. Pretraga i granae sa odsecaem. Ove tehnike opisaemo na jednom primeru. Razmotrimo problem 3-bojee, odnosno dode ivaa boja qvorovima grafa uz izvesna ograniqea. Primer je iz klase problema nalaea optimalne vrednosti (broja boja u ovom sluqaju) za n parametara (ovde boja
284
11. NP-KOMPLETNOST
qvorova). U sluqaju problema 3-bojee svaki parametar ima tri mogue vrednosti, xto odgovara trima bojama. Prema tome, broj potencijalnih rexea je 3 , jer je to ukupan broj naqina na koje se n qvorova mogu obojiti sa tri boje. Naravno, sem ako graf nema grana, broj ispravnih bojea moe da bude znatno mai od 3 , jer grane nameu ograniqea na mogua bojea. Da bi se ispitali svi mogui naqini bojea qvorova, moe se zapoqeti dode ivaem proizvo ne boje jednom od qvorova, a zatim nastaviti sa bojeem ostalih qvorova, vodei raquna o ograniqeima koje nameu grane | da susedni qvorovi moraju biti obojeni razliqitim bojama. Pri bojeu qvora, pokuxava se sa svim moguim bojama, koje su konzistentne sa prethodno obojenim qvorovima. Ovaj proces moe se obaviti algoritmom obilaska stabla, koji predstav a suxtinu pretrage i granaa sa odsecaem. Da bismo razlikovali qvorove grafa i stabla, qvorove stabla zvaemo temenima. Koren stabla odgovara poqetnom stau problema, a svaka grana odgovara nekoj odluci o vrednosti nekog parametra. Oznaqimo tri boje sa C(rveno), P(lavo) i Z(eleno). Na poqetku se mogu izabrati neka dva susedna qvora v i w, i obojiti recimo sa P i Z. Poxto se oni ionako moraju obojiti razliqitim bojama, nije bitno koje e boje biti izabrane (konaqno bojee se uvek moe ispermutovati), pa se zato moe zapoqeti sa bojeem dva umesto jednog qvora. Bojee ova dva qvora odgovara poqetnom stau problema, koje je pridrueno korenu. Stablo se konstruixe u toku samog obilaska. U svakom temenu t stabla bira se sledei qvor grafa za bojee, i dodaje jedan, dva ili tri sina temenu t, zavisno od broja boja kojima se moe obojiti qvor u. Na primer, ako je u prvi izabrani qvor (posle v i w), a u je susedan qvoru w (koji je ve obojen bojom Z), onda postoje dve mogunosti za bojee u, P i C, pa se korenu dodaju dva odgovarajua sina. Zatim se bira jedan od ova dva sina i proces se nastav a. Kad se jedan qvor oboji, smauje se broj mogunosti za bojee ostalih qvorova; prema tome, broj sinova pokazuje tendenciju opadaa kako se napreduje u dubinu stabla. U sluqaju da su obojeni svi qvorovi grafa, problem je rexen. Verovatnije je, meutim, da emo naii na qvor koji se ne moe obojiti (jer ima tri susedna qvora koji su ve obojeni razliqitim bojama). U tom trenutku qinimo korak nazad | vraamo se uz stablo (ka niim nivoima) i pokuxavamo sa drugim sinovima. Primer grafa, i stabla koje odgovara rexavau problema 3-bojee na emu, prikazan je na slici 11. Primetimo da u ovom sluqaju, kad se fiksiraju boje qvorova 1 i 2, za bojee ostalih qvorova postoji samo jedan naqin, do koga se dolazi krajim desnim putem kroz stablo na slici. Algoritam za obilazak stabla moe se formulisati indukcijom. Potrebno je pojaqati induktivnu hipotezu, tako da obuhvati bojee grafova qiji su neki qvorovi ve obojeni. Drugim reqima, induktivna hipoteza treba da obuhvati bojee ne samo neobojenih grafova, nego i dovrxavae zapoqetog bojea. Induktivna hipoteza. Umemo da zavrximo 3-bojee grafa koji ima mae od k neobojenih qvorova, ili da za takve grafove ustanovimo da se ne mogu obojiti sa tri boje. n
n
11.5. TEHNIKE ZA RAD SA NP-KOMPLETNIM PROBLEMIMA 1P, 2Z
4 s
s
3C
3P
s
3 s
s5
4Z
2 s
1 s
285
s 4P
s
4C
s
(a)
4Z
s
(b)
s 5C
s
Ris. 11. Primer primene pretrage na 3-bojee grafa.
Ako je dat graf sa k neobojenih qvorova, biramo jedan od neobojenih qvorova i pronalazimo sve mogue boje kojima se on moe obojiti. Ako su sve boje ve iskorixene za susede tog qvora, zapoqeto 3-bojee se ne moe kompletirati. U protivnom, qvor bojimo jednom od moguih boja (jednom po jednom) i rexavamo preostale probleme (koji imaju po k −1 neobojeni qvor) indukcijom. Algoritam je prikazan na slici 12. Algoritam Ulaz: (neusmereni graf) i (skup ve obojenih qvorova). je obiqno na poqetku prazan skup Izlaz: Pridruivae jedne od tri boja svakom qvoru . 3 − bojenje(G, var U );
G = (V, E)
U
{U
}
G
begin
"bojee je zavrxeno"; halt prekid svih rekurzivnih poziva} else izabrati neki qvor v koji nije u skupu U ; for C := 1 to 3 do if ni jedan sused v nije obojen bojom C then dodaj qvor v obojen bojom C skupu U ; if U = V then print {
3 − bojenje(G, U )
end
Ris. 12. Algoritam 3 − bojenje.
Nije texko nai primer grafa i redosled egovih qvorova, takav da se pri egovom bojeu dobija stablo sa eksponencijalnim brojem temena (videti zadatak 11.11). Ovo je qesta situacija u algoritmima pretrage. Jedino se moemo nadati da emo, ako stablo budemo obilazili na pogodan naqin, na rexee brzo naii. Algoritam koji smo opisali ne precizira naqin izbora
286
11. NP-KOMPLETNOST
sledeeg qvora. Poxto se kao sledei moe izabrati proizvo an qvor, imamo izvesnu fleksibilnost, koja se moe iskoristiti za formirae odgovarajue heuristike. Nexto kasnije vratiemo se na ovo pitae. Granae sa odsecaem je varijacija pretrage, koja se moe primeniti ako se trai minimum (ili maksimum) neke ci ne funkcije. Posmatrajmo opxti problem bojea grafa: ci je pronai najmai broj boja potreban za bojee zadatog grafa, a ne samo ustanoviti da li je graf mogue obojiti sa tri boje. Moe se formirati stablo sliqno kao za 3-bojee, ali broj sinova svakog qvora moe da bude vrlo veliki. Svaki novi qvor moe se obojiti nekom od ve korixenih boja (sem ako je neki od egovih suseda ve obojen tom bojom), ili novom bojom. Prema tome, algoritam za 3-bojee mea se na dva mesta: (1) konstanta 3 zameuje se brojem do sada korixenih boja, i (2) algoritam se ne zavrxava u trenutku kad je V = U , jer je mogue da postoji bo i naqin da se oboji graf. Potexkoe izaziva qienica da u algoritmu dolazi do vraaa unazad samo kad se doe do lista u stablu (odnosno kad je V = U ), jer se nova boja uvek moe dodeliti qvoru. Prema tome, skoro je sigurno da e ovakav algoritam biti vrlo neefikasan (sem ako je graf vrlo gust). Efikasnost algoritma moe se pobo xati pomou sledeeg zapaaa, koje je u osnovi metoda grananja sa odsecaem. Pretpostavimo da smo proxli deo stabla do nekog lista i tako pronaxli ispravno bojee sa k boja. Pretpostavimo da e da smo posle vraaa unazad krenuli drugim putem, i tako doxli do qvora koji zahteva uvoee (k + 1)-e boje. U tom trenutku moe se napraviti korak nazad, jer je ve poznato bo e rexee. Prema tome, k slui kao granica za pretragu. U svakom temenu stabla izraqunavamo dou granicu za najbo e rexee na koje se moe naii meu sledbenicima tog temena. Ako je ta doa granica vea od nekog ve naenog rexea, qinimo korak nazad. Jedan od naqina da se algoritam granaa sa odsecaem uqini efikasnim je izraqunavae dobrih doih granica (ili gorih granica, ako je ci maksimizirati ci nu funkciju). Drugi vaan elemenat je nalaee dobrog redosleda obilaska, koji omoguuje brzo pronalaee dobrih rexea, a time i ranije napuxtae neperspektivnih podstabala. Ilustrovaemo ovu ideju problemom celobrojnog linearnog programiranja, spomenutog u ode ku 10.3. Problem je sliqan linearnom programiranju, ali ima dopunsko ograniqee da promen ive mogu uzimati samo celobrojne vrednosti. Neka je x = (x , x , . . . , x ) vektor kolona promen ivih, neka su a , a , . . . , a vektori vrste realnih brojeva jednake duine n, i neka su b , b , . . . , b , c , c , . . . , c realni brojevi. Problem je maksimizirati vrednost 1
1
2
2
2
T
k
linearne ci ne funkcije 1
n
k
1
2
n
z=
n X
ci xi
pod uslovom da su koordinate vektora x celi brojevi i i=1
aj · x ≤ bj ,
j = 1, 2, . . . , k,
11.5. TEHNIKE ZA RAD SA NP-KOMPLETNIM PROBLEMIMA
287
pri qemu su svi simboli sem x konstante. Mnogi NP-kompletni problemi mogu se lako formulisati kao problemi celobrojnog linearnog programiraa (u nastavku emo videti jedan takav primer). Prema tome, celobrojno linearno programirae je NP-teak problem. Preciznije, problem je NP-kompletan, ali je dokaz da je taj problem u klasi NP nexto komplikovaniji. Pokazaemo sada kako se problem klika moe formulisati kao problem celobrojnog linearnog programiraa Pri tome razmatramo varijantu u kojoj se trai maksimalna klika, umesto da se proverava da li postoji klika zadate veliqine. Uvodimo n promen ivih x , x , . . . , x , koje odgovaraju qvorovima, tako da je x = 1 ako v pripada maksimalnoj kliki, odnosno x = 0 u protivnom. Ci na funkcija je 1
i
2
n
i
i
z = x1 + x2 + · · · + xn ,
jer je potrebno uk uqiti u kliku xto vei broj qvorova. Postoji po jedno ograniqee za svaki qvor 0 ≤ xi ≤ 1,
i = 1, 2, . . . , n,
i po jedno ograniqee za svaki par nesusednih qvorova x + x ≤ 1 za svaki par qvorova v , v takvih da (v , v ) ∈ / E. Prvi skup ograniqea ograniqava vrednosti promen ivih na 0 ili 1. Drugi skup ograniqea obezbeuje da se dva nesusedna qvora ne mogu istovremeno izabrati u kliku; prema tome, qvorovi koji su izabrani qine kliku. Ovakav problem celobrojnog linearnog programiraa moe se rexiti algoritmom granaa sa odsecaem, korixeem odgovarajueg linearnog programa (koji rexava isti problem, ali bez ograniqea celobrojnosti) za izraqunavae granica. Rexee linearnog programa moe se sastojati samo od celih brojeva; u tom sluqaju polazni problem je rexen. Meutim, verovatnije je da e u rexeu neke promen ive imati necelobrojne vrednosti. Pretpostavimo, na primer, da je rexee linearnog programa pridruenog problemu klika (0.1, 1, . . . , 0.5) i z = 7.8. Poxto linearni program maksimizira ci nu funkciju sa mae ograniqea od celobrojnog linearnog programa, maksimum koji on pronae je gora granica za maksimum koji moe da pronae celobrojni linearni program. Prema tome, ne moe se oqekivati pronalaee klike veliqine vee od 7. Ova informacija moe biti korisna prilikom pretrage. Kao i kod obiqne pretrage, biramo neke vrednosti parametara i napredujemo du stabla, pri qemu teme nie u stablu odgovara potproblemu polaznog problema. Na primer, potproblem moe da odgovara prik uqivau qvorova v, w kliki, i eliminisau iz e qvorova u, x, tj. pokuxava se sa nalaeem najvee klike sa v, w, a bez u, x. Ako se tom prilikom dobije rexee linearnog programa koje je mae od veliqine ve pronaene klike, onda qinimo korak nazad, i napuxtamo tu varijantu. To je suxtina metoda granaa i odsecaa. Pokuxavamo da naemo gore granice (ili doe, ako se ci na funkcija minimizira) koje e omoguiti odsecae neperspektivnih podstabala na xto niem nivou (xto blie korenu stabla). i
j
i
j
i
j
288
11. NP-KOMPLETNOST
Rezultat linearnog programa moe se iskoristiti i pri izboru redosleda pretrage. Na primer, ako je x = 1 u necelobrojnom rexeu, moe se pretpostaviti da je x = 1 i u celobrojnom rexeu. Ta pretpostavka ne mora biti taqna, ali je primer vrste heuristika koje traimo. Pokuxavamo da poveamo verovatnou brzog nalaea optimalnog rexea; pri tome je jasno da ne mogu sve takve odluke da budu "ispravne", jer je problem NP-kompletan. Moemo da stavimo x = 1, izmenimo u skladu sa tim ograniqea (npr. promenimo vrednosti promen ivih za sve qvorove nesusedne sa v na 0), i reximo rezultujui linearni program. Ako u nekom trenutku modifikovani linearni program ima maksimalnu vrednost z = a, pri qemu je a mae od veliqine najvee pronaene klike, ta grana se moe napustiti. Prema tome, linearni program koristi se na dva naqina: za dobijae gorih granica i time za napuxtae neperspektivinih podstabala (odsecae), odnosno za donoxea odluka o usmeravau pretrage. Oqekuje se da rexavanje potproblema koji "najvixe obeava", uqini nepotrebnim rexavae velikog dela drugih potproblema. Uqestanost odsecaa, odnosno eifkasnost celog algoritma, zavisi od heuristike za formirae potproblema i izbora narednog potproblema za ispitivae. Heuristika zavisi od konkretnog problema, i u ovoj oblasti sprovode se xiroka istraivaa. Algoritmi sa granaem i odsecaem garantuju pronalaee optimalnog rexea ako se svi potproblemi istrae ili "odseku". Ako izvrxavae traje predugo, moe se prekinuti, i tako dobiti aproksimaciju | najbo e rexee pronaeno do tog trenutka. Obilazak stabla moe se izvesti pretragom u dubinu, pretragom u xirinu ili nekom ihovom kombinacijom. Ekstremni primer ranijeg zavrxavaa pretrage je uzimae prvog puta (izabranog u skladu sa nekom heuristikom) koja vodi prihvat ivom rexeu (obiqno ono koje odgovara listu stabla) kao izlaza algoritma. Na primer, u algoritmu za bojee grafa, qvorovi se mogu bojiti redosledom prema rastuim stepenima; ideja je da se mae gubi na fleksibilnosti fiksiraem boje qvorova malog stepena. To je jednostavan pohlepni algoritam. 2
2
2
2
11.5.2. Priblini algoritmi sa garantovanim kvalitetom rexea. U ovom ode ku razmotriemo pribline algoritme za tri NP-kompletna algoritma: pokrivaq grana, pakovae i euklidski problem trgovaqkog putni-
ka. Sva tri algoritma imaju garantovani kvalitet rexea; drugim reqima, moe se dokazati da rexea koja oni daju nisu predaleko od optimalnih rexea. 11.5.2.1. Pokrivaq grana. Najpre emo razmotriti jednostavan priblini algoritam za nalaee pokrivaqa grana datog grafa. Algoritam garantuje nalaee pokrivaqa sa najvixe dva puta vixe qvorova nego u minimalnom pokrivaqu. Neka je G graf, i neka je M maksimalno uparivae u G. Poxto je M uparivae, egove grane nemaju zajedniqkih taqaka, a poxto je M maksimalno uparivae, sve ostale grane imaju bar jedan zajedniqki qvor sa nekom granom iz M .
11.5. TEHNIKE ZA RAD SA NP-KOMPLETNIM PROBLEMIMA
289
Teorema 11.9. Skup qvorova susednih granama maksimalnog uparivaa je pokrivaq grana, sa najvixe dva puta vixe qvorova nego xto ih ima minimalni pokrivaq. Dokazatel~stvo. Skup qvorova koji pripadaju M qini pokrivaq grana, jer je M maksimalno uparivae. Svaki pokrivaq grana mora da pokrije sve grane | specijalno, sve grane uparivaa M . Poxto je M uparivae, bilo koji qvor iz M moe da pokrije najvixe jednu granu uparivaa M . Prema tome, bar polovina qvorova iz M mora da pripada pokrivaqu grana. ¤ Maksimalno uparivae moe se nai prostim dodavaem grana sve dotle dok je to mogue (odnosno dok postoje neka dva neuparena, a susedna qvora). 11.5.2.2. Jednodimenzionalno pakovae. Jednodimenzionalni problem pakovaa odnosi se na pakovae objekata razliqite veliqine u kutije tako da se iskoristi najmai mogui broj kutija. Na primer, prilikom selidbe je ci preneti sve stvari, koristei kamion najmai mogui broj puta, pakujui stvari xto je mogue bo e. To je naravno trodimenzionalni problem; ovde emo se pozabaviti egovom jednodimenzionalnom verzijom. Zbog jednostavnosti se pretpostav a da svi sanduci imaju veliqinu 1. Problem. Neka je x , x , . . . , x skup realnih brojeva izmeu 0 i 1. Podeliti ih u najmai mogui broj podskupova, tako da suma brojeva u svakom podskupu bude najvixe 1. Na jednodimenzionalni problem pakovaa nailazi se, na primer, u problemima uprav aa memorijom, kad postoje zahtevi za dodelom memorijskih blokova razliqite veliqine, a dode ivae se vrxi iz nekoliko jednakih velikih blokova memorije. Jednodimenzionalni problem pakovaa je NP-kompletan. Jedna od moguih heuristika za rexavae ovog problema je staviti x u prvu kutiju, a zatim, za svako i, staviti x u prvu kutiju u kojoj ima dovo no mesta, ili zapoqeti sa novom kutijom, ako nema dovo no mesta ni u jednoj od korixenih kutija. Ovaj algoritam zove se prvi odgovarajui i, kao xto pokazuje sledea teorema, dovo no je dobar u najgorem sluqaju. Teorema 11.10. Algoritam prvi odgovarajui zahteva najvixe 2m kutija, gde je m najmai mogui broj kutija. Dokazatel~stvo. Po zavrxetku algoritma prvi odgovarajui ne postoje dve kutije sa iskorixeem maimPod 1/2. Prema tome, ako sa k oznaqimo broj upotreb enih kutija, bie m ≥ x > (k − 1)/2, odakle je k < 2m + 1, odnosno k ≤ 2m. ¤ Ispostav a se da je granica definisana ovom teoremom priliqno gruba. Konstanta 2 iz teoreme moe se smaiti na 1.7 posle nexto komplikovanije analize. Konstanta 1.7 ne moe se da e smaiti, jer postoje primeri u kojima algoritam prvi odgovarajui zahteva 1.7 puta vixe kutija od optimalnog algoritma. M
1
2
n
1
i
n i=1
i
290
11. NP-KOMPLETNOST
Opisani algoritam moe se jednostavno pobo xati. Do najgoreg sluqaja dolazi kad se mnogo malih brojeva pojav uje na poqetku. Umesto da se brojevi pakuju u redom kojim nailaze, oni se najpre sortiraju u nerastui niz. Promeeni algoritam zove se opadajui prvi odgovarajui, i u najgorem sluqaju troxi najvixe oko 1.22 puta vixe kutija od optimalnog algoritma (teoremu dajemo bez dokaza). Teorema 11.11. Algoritam opadajui prvi odgovarajui zahteva najvixe m + 4 kutija, gde je m najmai mogui broj kutija. Konstanta 11/9 je takoe najbo a mogua. Prvi odgovarajui i opadajui prvi odgovarajui su jednostavne heuristike. Postoje drugi metodi koji garantuju jox mae konstante. ihova analiza je u veini sluqajeva komplikovana. Strategije koje smo opisali tipiqne su za heuristiqke algoritme. One odraavaju prirodne pristupe, odnosno odgovaraju naqinu na koji bi neko ruqno rexavao ove probleme. Meutim, videli smo mnogo sluqajeva u kojima se direktni pristupi ponaxaju loxe za velike ulaze. Zbog toga je veoma vano analizirati ponaxae takvih algoritama. 11.5.2.3. Euklidski problem trgovaqkog putnika. Problem trgovaqkog putnika (TSP, skraenica od traveling salesman problem ) je vaan problem sa mnogo primena. Razmotriemo ovde varijantu TSP sa dopunskim ograniqeem da teine grana odgovaraju euklidskim rastojaima. Problem. Neka je C , C , . . . , C skup taqaka u ravni koje odgovaraju poloajima n gradova. Pronai Hamiltonov ciklus minimalne duine (marxrutu trgovaqkog putnika) meu ima. Problem je i da e NP-kompletan (ovo tvree navodimo bez dokaza), ali videemo da pretpostavka da su rastojaa euklidska omoguuje konstrukciju priblinog algoritma za egovo rexavae. Preciznije, ova pretpostavka moe se uopxtiti, zameujui je pretpostavkom da rastojaa zadovo avaju nejednakost trougla, odnosno da je rastojae izmeu dva qvora uvek mae ili jednako od duine proizvo nog puta izmeu ih preko ostalih qvorova. Najpre se konstruixe minimalno povezujue stablo (MCST; ovde su cene grana ihove duine), xto je mnogo lakxi problem (videti ode ak 6.6). Tvrdimo da cena stabla nije vea od duine najbo eg ciklusa TSP. Zaista, ciklus TSP sadri sve qvorove, pa ga uklaae jedne grane qini povezujuim stablom, qija cena je vea ili jednaka od cene MCST. Od povezujueg stabla se, meutim, ne dobija direktno ciklus TSP. Posmatrajmo najpre ciklus koji se dobija pretragom u dubinu ovog stabla (polazei od proizvo nog qvora), i sadri granu u obrnutom smeru uvek kad se grana prilikom vraaa prolazi u suprotnom smeru (ovaj ciklus odgovara, na primer, obilasku galerije u obliku stabla, sa slikama na oba zida svakog hodnika, idui uvek udesno). Svaka grana se tako prolazi taqno dva puta, pa je cena ovog ciklusa najvixe dva puta vea od cene MCST. Na kraju se ovaj ciklus preprav a u ciklus TSP, idui preqicom uvek kad treba proi kroz granu ve uk uqenu u ciklus (videti sliku 13). Drugim reqima, umesto povratka 11 9
1
2
n
11.5. TEHNIKE ZA RAD SA NP-KOMPLETNIM PROBLEMIMA
291
starom granom, idemo direktno do prvog nepregledanog qvora. Pretpostavka da su rastojaa euklidska je vana, jer obezbeuje da je uvek direktni put izmeu dva grada bar toliko dobar, koliko bilo koji zaobilazni put. Prema tome, duina dobijenog ciklusa TSP je jox uvek maa od dvostruke duine minimalnog ciklusa TSP. t
t t
t
t
t t
t
t
t t
t
t
t
t
t
t t }
t
t
t
t
(a) (b) Ris. 13. (a) Minimalno povezujue stablo (MCST) (b) ciklus TSP dobijen od MCST polazei od sredeg qvora i idui uvek udesno. t
t
t
t
Sloenost. Vremenska sloenost ovog algoritma odreena je brojem koraka u algoritmu za konstrukciju MCST. 11.5.2.4. Pobo xae. Algoritam koji smo upravo opisali moe se pobo xati na sledei naqin. egov "najgrub i" deo je pretvarae obilaska stabla u ciklus TSP. Ta konverzija moe se posmatrati i na drugi naqin: ona formira Ojlerov ciklus od stabla u kome je svaka grana udvostruqena. Posle toga se konstruixe ciklus TSP korixeem preqica u Ojlerovom ciklusu. Konverzija stabla u Ojlerov ciklus moe se izvesti mnogo racionalnije. Ojlerov graf moe da sadri samo qvorove parnog stepena. Posmatrajmo sve qvorove neparnog stapena u stablu. Broj takvih qvorova mora biti paran (u protivnom bi suma stepena qvorova bila neparna, xto je nemogue, jer je ta suma jednaka dvostrukom broju grana). Ojlerov graf se od stabla moe dobiti dodavanjem dovo nog broja grana, qime se postie da stepeni svih qvorova postanu parni. Poxto se ciklus TSP sastoji od Ojlerovog ciklusa (sa nekim preqicama), voleli bismo da minimiziramo zbir duina dodatih grana. Razmotrimo sada taj problem. Dato je stablo u ravni, a ci je dodati mu neke grane, sa minimalnom sumom duina, tako da dobijeni graf bude Ojlerov. Svakom qvoru neparnog stepena mora se dodati bar jedna grana. Pokuxajmo da postignemo ci dodavaem taqno jedne grane svakom takvom qvoru. Pretpostavimo da ima 2k qvorova neparnog stepena. Ako dodamo k grana, tako da svaka od ih spaja dva
292
11. NP-KOMPLETNOST
qvora neparnog stepena, onda e stepeni svih qvorova postati parni. Problem tako postaje problem uparivaa. Potrebno je pronai uparivae minimalne duine koje pokriva sve qvorove neparnog stepena. Nalaee optimalnog uparivaa moe se izvesti za O(n ) koraka za proizvo ni graf (ovo tvree navodimo bez dokaza). Konaqni ciklus TSP se zatim dobija od Ojlerovog grafa (koji obuhvata minimalno povezujue stablo i uparivae minimalne duine) korixeem preqica. Ciklus TSP dobijen ovim algoritmom od stabla sa slike 13 prikazan je na slici 14. 3
t
t t
t
t
t t
t
t
t t
t
t
t
t
t
t t
t
t
t
t
(a) (b) Ris. 14. Minimalni Ojlerov ciklus i odgovarajui ciklus TSP (a) minimalno povezujue stablo sa uparivaem, (b) ciklus TSP dobijen od Ojlerovog ciklusa. t
t
t
t
Teorema 11.12. Pobo xani algoritam daje ciklus TSP qija je duina najvixe 1.5 puta vea od duine minimalnog ciklusa TSP. Dokazatel~stvo. Potrebno je oceniti duinu Ojlerovog ciklusa, jer se duina ciklusa posle uvoea eventualnih preqica moe samo smaiti. Ojlerov ciklus se sastoji od stabla i uparivaa. Oznaqimo sa Q minimalni ciklus TSP, a sa |Q| egovu duinu. Videli smo ve da je duina stabla maa ili jednaka od |Q|; prema tome, dovo no je dokazati da duina uparivaa ne prelazi |Q|/2. Ciklus Q sadri sve qvorove. Neka je D skup qvorova neparnog stepena u polaznom stablu. Za skup D mogu se formirati dva disjunktna uparivaa sa zbirom duina ≤ |Q| na sledei naqin (videti sliku 15, na kojoj su zaokrueni qvorovi iz D). Zapoqiemo sa proizvo nim qvorom v ∈ D i uparujemo ga sa sa najbliim qvorom (u smeru kaza ke na satu) du ciklusa Q. Posle toga nastav a se sa uparivaem u istom smeru. Ako upareni qvorovi nisu susedi u Q, onda je rastojae izmeu ih mae ili jednako od duine puta koji ih povezuje u Q (zbog nejednakosti trougla). Ovaj proces daje jedno uparivae. Drugo uparivae dobija se ponav aem istog procesa u smeru suprotnom od kaza ke na satu. Suma duina oba uparivaa je najvixe |Q|, videti sliku 15. Meutim, poxto je M uparivae minimalne teine u
ZADACI
293
, egova duina je maa ili jednaka od duine bo eg od dva spomenuta uparivaa (sa zbirom |Q|), pa je dakle maa ili jednaka od |Q|/2. ¤ D
t h
t h
t
t h t
th t h t t h
t
Ris. 15. Dva uparivaa qija suma duina ne prelazi duinu
minimalnog ciklusa TSP. Nalaee uparivaa minimalne teine znatno je sloenije od nalaea minimalnog povezujueg stabla, ali se time dobija bo a granica. Navedeni primer ilustruje osnovnu karakteristiku ovog tipa algoritama: uopxtava se lakxi problem | ili se oslab uju (relaksiraju) neki elementi polaznog problema | i tako se formira heuristika.
11.6. Rezime
Prethodna poglav a su moda izazvale optimizam u vezi sa mogunoxu konstrukcije dobrih algoritama. Ovo poglav e treba da nas priblii realnosti. Ima mnogo vanih problema koji se, naalost, ne mogu rexiti elegantnim, efikasnim algoritmima. Potrebno je da prepoznajemo takve probleme i da im pronalazimo neoptimalna, priblina rexea. Pri napadu na neki problem na raspolagau su dva pristupa. Moe se pokuxati sa tehnikama iz prethodnih poglav a, da bi se problem rexio, ili mogu iskoristiti tehnike uvedene u ovom poglav u, i pokazati da je problem NP-kompletan. Da bi se izbegli mnogobrojni bezuspexni pokuxaji pre izbora ispravnog pristupa, potrebno je razviti intuiciju za ocenu teine problema.
Zadaci
11.1. Pokazati da su svaka dva netrivijalna problema iz klase P polinomijalno ekvivalentna. 11.2. Razmotrite sledei algoritam za utvrivae da li graf ima kliku veliqine k. Najpre se generixu skupovi od po taqno k qvorova (ima ih O(n )). Zatim se za svaki podgraf indukovan tim podskupom proverava da li je kompletan. Zaxto ovo nije algoritam polinomijalne vremenske sloenosti (xto bi imalo za posledicu P=NP)? k
294
11. NP-KOMPLETNOST
11.3. Napisati 3 SAT izraz koji se dobija primenom postupka svoea SAT na 3 SAT (ode ak 11.4.3) na izraz (x + y + z¯ + w + u + v¯)(¯ x + y¯ + z + w ¯ + u + v)(x + y¯ + z¯ + w + u + v¯)(x + y¯).
11.4. Dokazati da problem pokrivaq grana ostaje NP-kompletan qak i ako se uvede ograniqee da svi qvorovi u grafu moraju imati paran stepen. 11.5. Dokazati NP-kompletnost sledeeg problema. Za dati neusmereni povezan graf G = (V, E) i prirodni broj k ustanoviti da li G sadri kliku veliqine k i nezavisni skup veliqine k. 11.6. Dokazati da je sledei problem NP-kompletan. Dat je neusmereni graf G i prirodni broj k. Utvrditi da li G sadri podskup od k qvorova, qiji je indukovani podgraf acikliqki. 11.7. Neka je E izraz u konjuktivnoj normalnoj formi (KNF), u kome se svaka promen iva x pojav uje taqno jednom, i ena negacija x¯ pojav uje se taqno jednom. Konstruisati algoritam polinomijalne vremenske sloenosti za utvrivae da li je izraz E zadovo iv, ili dokazati da je ovaj problem NP-kompletan. 11.8. Dokazati da je sledea varijanta problema 3 SAT NP-kompletna. Ulaz je isti kao i za problem 3 SAT. Potrebno je utvrditi da li postoji pridruivae vrednosti promen ivim, takvo da je data formula taqna, i da u svakoj klauzi taqno jedan literal ima vrednost 1. 11.9. Zadat je regularni graf G (graf qiji svi qvorovi imaju isti stepen) i prirodni broj k. Treba utvrditi da li G sadri kliku veliqine k. Dokazati da je ovaj problem NPkompletan. 11.10. Neka je G = (V, E) neusmereni graf, qijem je svakom qvoru pridruen neki posao. Dva qvora su povezana granom, ako se odgovarajui poslovi ne mogu izvrxavati istovremeno (jer npr. zahtevaju isti resurs). Ovo su jedina ograniqea istovremenosti poslova: svaki skup poslova, takvih da bilo koja dva posla iz skupa nisu povezani, moe se izvrxiti u jednom koraku. Dokazati da je sledei problem NP-kompletan. Dat je graf G = (V, E) i prirodni broj k. Ustanoviti mogu li se svi poslovi koji odgovaraju qvorovima izvrxiti za k koraka. 11.11. Navesti primer familije grafova, za koju trajae bojea sa tri boje algoritmom pretrage sa slike 12 raste eksponencijalno sa brojem qvorova n.
Glava 12
Paralelni algoritmi 12.1. Uvod
Paralelno izraqunavae vixe nije egzotiqna oblast, i ve due vreme je na glavnom pravcu razvoja raqunarstva. Razvija se vrlo brzo, qak i u odnosu na druge raqunarske oblasti. U upotrebi je vixe tipova paralelnih raqunara, sa brojem procesora u opsegu od 2 do 65536, i veim. Razlike izmeu razliqitih postojeih raqunara, qak i sa aspekta neobavextenog korisnika, vrlo su velike. Nemogue je usvojiti jedan opxti model izraqunavaa koji bi obuhvatao sve paralelne raqunare U ovom poglav u nisu pokrivene sve (pa qak ni veina) oblasti povezanih sa paralelnim izraqunavaem. Prikazani su primeri korixea pojedinih modela izraqunavaa i razliqite tehnike. Ci je sticae predstave o paralelnim algoritmima i upoznavae sa potexkoama vezanim za ihovu konstrukciju. Poqie se sa zajedniqkim karakteristikama paralelnih algoritama. Zatim se ukratko opisuju neki osnovni modeli paralelnog izraqunavaa, a na kraju se navode primeri algoritama i tehnika. Osnovne mere sloenosti za sekvencijalne algoritme su vreme izvrxavaa i veliqina korixene memorije. Ove mere su vane i kod paralelnih algoritama, ali se mora voditi raquna i o drugim resursima, posebno o broju procesora. Postoje problemi koji su suxtinski sekvencijalni, koji se ne mogu "paralelizovati" qak ni ako je na raspolagau neograniqeni broj procesora. Ipak, veina ostalih problema moe se do nekog stepena paralelizovati. Xto vixe procesora se koristi | do neke granice | algoritam se bre izvrxava. Vano je prouqavati ograniqea paralelnih algoritama, i biti u stau okarakterisati probleme za koje postoje vrlo brza paralelna rexea. Poxto je broj procesora ograniqen, isto tako je vano da se procesori efikasno koriste. Sledei vaan elemenat je komunikacija izmeu procesora. Qesto je vixe vremena potrebno da dva procesora razmene podatke, nego da se izvrxe jednostavne operacije sa podacima. Pored toga, trajae razmene podataka moe da zavisi od "uda enosti" dva procesora u raqunaru. Prema tome, vano je minimizirati komunikaciju i organizovati je na efikasni naqin. Sledee vano pitae je sinhronizacija, koja je veliki problem kod paralelnih algoritama kad se izvrxavaju na nezavisnim maxinama, povezanim nekom mreom 295
296
12. PARALELNI ALGORITMI
za komunikaciju. Takvi algoritmi se obiqno zovu distribuirani algoritmi . ih zbog nedostatka prostora ovde neemo razmatrati; ograniqiemo se na modele sa potpunom sinhronizacijom. Neki modeli paralelnog izraqunavaa sadre ograniqee da svi procesori u jednom koraku izvrxavaju jednu istu instrukciju (nad eventualno razliqitim podacima). Paralelni raqunari sa ovakvim ograniqeem zovu se SIMD (skraenica od Single–Instruction Multiple–Data ) raqunari. Paralelni raqunari kod kojih svaki procesor moe da izvrxava razliqiti program zovu se MIMD (skraenica od Multiple–Instruction Multiple–Data ) raqunari. Ukoliko se ne naglasi drugaqije, pretpostav a se da su raqunari o kojima je req MIMD raqunari.
12.2. Modeli paralelnog izraqunavaa
Deta an pregled modela paralelnih raqunara zahtevao bi vixe prostora. Spomenuemo samo osnovne modele, sa naglaskom na one koji se koriste u ovom poglav u. U ovom ode ku izloiemo neka opxta razmatraa i definicije koji se odnose na mnoge modele. Svaki od sledeih ode aka pokriva jedan od tipova modela, sadri egov deta niji opis i primere algoritama. Vreme izvrxavaa algoritma oznaqavaemo sa T (n, p), gde je n veliqina ulaza, a p broj procesora. Odnos S(p) = T (n, 1)/T (n, p)
zove se ubrzae algoritma. Paralelni algoritam je najefikasniji kad je , kad algoritam dostie savrxeno ubrzae. Za vrednost T (n, 1) treba uzeti najbo i poznati sekvencijalni algoritam. Vana mera iskorixenosti procesora je efikasnost paralelnog algoritma, koja se definixe izrazom S(p) = p
E(n, p) =
S(p) T (n, 1) = . p pT (n, p)
Efikasnost je odnos vremena izvrxavaa na jednom procesoru (kad izvrxava sekvencijalni algoritam) i ukupnog vremena izvrxavaa na p procesora (ukupno vreme je stvarno proteklo vreme pomnoeno brojem procesora). Efikasnost ukazuje na udeo procesorskog vremena, koje se efektivno koristi u odnosu na sekvencijalni algoritam. Ako je E(n, p) = 1, onda je koliqina raqunaa obav enog na svim procesorima u toku izvrxavaa algoritma jednaka koliqini raqunaa koju zahteva sekvencijalni algoritam. U tom sluqaju postignuto je optimalno iskorixee procesora. Postizae optimalne efikasnosti je retko, jer se u paralelnim algoritmima moraju izvrxiti neka dopunska izraqunavaa, koja nisu potrebna kod sekvencijalnog algoritma. Jedan od osnovnih ci eva je maksimizirae efikasnosti. Pri konstrukciji paralelnog algoritma moglo bi se fiksirati p, u skladu sa brojem procesora na raspolagau, i pokuxati sa minimiziraem T (n, p). Ali nedostatak ovakvog pristupa je u tome xto bi on mogao da zahteva novi algoritam, kad god se promeni broj procesora. Zgodnije bi bilo konstruisati
12.2. MODELI PARALELNOG IZRAQUNAVA A
297
algoritam koji radi za xto je mogue vixe razliqitih vrednosti p. Razmotriemo sada kako transformisati algoritam koji radi za neku vrednost p, u algoritam za mau vrednost p, bez znaqajne promene efikasnosti. U opxtem sluqaju, algoritam sa T (n, p) = X moe se transformisati u algoritam sa T (n, p/k) ' kX , za proizvo nu konstantu k > 1. Drugim reqima, moe se koristiti za faktor k mae procesora, qije je vreme rada onda due za faktor k. Modifikovani algoritam moe se konstruisati zamenom svakog koraka polaznog algoritma sa k koraka, u kojima jedan procesor emulira (paralelno) izvrxavae jednog koraka na k procesora. Ovaj princip nije uvek primen iv. Na primer, mogue je da p nije de ivo sa k, ili da algoritam zavisi od naqina povezivaa procesora (o qemu e biti reqi u ode ku 12.4), ili da donoxee odluke o tome koje procesore emulirati zahteva takoe utroxak nekog vremena. Ipak, ovaj princip, takozvani princip imitiraa paralelizma, princip imitiraa paralelizma vrlo je opxti i koristan. On pokazuje da se moe smaiti broj procesora, ne meajui bitno efikasnost. Ako, na primer, polazni algoritam (koji je konstruisan za velike p) ima veliko ubrzae, onda se mogu dobiti algoritmi koji postiu priblino isto ubrzae za bilo koju mau vrednost p. Prema tome, treba konstruisati algoritam sa xto bo im ubrzaem za maksimalni broj procesora, pri qemu efikasnost treba da bude dobra (tj. bliska jedinici). Zatim, ako je na raspolagau mai broj procesora, i da e se moe koristiti isti algoritam. S druge strane, paralelni algoritmi sa malom efikasnoxu su korisni samo ako je na raspolagau veliki broj procesora. Pretpostavimo, na primer, da imamo algoritam sa T (n, 1) = n i T (n, n) = log n, odnosno sa ubrzaem S(n) = n/log n i efikasnoxu E(n) = 1/log n. Pretpostavimo da nam je na raspolagau p = 256 procesora i da je n = 1024. Vreme izvrxavaa paralelnog algoritma je T (1024, 256) = 4 log 1024 = 40 (uz pretpostavku da je mogue imitirae paralelizma bie T (n, p) = (n log n)/p), xto je ubrzae za faktor oko 25 u odnosu na sekvencijalni algoritam. S druge strane, za p = 16 vreme izvrxavaa je 640, xto daje nedovo no ubrzae (mae od 2 sa 16 procesora). Modeli paralelnog izraqunavaa razlikuju se meusobno uglavnom po naqinu komunikacije i sinhronizacije procesora. Razmatraemo samo modele koji podrazumevaju potpunu sinhronizaciju i razliqite naqine povezivaa. Modeli sa zajedniqkom memorijom pretpostav aju da postoji zajedniqka memorija sa ravnomernim pristupom, tako da svaki procesor moe da pristupi svakoj promen ivoj za jediniqno vreme. Ova pretpostavka o vremenu pristupa nezavisnom od broja procesora i veliqine memorije nije bax realna, ali je dobra aproksimacija. Modeli sa zajedniqkom memorijom razlikuju se po naqinu na koji obrauju konflikte prilikom pristupa memoriji. Pojedine alternative razmotriemo u ode ku 12.3. Zajedniqka memorija je obiqno najjednostavniji naqin za modelirae komunikacije, ali naqin koji je najtee hardverski realizovati. Drugi modeli pretpostav aju da su procesori meusobno povezani posredstvom mree. 2
2
2
2
2
298
12. PARALELNI ALGORITMI
Mrea raqunara se moe predstaviti grafom, pri qemu qvorovi odgovaraju procesorima, a dva qvora su povezana ako izmeu odgovarajuih procesora postoji direktna veza. Svaki procesor obiqno ima lokalnu memoriju, kojoj moe da pristupa brzo. Komunikacija se ostvaruje porukama, koje moraju da prou vixe direktnih veza da bi doxle do odredixta. Prema tome, brzina komunikacije zavisi od rastojaa izmeu procesora koji razmeuju poruke. Nekoliko razliqitih grafova je analizirano u ulozi skeleta mree raqunara. Vixe popularnih konfiguracija navedeno je u ode ku 12.4. Sledei model koji emo razmotriti je model sistoliqkog raqunanjakreu . Sistoliqka arhitektura podsea na pokretnu traku u fabrici. Podaci se kroz procesore ravnomerno, i tom prilikom se nad ima izvode jednostavne operacije. Umesto da pristupaju zajedniqkoj (ili lokalnoj) memoriji, procesori dobijaju ulazne podatke od svojih suseda, obrauju ih, i prosleuju da e. Neki sistoliqki algoritmi navedeni su u ode ku 12.5. Kolo je osnovni teorijski model, koji e biti korixen samo za potrebe ilustracije. Kolo je usmereni acikliqki graf, u kome qvorovi odgovaraju jednostavnim operacijama, a grane pokazuju kretae operanada. Na primer, Bulovo kolo je ono u kome su ulazni stepeni qvorova najvixe dva, a sve operacije su Bulove operacije (disjunkcija, konjunkcija ili negacija). Posebno su izdvojeni ulazni (sa ulaznim stepenom nula) i izlazni qvorovi (sa izlaznim stepenom nula). Dubina kola je duina najdueg puta od nekog ulaznog do nekog izlaznog qvora. Dubina odgovara vremenu izvrxavaa paralelnog algoritma.
12.3. Algoritmi za raqunare sa zajedniqkom memorijom
Raqunar sa zajedniqkom memorijom sastoji se od vixe procesora i zajedniqke memorije. U ovom ode ku baviemo se samo potpuno sinhronizovanim algoritmima. Pretpostav amo da se izraqunavae sastoji od koraka. U svakom
koraku svaki procesor izvrxava neku operaciju nad podacima kojima raspolae, qita iz zajedniqke memorije ili pixe u zajedniqku memoriju (u praksi svaki procesor moe da ima i lokalnu memoriju). Modeli sa zajedniqkom memorijom razlikuju se po tome kako obrauju memorijske konflikte. Model EREW (Exclusive–Read Exclusive–Write ) ne dozvo ava da dva procesora istovremeno pristupaju istoj memorijskoj lokaciji. Model CREW (Concurent– Read Exclusive–Write ) dozvo ava da vixe procesora istovremeno qitaju sa iste memorijske lokacije, ali ne dozvo ava da dva procesora istovremeno pixu na istu lokaciju. Na kraju, model (Concurent–Read Concurent–Write ) ne namee nikakva ograniqea na pristup procesora memoriji. Modeli EREW i CREW su dobro definisani, ali nije jasno xta je rezultat istovremenog pisaa od strane dva procesora na jednu istu memorijsku lokaciju. Ima vixe naqina za obradu istovremenih pisaa. Najslabiji CRCW model, jedini koji e biti ovde razmatran, dozvo ava da vixe procesora istovremeno pixu na istu lokaciju samo ako zapisuju istu vrednost. Ako dva procesora pokuxaju da upixu istovremeno razliqite vrednosti na istu
12.3. ALGORITMI ZA RAQUNARE SA ZAJEDNIQKOM MEMORIJOM
299
lokaciju, prekida se sa izvrxavaem algoritma. Iako je to moda neoqekivano, videemo u ode ku 12.3.2 da je ovakav model vrlo moan. Druga mogunost je pretpostaviti da su procesori numerisani, i da, ako vixe procesora pokuxaju istovremeni upis na istu lokaciju, realizuje se upis procesora sa najveim rednim brojem. 12.3.1. Paralelno sabirae. Zapoqiemo sa jednostavnim primerom paralelnog algoritma za rexavae problema, koji je na prvi pogled suxtinski sekvencijalan. Problem. Izraqunati sumu dva n-bitna binarna broja. Obiqan sekvencijalni algoritam najpre sabira dva bita najmae teine, a onda u svakom koraku sabira po dva bita, i zbiru eventualno dodaje prenos sa nie pozicije. Na prvi pogled nemogue je predvideti ishod i-tog koraka, sve dok se ne saberu i − 1 bita najmae teine, jer prenos moe, a ne mora da postoji. Ipak, mogue je konstruisati paralelni algoritam. Koristimo indukciju po n. Prelaz sa n − 1 na n ne moe da bude od velike koristi, jer vodi iterativnom sekvencijalnom algoritmu. Pristup zasnovan na dekompoziciji qesto daje dobre rezultate kod paralelnih algoritama, pa i u ovom sluqaju, jer moe da rexi sve mae potprobleme paralelno. Pretpostavimo da smo podelili problem na dva potproblema veliqine n/2, tj. na sabirae levih i desnih sabiraka od po n/2 bita (zbog jednostavnosti pretpostav amo da je n stepen dvojke). Sume dva para brojeva mogu se izraqunati paralelno. Ipak, jox uvek ostaje problem prenosa. Ako suma delova mae teine ima prenos, mora se promeniti suma delova vee teine. Problem rexava zapaae da postoje samo dve mogunosti | prenos postoji ili ne. Zahva ujui tome, moe se pojaqati induktivna hipoteza, tako da obuhvati oba sluqaja. Modifikovani problem glasi: pronai sumu dva broja, sa i bez prenosa na najniu poziciju. Pretpostavimo da smo rexili modifikovani problem za oba para sabiraka, i tako dobili qetiri broja L, L , D i D , koji predstav aju sumu nieg para bez prenosa, istu sumu sa prenosom, i odgovarajue sume za vixi par brojeva, redom. Za svaku od tih suma takoe znamo da li je pri enom izraqunavau doxlo do prenosa. Ukupnu sumu S (bez prenosa na najnii bit) qine L sa D ili D , zavisno od toga da li je suma L proizvela prenos. Ukupna suma S sa prenosom dobija se na isti naqin, samo se L zameuje sa L . Problem veliqine n svodi se na rexavae dva potproblema veliqine n/2 i na izvrxavae konstantnog broja koraka za objediavae dva rezultata. Poxto se oba potproblema mogu rexiti paralelno | pretpostavka je da procesori mogu da pristupe razliqitim bitima nezavisno | dobija se diferencna jednaqina T (n, n) = T (n/2, n/2) + O(1), qije je rexee T (n, n) = O(log n). Pored toga, poxto su dva potproblema potpuno nezavisna, ovaj algoritam podrazumeva samo model EREW. Ovaj algoritam nije najbo i za paralelno sabirae ali je dobar primer jednostavne paralelizacije algoritma. Kad za neki problem C
C
C
C
C
300
12. PARALELNI ALGORITMI
postane jasno da se moe efikasno rexiti paralelno, rexee se moe da e pobo xavati.
12.3.2. Algoritmi za nalaee maksimuma. Problem. Pronai najvei od n razliqitih brojeva, zadatih u vektoru.
Ovaj problem rexiemo za dva razliqita modela sa zajedniqkom memorijom, EREW i CRCW. Algoritmi za oba modela koriste tehnike koje se koriste pri rexavau mnogih drugih problema. 12.3.2.1. EREW model. Direktni sekvencijalni algoritam za nalaee maksimuma zahteva n−1 uporeivae. Uporeivae se moe shvatiti kao partija koju igraju dva broja, u kojoj pobeuje vei. Problem nalaea maksimuma je tada ekvivalentan organizovau turnira, u kome je pobednik najvei broj u celom skupu. Efikasan naqin da se turnir organizuje paralelno je da se iskoristi stablo. Igraqi se dele u parove za prvo kolo (pri qemu eventualno jedan igraq ne uqestvuje, ako je ukupan broj igraqa neparan), pobednici se ponovo dele u parove, i tako da e do finala. Broj kola je dlog ne. Turnir se moe transformisati u paralelni algoritam tako xto se svakoj partiji dodeli procesor (procesor igra ulogu sudije u partiji). Meutim, treba odbezbediti da svaki procesor zna brojeve { takmiqare. To se moe postii kopiraem pobednika u partiji na poziciju sa veim indeksom od pozicija dva uqesnika partije. Preciznije, ako partiju igraju x i x , j > i, onda se vei od brojeva x , x kopira na poziciju j . U prvom kolu procesor P uporeuje x sa x (1 ≤ i ≤ n/2), i zameuje ih ako je potrebno, tako da na veu poziciju ode vei broj. U drugom kolu procesor P uporeuje x sa x (1 ≤ i ≤ n/4), i tako da e. Ako je na primer n = 2 , onda u posledem, k-tom kolu, P uporeuje x sa x , i eventualno ih zameuje. Najvei broj nalazie se na poziciji n. Poxto svaki broj u jednom trenutku uqestvuje samo u jednoj partiji, dovo an je model EREW. Vreme izvrxavaa ovog jednostavnog algoritma je oqigledno O(log n). Pokuxaemo sada da smaimo broj korixenih procesora. Algoritam koji smo upravo razmotrili zahteva bn/2c procesora, a broj koraka je T (n, bn/2c) = dlog ne. Poxto je za sekvencijalni algoritam T (n, 1) = n − 1, efikasnost ovog paralelnog algoritma je E(n, n/2) ' 2/log n. Ako nam je ionako na raspolagau bn/2c procesora (na primer, ako je algoritam za nalaee maksimuma deo drugog algoritma, kome je neophodno toliko procesora), onda je ovaj algoritam jednostavan i efikasan. Meutim, uz mali napor moe se doi do algoritma sa vremenom izvrxavaa O(log n) i efikasnoxu O(1). Ukupan broj uporeivaa potrebnih za ovaj algoritam je n−1, isti kao i za sekvencijalni algoritam. Razlog male efikasnosti lei u tome xto se veina procesora ne koristi u kasnijim kolima. Efikasnost se moe pobo xati smaivaem broja procesora i uravnoteavaem ihovog optereea na sledei naqin. Pretpostavimo da koristimo samo oko n/log n procesora. Ulaz se moe podeliti u n/log n grupa (sa priblino log n elemenata u svakoj grupi) i zatim svakoj grupi dodeliti po jedan procesor. U prvoj fazi svaki 2
i
i
i
k
n/2
j
j
i
4i−2
2i−1
4i
1
n
2
2
2
2
2
2i
12.3. ALGORITMI ZA RAQUNARE SA ZAJEDNIQKOM MEMORIJOM
301
procesor pronalazi maksimum u svojoj grupi koristei sekvencijalni algoritam, koji se sastoji od oko log n koraka. Posle toga ostaje da se odredi maksimum otprilike n/log n maksimuma, pri qemu sad ima dovo no procesora da se iskoristi turnirski algoritam. Vreme izvrxavaa turnira (pod pretpostavkom da je n stepen dvojke) je T (n, dn/log ne) ' 2 log n. Odgovarajua efikasnost je E(n) ' 1/2. Pokuxaemo sada da formalizujemo ovu ideju, koja omoguuje uxtedu na broju procesora. Za algoritam kaemo da je statiqki ako se unapred zna pridruivae procesora operacijama. Dakle, unapred znamo za svaki korak i algoritma i za svaki procesor P operaciju i operande koje P koristi u koraku i. Algoritam za nalaee maksimuma je primer statiqkog algoritma, jer se unapred znaju indeksi uqesnika u svakoj partiji. Lema 12.1 (Brentova lema). Ako postoji statiqki EREW algoritam sa T (n, p) = O(t(n)), takav da je ukupan broj koraka (na svim procesorima) s(n), onda postoji statiqki EREW algoritam sa T (n, s(n)/t(n)) = O(t(n)). Primetimo da ako je s(n) jednako sekvencijalnoj sloenosti algoritma, onda modifikovani algoritam ima efikasnost O(1). Dokazatel~stvo. Neka je T (n, p) ≤ t(n) za sve dovo no velike n, i neka je a ukupan broj koraka koje izvrxavaju svi procesori u i-tom koraku algoP ritma, i = 1, 2, . . . , t(n). Tada je a = s(n). Ako je a ≤ s(n)/t(n), onda ima dovo no procesora za paralelno izvrxavae koraka i. U protivnom se korak i zameuje sa da /(s(n)/t(n))e koraka u kojima raspoloivih s(n)/t(n) procesora emuliraju korake, koje u originalnom algoritmu izvrxava p procesora (koristei princip imitiraa paralelizma). Ukupan broj koraka je sada 2
2
2
j
i
2
j
t(n) i=1
i
i
i
t(n) » X
¼ X ¶ t(n) µ t(n) ai ai t(n) t(n) X ≤ + 1 = t(n) + ai = 2t(n). s(n)/t(n) s(n) s(n) i=1 i=1
Prema tome, vreme izvrxavaa modifikovanog algoritma je takoe O(t(n)). ¤ Ovo tvree poznato je kao Brentova lema. Brentova lema pokazuje da u nekim sluqajevima efikasnost paralelnog algoritma odreena odnosom ukupnog broja operacija (operacija koje izvrxavaju svi procesori) i vremena izvrxavaa sekvencijalnog algoritma. Ograniqee da algoritam bude statiqki je potrebno, jer se mora znati koje procesore treba emulirati. Brentova lema je taqna i za algoritme koji nisu statiqki, pod uslovom da se emulacija moe lako izvesti. Primer gde se ova lema ne moe primeniti je sledei. Pretpostavimo da imamo n procesora i n elemenata. Posle prvog koraka neki procesori odluquju (na osnovu rezultata prvog koraka) da prestanu sa radom. Isto se dexava i drugom, treem koraku, itd. Ovaj algoritam je sliqan turnirskom algoritmu, izuzev xto se u ovom sluqaju ne zna koji procesori odustaju od da eg rada. Ako pokuxamo da emuliramo preostale procesore posle na primer prvog koraka, potrebno je da i=1
302
12. PARALELNI ALGORITMI
znamo koji su jox aktivni. Da bi se to ustanovilo, potrebno je izvrxiti neka izraqunavaa. 12.3.2.2. CRCW model. Namee se utisak da paralelni algoritam ne moe da nae maksimum za mae od log n koraka, ako se koriste samo uporeivanja. Meutim, to nije taqno. Sledei algoritam sa vremenom izvrxavaa O(1) ilustruje mogunosti istovremenih upisa. Podrazumeva se varijanta istovremenih upisa, u kojoj dva ili vixe procesora mogu da pixu istovremeno na istu lokaciju samo ako zapisuju isti podatak. Koristi se n(n−1)/2 procesora, tako da se procesor P dode uje paru elemenata {i, j}. Pored toga, svakom elementu x pridruuje se zajedniqka (de ena) promen iva v , sa poqetnom vrednoxu 1. U prvom koraku svaki procesor uporeuje svoja dva elementa i zapisuje 0 u promen ivu pridruenu maem elementu. Poxto je samo jedan elemenat vei od svih ostalih, samo jedna od promen ivih v zadrava vrednost 1. U drugom koraku procesori pridrueni pobedniku mogu da ustanove da je on pobednik i da objave tu qienicu (na primer, upisivaem egovog indeksa u posebnu zajedniqku promen ivu, rezultat). Ovaj algoritam zahteva samo dva koraka, nezavisno od n. Meutim, egova efikasnost je vrlo mala, jer on zahteva O(n ) procesora. Ovo je takozvani dvokoraqni algoritam. Efikasnost dvokoraqnog algoritma moe se pobo xati sliqno onom kod modela EREW. Ulazni podaci dele se u male grupe, tako da se svakoj grupi moe dodeliti dovo no procesora, da bi se maksimum grupe mogao odrediti dvokoraqnim algoritmom. Sa opadaem broja kandidata raste broj raspoloivih procesora po kandidatu, pa se moe poveati veliqina grupe. Dvokoraqni algoritam omoguuje odreivae maksimuma u grupi veliqine k sa k(k − 1)/2 procesora, za konstantno vreme. Pretpostavimo da imamo ukupno n procesora i da je n stepen dvojke. U prvom ciklusu veliqina svake grupe je 2 i maksimum u svakoj grupi moe se odrediti u jednom koraku. U drugi ciklus ulazi se sa n/2 elemenata, i (naravno) n procesora. Ako formiramo grupe od po 4 elementa, imaemo n/8 grupa, xto nam omoguuje da svakoj grupi dodelimo 8 procesora. Ovo je dovo no, jer je 4 · (4 − 1)/2 = 6. U trei ciklus ulazi se sa n/8 elemenata. Pokuxajmo da odredimo najveu moguu veliqinu grupe koja se moe obraditi na ovaj naqin. Ako je veliqina grupe g, onda je broj grupa n/8g, i za svaku grupu imamo na raspolagau 8g procesora. Za primenu dvokoraqnog algoritma na grupu veliqine g potrebno je g(g − 1)/2 procesora, pa mora da bude g(g −1)/2 ≤ 8g, odnosno g ≤ 17; jednostavnije je uzeti vrednost g = 16. Uopxte, u i-ti ciklus se ulazi sa n/2 elemenata, koji se dele na n/2 grupa po g = 2 elemenata, i ≥ 1. Za nalaee maksimuma u grupi dvokoraqnim algoritmom dovo no je g(g − 1)/2 ≤ g /2 = 2 procesora, pa je za nalaee maksimuma u svim grupama dovo no 2
ij
i
i
i
2
2i−1 −1
2i −1
2i−1
2
i n · 22 −1 = n 22i −1
2i −1
12.3. ALGORITMI ZA RAQUNARE SA ZAJEDNIQKOM MEMORIJOM
303
procesora. U naredni ciklus ulazi se sa po jednim elementom iz svake grupe, dakle sa n/2 elemenata, xto indukcijom dokazuje ispravnost ove konstrukcije. Broj ciklusa i do zavrxetka algoritma ograniqen je uslovom da je broj elemenata na poqetku i-tog ciklusa mai od jedan: n/2 ≤ 1, ili i ≥ log (log n + 1) + 1. Dakle broj ciklusa, a time i broj koraka prilikom izvrxea ovog algoritma je O(log log n). Iako je ovaj algoritam nexto sporiji od dvokoraqnog (O(log log n) u odnosu na O(1)), egova efikasnost je mnogo bo a. Ona iznosi O(1/ log log n) u odnosu na O(1/n) kod dvokoraqnog algoritma. Opisana tehnika moe se nazvati podeli i smrvi, jer se ulaz deli u grupe, koje su dovo no male da se mogu "smrviti" mnoxtvom procesora. Primena ove tehnike nije ograniqena na model CRCW. 12.3.3. Paralelni problem prefiksa. Paralelni problem prefiksa je vaan jer se koristi kao osnovni elemenat pri konstrukciji mnogih paralelnih algoritama. Neka je ? proizvo na asocijativna binarna operacija (operacija koja zadovo ava uslov x ? (y ? z) = (x ? y) ? z) za proizvo ne x, y i z), koju emo oznaqavati imenom proizvod. Na primer, ? moe da oznaqava sabirae, mnoee ili maksimum dva broja. Problem. Dat je niz brojeva x , x , . . . , x . Izraqunati proizvode x ? x ? · · · ? x za k = 1, 2, . . . , n. Oznaqimo sa P R(i, j) proizvod x ? x ? · · · ? x . Potrebno je izraqunati P R(1, k) za k = 1, 2, . . . , n. Sekvencijalna verzija problema prefiksa je trivijalna | prefiksi se jednostavno izraqunavaju redom. Paralelni problem prefiksa nije tako lako rexiti. Iskoristiemo metod dekompozicije, uz uobiqajenu pretpostavku da je n stepen dvojke. Induktivna hipoteza. Umemo da reximo paralelni problem prefiksa za n/2 elemenata. Sluqaj jednog elementa je trivijalan. Algoritam zapoqie podelom ulaza na dve polovine, koje se rexavaju indukcijom. Na taj naqin dobijamo vrednosti P R(1, k) i P R(n/2 + 1, n/2 + k) za k = 1, 2, . . . , n/2. Prva polovina ovih vrednosti moe se iskoristiti direktno. Vrednosti P R(1, m) za m = n/2+1, n/2+ 2, . . . , n dobijaju se izraqunavaem proizvoda P R(1, n/2) ? P R(n/2 + 1, m). Oba ova qlana poznata su po indukciji (ve su izraqunata; primetimo da je iskorixena asocijativnost operacije ?). Algoritam je prikazan na slici 1. Sloenost. Ulaz je pode en u dva disjunktna skupa u svakom rekurzivnom pozivu algoritma. Oba potproblema se mogu dakle rexiti paralelno u modelu EREW. Ako imamo n procesora za problem veliqine n, onda se polovina ih moe dodeliti svakom potproblemu. Kombinovae rexea potproblema sastoji se od n/2 mnoea, koja se mogu izvrxiti paralelno, ali je potreban model CREW, jer se u svakom mnoeu koristi P R(1, n/2), odnosno x[Srednji]. Iako vixe procesora istovremeno da qitaju x[Srednji], 2i −1
2i−1 −1
2
2
1
2
n
1
k
i
i+1
j
2
304
12. PARALELNI ALGORITMI
Algoritam Ulaz: (vektor sa elemenata). pretpostav a se da je stepen dvojke Izlaz: (qiji -ti elemenat sadri -ti prefiks). Paralelni Prefiks 1(x, n);
x
n
{
n
x
}
i
i
begin
P P 1(1, n) end procedure PP 1(Levi, Desni); begin if Desni − Levi = 1 then x[Desni] := x[Levi] ? x[Desni] {? else
je asocijativna binarna operacija}
Srednji := (Levi + Desni − 1)/2; do in parallel
dode eno procesorima od 1 do n/2} dode eno procesorima od n/2 + 1 do n}
P P 1(Levi, Srednji); {
P P 1(Srednji + 1, Desni); {
for i := Srednji + 1 to Desni do in parallel x[i] := x[Srednji] ? x[i] end
Ris. 1. Algoritam P aralelni pref iks 1.
oni pixu na razliqite lokacije, pa model CRCW nije neophodan. Ukupan broj koraka je T (n, n) = O(log n), pa je efikasnost algoritma E(n, n) = O(1/ log n) (vreme izvrxavaa sekvencijalnog algoritma je O(n)). Na alost, efikasnost ovog algoritma ne moe se pobo xati korixeem Brentove leme, jer je ukupan broj koraka na svim procesorima O(n log n). Prema tome, da bi se pobo xala efikasnost, mora se smaiti ukupan broj koraka. 12.3.3.1. Pobo xae efikasnosti paralelnog prefiksa. Ideja koja omoguuje rexavae problema je korixee iste induktivne hipoteze, ali uz podelu ulaza na drugaqiji naqin. Pretpostavimo ponovo da je n stepen dvojke i da imamo n procesora. Neka E oznaqava skup svih x sa parnim indeksima i. Ako izraqunamo prefikse svih elemenata iz E, onda je izraqunavae ostalih prefiksa (onih sa neparnim indeksima) lako: ako je poznato P R(1, 2i), onda se neparni prefiks P R(1, 2i+1) dobija izraqunavaem samo jox jednog proizvoda P R(1, 2i) ? x , i = 1, 2, . . . , n/2, Prefiksi elemenata iz E mogu se odrediti u dve faze. Najpre se (paralelno) izraqunavaju proizvodi x ? x , koji se zatim smextaju u x , i = 1, 2, . . . , n/2. Drugim reqima, izraqunavaju se proizvodi svih elemenata iz E sa svojim levim susedima. Zatim se rexava (indukcijom) problem paralelnog prefiksa za n/2 elemenata iz E. Rezultat za svako x je taqan prefiks, jer je svako x ve zameeno proizvodom sa x . Poxto se znaju prefiksi za sve elemente sa parnim indeksima, preostali i
2i+1
2i−1
2i
2i
2i
2i
2i−1
12.3. ALGORITMI ZA RAQUNARE SA ZAJEDNIQKOM MEMORIJOM
305
prefiksi se mogu izraqunati u jednom paralelnom koraku na ve spomenuti naqin. Lako se proverava da se ovaj algoritam moe izvrxavati u modelu EREW. Algoritam je prikazan na slici 2. Algoritam Ulaz: (vektor sa elemenata). pretpostav a se da je stepen dvojke Izlaz: (qiji -ti elemenat sadri -ti prefiks). Paralelni Prefiks 2(x, n);
x
n
{
n
x
i
}
i
begin
P P 2(1) end procedure PP 2(Korak); begin if Korak = n/2 then x[n] := x[n/2] ? x[n] {? else
je asocijativna binarna operacija}
for i := 1 to n/(2 · Korak) do in parallel x[2 · i · Korak] := x[(2 · i − 1) · Korak] ? x[2 · i · Korak]; P P 2(2 · Korak); for i := 1 to n/(2 · Korak) − 1 do in parallel x[(2 · i + 1) · Korak] := x[2 · i · Korak] ? x[(2 · i + 1) · Korak] end
Ris. 2. Algoritam P aralelni pref iks 2.
Sloenost. Obe pet e u algoritmu P aralelni pref iks 2 mogu se izvrxiti paralelno za vreme O(1) sa n/2 procesora. Rekurzivni poziv primeuje se na problem dvostruko mae veliqine, pa je vreme izvrxavaa algoritma O(log n). Ukupan broj koraka s(n) zadovo ava diferencnu jednaqinu s(n) = s(n/2) + n − 1, s(2) = 1, iz qega sledi da je s(n) = O(n) (preciznije, s(2 ) = 2 − k − 2). Zbog toga se sada moe iskoristiti Brentova lema za pobo xae efikasnosti: algoritam se moe promeniti tako da se za vreme O(log n) izvrxava na samo O(n/ log n) procesora, odnosno da mu efikasnost bude O(1). K uqna ideja pobo xaa je korixee samo jednog rekurzivnog poziva (umesto dva), pri qemu se korak objediavaa i da e izvrxava paralelno. 12.3.4. Odreivae rangova u povezanoj listi. U paralelnim algoritmima mnogo je tee raditi sa povezanim listama nego sa vektorima, jer su liste suxtinski sekvencijalne. Povezanoj listi moe se pristupiti samo preko glave (prvog elementa), i lista se mora prolaziti elemenat po elemenat, bez mogunosti paralelizacije. U mnogim sluqajevima su, meutim, elementi k
k+1
306
12. PARALELNI ALGORITMI
liste (odnosno pokazivaqi na ih) smexteni u vektor; redosled elemenata liste nezavisan je od redosleda u vektoru. U takvim sluqajevima, kad se listi pristupa paralelno, postoji mogunost primene brzih paralelnih algoritama. Rang elementa u povezanoj listi definixe se kao rastojae elementa od kraja liste. Tako, na primer, prvi elemenat ima rang n, drugi n − 1, itd. Problem. Data je povezana lista od n elemenata koji su smexteni u niz A duine n. Izraqunati rangove svih elemenata liste. Sekvencijalni problem se moe rexiti prostim prolaskom kroz listu. Metod koji emo iskoristiti za konstrukciju paralelnog algoritma zove se udvostruqavae. Svakom elementu dode uje se po jedan procesor. Na poqetku svaki procesor zna samo adresu desnog (narednog) suseda svog elementa u listi. Posle prvog koraka svaki procesor zna elemenat na rastojau dva (du liste) od svog elementa. Ako u koraku i, svaki procesor zna adresu elementa na rastojau k od svog elementa, onda u narednom koraku svaki procesor moe da pronae adresu elementa na rastojau 2k. Proces se nastav a sve dok svi procesori ne dostignu kraj liste. Neka je N [i] adresa najda eg elementa desno od elementa i u listi, koju zna procesor P . Na poqetku je N [i] desni sused elementa i (izuzev za posledi elemenat u listi, qiji je pokazivaq na desnog suseda nil). U suxtini, procesor P u svakom koraku zameuje N [i] vrednoxu N [N [i]], sve dok ne dostigne kraj liste. Neka je R[i] rang elementa i. Na poqetku se promen ivoj R[i] dode uje vrednost 0, izuzev za posledi elemenat u listi, za koga se ona postav a na vrednost 1 (ovaj elemenat se od ostalih razlikuje po pokazivaqu, koji ima vrednost nil). Kad procesor dobije adresu suseda sa rangom R razliqitim od nule, on moe da izraquna svoj rang (odnosno rang svog elementa). Na poqetku samo elemenat ranga 1 zna svoj rang. Posle prvog koraka elemenat ranga 2 otkriva da egov sused ima rang 1, pa zak uquje da je egov sopstveni rang 2. Posle drugog koraka elementi sa rangom 3 i 4 ustanov avaju svoje rangove, itd. Ako P ustanovi da N [i] pokazuje na "rangirani" elemenat ranga R posle d koraka udvostruqavaa, onda je rang elementa i jednak 2 + R. Ovaj algoritam (slika 3) se moe lako prilagoditi modelu EREW, videti zadatak 12.2. (dovo no je da svaki procesor nezavisno izraqunava svoju kopiju D[i] promen ive D). Sloenost. Proces udvostruqavaa omoguuje da svaki procesor dostigne kraj liste posle najvixe dlog ne koraka, pa je T (n, n) = O(log n). Efikasnost algoritma je E(n, n) = O(1/ log n). Popravka efikasnosti zahtevala bi teme nu preradu algoritma, jer je ukupan broj koraka O(n log n). Poznavae rangova omoguuje transformaciju liste u vektor za O(log n) koraka. Posle izraqunavaa svih rangova, elementi se mogu prekopirati na svoje lokacije u vektoru, pa se ostatak izraqunavaa moe izvrxiti direktno na vektoru, xto je mnogo jednostavnije. i
i
i
d−1
2
12.3. ALGORITMI ZA RAQUNARE SA ZAJEDNIQKOM MEMORIJOM
Algoritam Ulaz: (niz od elemenata). Izlaz: (rangovi svih elemenata u nizu).
307
Rangovi(N );
N
n
R
begin
D := 1;
Svaki procesor moe imati svoju lokalnu promen ivu D} ovde je D zajedniqka promen iva} do in parallel {procesor P je aktivan dok R[i] ne postane razliqito od nule} {
{
i
R[i] := 0;
if N [i] = nil then R[i] := 1; while R[i] = 0 do if R[N [i]] 6= 0 then R[i] := D + R[N [i]] else N [i] := N [N [i]]; D := 2 · D end
Ris. 3. Paralelni algoritam za odreivae rangova elemenata povezane liste.
12.3.5. Tehnika Ojlerovog obilaska. Mnogi algoritmi za rad sa stablima mogu se paralelizovati tako da se paralelno obrauje kompletna generacija qvorova (na primer, kod turnirskog algoritma za nalaee maksimuma). Vreme izvrxavaa takvog algoritma je proporcionalno visini stabla. Ako je stablo sa n qvorova dovo no uravnoteeno i visina mu je O(log n), onda je ovaj pristup sasvim dobar. Meutim, ako stablo nije uravnoteeno, visina stabla moe da bude n−1 u najgorem sluqaju, pa se mora traiti neki drugi pristup. Tehnika Ojlerovog obilaska je alatka za konstrukciju paralelnih algoritama na stablima, pogodna i za neuravnoteena stabla. Neka je T stablo. Pretpostavimo da je T predstav eno uobiqajenom listom povezanosti, uz jednu dopunu. Kao i obiqno, postoji pokazivaq E[i] na poqetak liste grana susednih qvoru i (ako je ova lista prazna, onda E[i] ima vrednost nil). Ta lista sastoji se od slogova koji sadre odgovarajuu granu (i, j) (pri tome je dovo no smestiti samo j, jer je i poznato) i pokazivaq N aredna(i, j) na narednu granu u listi. Svaka neusmerena grana (i, j) predstav ena je sa dve usmerene kopije, (i, j) i (j, i). Slogovi liste sadre i dodatni pokazivaq: slog koji odgovara grani (i, j) sadri pokazivaq na granu (j, i). Ovo je potrebno da bi se grana (j, i) mogla brzo pronai kad se zna adresa grane (i, j). Primer ovako predstav enog stabla dat je na slici 4; pokazivaqi na kopije grana zbog preglednosti nisu prikazani.
308
12. PARALELNI ALGORITMI 1
t ºO ± a°
Ub Wt
ºO
2
- (2, 3) - (2, 1) - (2, 4)
3
- (3, 2)
4
- (4, 2)
c
Ud
²t
Wt
3
4
b e
d
f
5
¸f g M c®
- (1, 2) - (1, 5) a
e hK
2 ²t
E 1
g 5
- (5, 1) h
Ris. 4. Reprezentacija stabla.
Tehnika Ojlerovog obilaska zasniva se na ideji da se formira lista grana stabla, i to onim redom kojim se grane pojav uju u Ojlerovom ciklusu za usmerenu verziju stabla (u ciklusu se svaka grana pojav uje dva puta). Kad se zna ova lista, mnoge operacije sa stablom mogu se izvesti direktno na listi, kao da je lista linearna. Sekvencijalnim algoritmom lako se moe pregledati stablo i usput izvrxiti potrebne operacije. Ovakva "linearizacija" omoguuje da se operacije sa stablom efikasno izvode paralelno. Videemo dva primera takvih operacija, poxto prethodno razmotrimo formirae Ojlerovog ciklusa. Sekvencijalno nalaee Ojlerovog obilaska stabla T (u kome se svaka grana pojav uje dva puta) je jednostavno. Moe se izvesti obilazak stabla koristei pretragu u dubinu, vraajui se suprotno usmerenom granom prilikom svakog povratka nazad u toku pretrage. Sliqna stvar se moe izvesti i paralelno. Neka w(i, j) oznaqava granu koja sledi iza grane (i, j) u ciklusu. Tvrdimo da se w(i, j) moe definisati sledeom jednakoxu ½ N aredna(j, i) ako N aredna(j, i) nije nil w(i, j) = E[j] u ostalim sluqajevima , na osnovu koje se lako paralelno izraqunava. Drugim reqima, lista grana susednih qvoru j prolazi se cikliqkim redosledom (ako je (j, i) posleda grana u listi qvora j, onda se uzima prva grana iz te liste, ona na koju pokazuje E[j]). Na primer, ako krenemo od grane a na slici 4, onda se ciklus sastoji od grana a, d, g, c, f , e, b, h, i ponovo a. Qienica da N aredna(j, i) sledi iza (i, j) u ciklusu obezbeuje da e grana (j, i) doi na red tek kad budu izabrane sve ostale grane susedne qvoru j. Prema tome, podstablo sa korenom u j bie kompletno pregledano pre povratka u qvor i. Dokaz ispravnosti ove procedure ostav amo qitaocu kao vebae.
12.4. ALGORITMI ZA MREE RAQUNARA
309
Kad je lista grana u Ojlerovom obilasku konstruisana, proizvo na grana bira se za polaznu, a grana koja joj prethodi oznaqava se kao kraj liste. Qvor r se bira za koren stabla. Posle toga se grane algoritmom Rangovi sa slike 3 mogu numerisati, u skladu sa svojim poloajem u listi. Neka R(i, j) oznaqava rang grane (i, j) u listi. Tako je, na primer, R(r, t) = 2(n − 1), gde je n broj qvorova. Prikazaemo sada dva primera operacija sa stablom | dolaznu numeraciju qvorova, i izraqunavae broja potomaka za sve qvorove. Za granu (i, j) u ciklusu kaemo da je direktna grana ako je usmerena od korena, odnosno da je povratna grana u protivnom. Numeracija qvorova omoguuje razlikovae direktnih od povratnih grana: grana (i, j) je direktna grana ako i samo ako je R(i, j) > R(j, i). Poxto su dve kopije grane (i, j) povezane pokazivaqima, lako je ustanoviti koja je od ih direktna grana. Xta vixe, ova provera se moe obaviti paralelno za sve grane. Direktne grane su interesantne, jer odreuju redosled qvorova pri dolaznoj numeraciji. Neka je (i, j) direktna grana koja vodi do qvora j (odnosno, qvor i je otac qvora j u stablu). Ako je f (i, j) broj direktnih grana koje slede iza (i, j) u listi, onda je redni broj qvora j jednak n − f (i, j). Redni broj korena r, jedinog qvora do koga ne vodi ni jedna direktna grana, je 1. Primenom varijante algoritma sa udvostruqavaem moe se sada izraqunati vrednost f (i, j) za svaku direktnu granu (i, j). Precizniju razradu algoritma ostav amo qitaocu kao vebae. Drugi primer je izraqunavae broja potomaka svakog qvora u stablu. Neka je (i, j) (jedinstvena) direktna grana koja vodi do zadatog qvora j. Posmatrajmo grane koje slede iza grane (i, j) u listi. Broj qvorova ispod j u stablu jednak je broju direktnih grana ispod j u stablu. Mi ve znamo kako se paralelno izraqunavaju vrednosti f (i, j), jednake broju direktnih grana koje slede iza grane (i, j) u listi. Na sliqan naqin f (j, i) je broj direktnih grana koje slede iza grane (j, i) u listi. Lako je videti da je broj potomaka qvora j jednak f (i, j) − f (j, i). Vreme izvrxavaa oba opisana algoritma na modelu EREW je (r, t)
T (n, n) = O(log n)
12.4. Algoritmi za mree raqunara
Mree raqunara mogu se modelirati grafovima, obiqno neusmerenim. Procesori odgovaraju qvorovima, a dva qvora su povezana granom ako postoji direktna veza izmeu odgovarajuih procesora. Svaki procesor ima svoju lokalnu memoriju, a posredstvom mree moe da pristupi lokalnim memorijama drugih procesora. Prema tome, sva memorija se moe deliti, ali cena pristupa nekoj promen ivoj zavisi od lokacija procesora i promen ive. Pristup e enoj promen ivoj moe biti brz koliko i lokalni pristup (ako je promen iva u istom procesoru), ili toliko spor koliko i prolazak kroz celu mreu (u sluqaju kad graf ima oblik niza povezanih qvorova). Trajae pristupa je negde izmeu ove dve krajnosti. Procesori komuniciraju razmenom poruka. Kad procesor eli da pristupi promen ivoj smextenoj u lokalnoj memoriji drugog procesora, on xa e poruku sa zahtevom za promen ivom. Poruka se usmerava kroz mreu.
310
12. PARALELNI ALGORITMI
Vixe razliqitih grafova koriste se za mree raqunara. Najjednostavniji meu ima su linearni niz, prsten, binarno stablo, zvezda i dvodimenzionalna mrea. Efikasnost komunikacije raste sa brojem grana u mrei. Meutim, grane su skupe | to se moe objasniti poveaem povrxine koju zauzimaju veze, a time poveaem dimenzija mree i vremena komunikacije. Zbog toga se obiqno trai kompromis. Ne postoji tip grafa koji je univerzalno dobar. Pogodnost odreenog grafa bitno zavisi od naqina komuniciraa u konkretnom algoritmu. Meutim, postoje neke osobine grafova, koje mogu biti vrlo korisne. U nastavku emo ih navesti, zajedno sa primerima mrea raqunara. Bitan parametar mree je dijametar odgovarajueg grafa, tj. najvee rastojae neka dva qvora. Dijametar odreuje maksimalni broj grana na putu poruka do odredixta. Dvodimenzionalna mrea n × n ima dijametar 2n, a kompletno binarno stablo sa n qvorova ima dijametar 2 log (n + 1) − 2. prema tome moe da isporuqi poruku mnogo bre nego dvodimenzionalna mrea. S druge strane, stablo ima usko grlo, jer sav saobraaj iz jedne u drugu polovinu stabla prolazi kroz koren. Dvodimenzionalna mrea nema usko grlo i vrlo je simetriqna, xto je vano za algoritme u kojima je komunikacija simetriqna. Hiperkocka je popularna struktura koja kombinuje prednosti visoke simetrije, malog dijametra, mnoxtva alternativnih puteva izmeu dva qvora i odsustva uskih grla. d-dimenzionalna hiperkocka sastoji se od n = 2 procesora. Adrese procesora su brojevi od 0 do 2 − 1. Prema tome, svaka adresa se sastoji od d bita. Procesor P je povezan sa procesorom P ako i samo ako se i razlikuje od j na taqno jednom bitu. Rastojae izmeu proizvo na dva procesora je uvek ≤ d, jer se od P do P moe doi promenom najvixe d bita, jednog po jednog. Na slici 5 prikazana je qetvorodimenzionalna hiperkocka. Hiperkocka obezbeuje bogatstvo veza, jer postoji mnogo razliqitih puteva izmeu svaka dva procesora (odgovarajui biti mogu se meati proizvo nim redosledom). Hiperkocka se moe takoe kombinovati sa mreom, na primer umeui mree na strane hiperkocke. U primeni se pojav uju i druge strukture mrea. 2
d
d
i
j
i
u
j
u u
u
u u
u u
u u
u u
u u
u
u
Ris. 5. Qetvorodimenzionalna hiperkocka.
12.4. ALGORITMI ZA MREE RAQUNARA
311
12.4.1. Sortirae na nizu. Razmotriemo najpre jednostavan problem sortiraa na nizu procesora. Na raspolagau je n procesora P , P , . . . , P i zadato je n brojeva x , x , . . . , x . Svaki procesor quva jedan ulazni podatak. Ci je preraspodeliti brojeve meu procesorima tako da najmai od ih bude u P , sledei u P , itd. U opxtem sluqaju mogue je dode ivanje vixe ulaznih podataka jednom procesoru. Videemo da se algoritam moe prilagoditi i takvim uslovima. Procesori su povezani u linearni niz: procesor P je povezan sa procesorom P , i = 1, 2, . . . , n − 1. Poxto svaki procesor moe da komunicira samo sa susedima, uporeivae i razmenu podataka mogue je vrxiti samo izmeu elemenata koji su susedni u nizu. U najgorem sluqaju algoritam zahteva izvrxavae n − 1 koraka, koliko je potrebno da se podatak premesti sa jednog na drugi kraj niza. Algoritam se u osnovi izvrxava na sledei naqin. Svaki procesor uporeuje svoj broj sa brojem jednog od svojih suseda, razmeuje brojeve ako je ihov redosled pogrexan, a zatim isti posao obav a sa drugim susedom (susedi se moraju smeivati, jer bi se u protivnom uporeivali uvek isti brojevi). Isti proces nastav a se sve dok brojevi ne budu poreani na e eni naqin. Koraci se dele na neparne i parne. U neparnim koracima procesori sa neparnim indeksom uporeuju svoje sa brojevima svojih desnih suseda; u parnim koracima procesori sa parnim indeksom uporeuju svoje sa brojevima svojih desnih suseda (slika 6). Na taj naqin su svi procesori sinhronizovani i uporeivae uvek vrxe procesori koji to i treba da rade. Ako procesor nema odgovarajueg suseda (na primer prvi procesor u drugom koraku), on u toku tog koraka miruje. Ovaj algoritam se zove sortirae parno-neparnim transpozicijama, videti sliku 7. Primer rada algoritma prikazan je na slici 8. Primetimo da se u ovom primeru sortirae zavrxava posle samo xest koraka. Ipak, raniji zavrxetak texko je otkriti u mrei. Prema tome, bo e je ostaviti algoritam da se izvrxava do svog zavrxetka u najgorem sluqaju. 1
1
1
2
2
n
n
2
i
i+1
x1
x2
x3
x4
x5
x6
x7
x8
Ris. 6. Sortirae parno-neparnim transpozicijama.
Algoritam Sortiranje na nizu izgleda prirodno i jasno, ali dokaz ispravnosti egovog rada nije trivijalan. Na primer, elemenat se u nekim koracima moe uda avati od svog konaqnog poloaja. U primeru na slici 8
312
12. PARALELNI ALGORITMI
Algoritam Ulaz: (vektor sa elemenata, pri qemu je u procesoru ). Izlaz: (sortirani vektor, tako da je -ti najmai elemenat u ). Sortiranje na nizu(x, n);
x
n
xi
x
begin
Pi
i
Pi
puta i P uporeuju svoje elemente i po potrebi ih razmeuju; {za sve i, takve da je 1 < 2i ≤ n} i P uporeuju svoje elemente i po potrebi ih razmeuju; {za sve i, takve da je 1 ≤ 2i < n} {ako je n neparno, ovaj korak se izvrxava samo bn/2c puta}
do in parallel dn/2e P2i−1 P2i
end
2i
2i+1
Ris. 7. Algoritam za sortirae na nizu procesora. 7
3
6
5
8
1
4
2
3
7
5
6
1
8
2
4
3
5
7
1
6
2
8
4
3
5
1
7
2
6
4
8
3
1
5
2
7
4
6
8
1
3
2
5
4
7
6
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
Ris. 8. Primer sortiraa parno-neparnim transpozicijama.
broj 5 se kree ulevo dva koraka pre nego xto poqne sa kretaem udesno, a 3 ide do levog kraja i ostaje tamo tri koraka pre nego xto krene nazad udesno. Dokaz ispravnosti rada paralelnih algoritama nije jednostavan, zbog meuzavisnosti delovaa razliqitih procesora. Ponaxae jednog procesora utiqe na sve ostale procesore, pa je obiqno texko usredsrediti se na jedan procesor i dokazati da je to xto on radi ispravno; moraju se posmatrati svi procesori zajedno. Teorema 12.1. Na kraju izvrxavaa algoritma Sortiranje na nizu, dati brojevi su sortirani. Dokazatel~stvo. Dokaz se izvodi indukcijom po broju elemenata. Pri tome se tvree malo pojaqava: sortirae se zavrxava posle n koraka, bez obzira da li je prvi korak paran ili neparan. Za n = 2 sortirae se zavrxava posle najvixe dva koraka; sortirae traje dva koraka ako je prvi korak
12.4. ALGORITMI ZA MREE RAQUNARA
313
neparan. Pretpostavimo da je teorema taqna za n procesora, i posmatrajmo sluqaj n + 1 procesora. Skoncentriximo pau na maksimalni elemenat, i pretpostavimo da je to x (u primeru na slici 8 to je x ). U prvom koraku x se uporeuje sa x ili x , zavisno od toga da li je m parno ili neparno. Ako je m parno, nema zamene jer je x vee od x . Ishod je isti kao u sluqaju da je broj x na poqetku bio u procesoru P , i da je zamena bila izvrxena. Prema tome, bez gubitka opxtosti moe se pretpostaviti da je m neparno. U tom sluqaju broj x se uporeuje sa x , zameuje, i kao najvei se premexta korak po korak udesno (dijagonalno na slici 8), sve dok ne doe na mesto x , a onda ostaje tamo. To je pozicija koju x i treba da zauzme, pa sortirae ispravno tretira maksimalni element. Pokazaemo sada indukcijom da je i sortirae ostalih n elemenata korektno. Da bismo to dokazali, treba da preslikamo akcije n procesora na vektoru duine n + 1 na mogui rad n − 1 procesora na vektoru duinee n. To se moe uraditi na sledei naqin. Posmatrajmo dijagonalu nastalu kretaem maksimalnog elemenata (videti sliku 9). Uporeivaa u kojima uqestvuje maksimalni elemenat se ignorixu. Uporeivaa delimo na dve grupe, ona ispod, i ona iznad dijagonale. Zatim "transliramo" trougao iznad dijagonale za jedno po e nanie i jedno po e ulevo. Drugim reqima, za uporeivaa u gorem trouglu korak i se sada zove i+1. Na primer, posmatrajmo uporeivaa 1 sa 8 i 4 sa 2 u prvom koraku na slici 8. Prvo uporeivae je na dijagonali, pa se ignorixe; drugo je iznad dijagonale, pa se smatra delom koraka 2, umesto koraka 1. Prema tome, korak 2 sastoji se od uporeivaa 7 sa 5, 6 sa 1, i 4 sa 2. Meutim, ovo je regularni parni korak sa samo n elemenata. Korak 1 i sva uporeivaa u kojima uqestvuje maksimalni elemenat se sada mogu prosto ignorisati, posle qega su preostala uporeivaa identiqna sa nizom uporedjivaa koja se izvode pri izvrxavau algoritma sa n elemenata (pri qemu je prvi korak neparan). Prema induktivnoj hipotezi sortirae n elemenata se izvodi korektno; prema tome, i sortirae svih n + 1 elemenata je korektno, a zavrxava se posle n + 1 koraka. ¤ m
m−1
5
m
m
m−1
m−1
m
n+1
m
m+1
m+1
m
Ris. 9. Korak indukcije u dokazu ispravnosti sortiraa parno-neparnim transpozicijama, Teorema 12.1. Do sada smo razmatrali sluqaj jednog elementa po procesoru. Pretpostavimo sada da svaki procesor pamti k elemenata, i razmotrimo za poqetak
314
12. PARALELNI ALGORITMI
sluqaj samo dva procesora. Pretpostavimo da je ci da procesori meusobno razmene elemente, tako da k najmaih elemenata dou u P , a k najveih u P . Jasno je da u najgorem sluqaju svi elementi moraju biti razmeeni, pa je tada broj razmena elemenata 2k. Sortirae se moe izvesti ponav aem sledeeg koraka sve dok je potrebno: P xa e svoj najvei elemenat u P , a P svoj najmai elemenat u P . Proces se zavrxava u trenutku kad je najvei elemenat u P mai ili jednak od najmaeg elementa u P . Ovaj korak zove se objediavae-razdvajae. Koristei ovaj korak kao osnovni u sortirau parno-neparnim transpozicijama, dobija se uopxtee sortiraa na sluqaj vixe elemenata po procesoru. Iako je ovakav algoritam sortiraa optimalan za niz procesora, egova efikasnost je mala. Imamo n procesora koji izvrxavaju n koraka; prema tome, ukupan broj koraka je n . Mala efikasnost O(log n/n) nije iznenaujua, jer efikasan algoritam za sortirae mora imati mogunost da zameuje mesta meusobno uda enim elementima. Niz procesora ne omoguuje takve zamene. U sledeem ode ku prikazaemo specijalizovane mree za efikasno sortirae. 12.4.2. Mree za sortirae. Kad konstruixemo efikasan sekvencijalni algoritam, interesuje nas samo ukupan broj koraka. U sluqaju konstrukcije paralelnih algoritama, ci je uqiniti korake xto nezavisnijim. Posmatrajmo sortirae objediavaem (ode ak 5.3.3). Dva rekurzivna poziva su potpuno nezavisna i mogu se izvrxiti paralelno. Meutim, objediavae kao deo algoritma izvrxava se na sekvencijalni naqin. U izlazni vektor se i-ti elemenat stav a tek kad je tamo ve stav eno prvih i − 1 elemenata. Ako nam poe za rukom paralelizacija objediavaa, onda emo moi da paralelizujemo i sortirae objediavaem. Opisaemo sada drugaqiji algoritam objediavaa, zasnovan na tehnici dekompozicije. Pretpostavimo zbog jednostavnosti da je n stepen dvojke. Neka su a , a , . . . , a ; b , b , . . . , b dva sortirana niza koje treba objediniti, i neka je x , x , . . . , x rezultat ihovog objediavaa. Specijalno je, na primer, x = min{a , b }. Potrebno je objediniti razliqite delove ovih nizova paralelno, tako da ihovo kompletno objediavae bude jednostavno. Ci se moe postii podelom dva niza na po dva dela | sa neparnim, odnosno parnim indeksima. Svaki deo se objediava sa odgovarajuim delom drugog niza, a onda se kompletira objediavae. Neka je o , o , . . . , o objedieni redosled neparnih nizova a , a , . . . , a ; b , b , . . ., b , a neka je e , e , . . . , e objedinjeni redosled parnih nizova a , a , . . . , a ; b , b , . . . , b . Oqigledno je x = o i x = e . Ostatak objediavaa se takoe lako izvodi, xto sledi iz sledee teoreme. Teorema 12.2. U skladu= max{o sa uvedenim oznakama, za i = 1, 2, . . . , n − 1 vai x = min{o , e } i x , e }. Dokazatel~stvo. Zbog jednostavnosti se pod parnim, odnosno neparnim elementima podrazumevaju elementi nizova a , b sa parnim, odnosno neparnim 1
2
1
2
2
1
1
2
2
1
2
1
n
2
1
1
2
n
2n
1
1
1
1
2n
2i
3
n−1
1
2
4
3
2
n
2
1
4
n
i+1
i
2i+1
i+1
n
n−1
i
i
i
n
2
n
1
1
12.4. ALGORITMI ZA MREE RAQUNARA
315
indeksom. Razmotrimo elemenat e . Poxto je e i-ti elemenat u sortiranom redosledu parnih nizova, e je vee ili jednako od bar i parnih elemenata u oba niza. Meutim, svakom parnom elementu koji je ≤ e odgovara jox jedan neparni elemenat koji je takoe ≤ e (jer smo poxli od dva sortirana niza). Prema tome, e je vee ili jednako od bar 2i elemenata iz oba niza. Drugim reqima, ustanovili smo da je e ≥ x . Na sliqan naqin, o je vee ili jednako od bar i + 1 neparnih elemenata, iz qega sledi da je vee ili jednako od bar 2i elemenata ukupno (za svaki neparan elemenat sem prvog, koji je ≤ o , postoji jox jedan parni elemenat koji je ≤ o ). Prema tome, vai i nejednakost o ≥ x . Specijalno, za i = n − 1 dobija se e ≥x i o ≥ x , pa poxto je e = x , tvree teoreme je taqno za i = n − 1. Stav ajui da e u gore nejednakosti redom i = n − 2, n − 3, . . . , 1, dobijamo da je tvree teoreme taqno i za ostale vrednosti i, qime je zavrxen dokaz teoreme. ¤ Vana posledica Teoreme 12.2 je da se kompletno objediavae nizova o , o , . . . , o i e , e , . . . , e izvrxava u jednom paralelnom koraku. Ostatak posla izvrxavaju rekurzivni pozivi opisanog algoritma. Konstrukcija paralelnog algoritma sledi direktno iz teoreme. Slika 10 ilustruje rekurzivnu konstrukciju objediavaa, a slika 11 pokazuje kompletno sortirae, koje se zove sortirae parno-neparnim objediavaem. Pravougaonici na levoj strani slike 11, oznaqeni sa "n/2 sortirae", predstav aju rekurzivne kopije kompletne mree za sortirae, koje sortiraju po n/2 brojeva. i
i
i
i
i
i
i
2i
i+1
i+1
i+1
i+1
2i
n−1
n
1
2
n
2n−2
n
2n−2
2n
1
2
a1 a2 a3 a4 a5 a6 a7 a8
t t t t t t t t
b1 b2 b3 b4 b5 b6 b7 b8
t t t t t t t t
n
n 2
=4
n 2
=4
kolo za objediavae
kolo za objediavae
o1 o2 e1 o3 e2 o4 e3 o5 e4
t x1 t x2 t x3 t x4 t x5 t x6 t x7 t x8 t x9
o6 e5 o7 e6 o8 e7 e8
tx10 tx11 tx12 tx13 tx14 tx15 tx16
Ris. 10. Kolo za parno{neparno objediavae dva niza od po n = 8 elemenata.
316
12. PARALELNI ALGORITMI x1 x2 x3 x4 x5 x6 x7 x8
t t t t t t t t
x9 x10 x11 x12 x13 x14 x15 x16
t t t t t t t t
n 2
t t t t t t t t
=8
kolo za sortirae
n 2
kolo za sortirae
=4
n 4
=4
t xs (1) t xs (2) t xs (3) t xs (4) t xs (5) t xs (6) t xs (7) t xs (8) t xs (9)
kolo za objediavae
t t t t t t t t
=8
n 4
t xs (10) t xs (11) t xs (12) t xs (13) t xs (14) t xs (15) t xs (16)
kolo za objediavae
Ris. 11. Primer sortiraa 16 brojeva pomou kola za sortirae parno-neparnim objediavaem. Sloenost. Diferencna jednaqina za ukupan broj koraka T (n) za objediavae je T (2n) = 2T (n)+n−1, T (1) = 1. Iz toga sledi da je ukupan broj uporeivaa O(n log n), u poreeu sa sekvencijalnim algoritmom koji zahteva samo O(n) koraka. Dubina rekurzije, koja odgovara paralelnom vremenu, je O(log n). Diferencna jednaqina za ukupan broj koraka T (n) za sortiranje parno{neparnim objediavaem je T (2n) = 2T (n) + O(n log n), T (2) = 1. eno rexee je T (n) = O(n log n) (videti npr. analizu sloenosti algoritma iz ode ka 7.5.2). Mrea sadri po n procesora u svakoj "koloni", a ena dubina (tj. broj kolona) je O(log n), pa je ukupan broj procesora u mrei O(n log n). Primetimo da bi se istih n procesora mogli koristiti u svim kolonama, ali oni bi tada morali biti skoro potpuno ispovezivani. Jedini tip izraqunavaa u mrei je uporeivae i eventualna zamena, pa su potrebni jednostavni procesori koji se sastoje od komparatora sa dva ulaza i dva izlaza. 12.4.3. Nalaee k-tog najmaeg elementa na stablu. Pretpostavimo sada da je mrea raqunara kompletno binarno stablo visine h − 1 sa n=2 listova, odnosno 2 − 1 procesora, pridruenih qvorovima stabla. Ulaz je niz x , x , . . . , x , pri qemu se u poqetnom trenutku x quva u listu i. Raqunari u obliku stabla koriste se npr. u vezi sa obradom slika, pri qemu listovi odgovaraju elementima ulaznog niza a algoritmi koji ih obrauju M
M
M
M
S
S
2
S
S
S
2
2
h−1
h
1
2
n
i
12.4. ALGORITMI ZA MREE RAQUNARA
317
su hijerarhijski. Ovde emo razmotriti problem nalaea k-tog najmaeg elementa. Podsetimo se najpre sekvencijalnog algoritma za nalaee k-tog najmaeg elementa, opisanog u ode ku 5.4.2. Zbog jednostavnosti pretpostavimo da su elementi niza razliqiti. Algoritam je probabilistiqki. U svakom koraku bira se sluqajni elemenat x kao pivot. Rang elementa x izraqunava se uporedjivaem x sa svim ostalim elementima, a onda se eliminixu elementi koji su mai ili vei od x, zavisno od toga da li je rang mai ili vei od k. Izvrxavae algoritma obustav a se u trenutku kad je rang pivota k. Oqekivani broj iteracija je O(log n), a oqekivani broj uporeivaa je O(n). Postoje tri razliqite faze u svakoj iteraciji algoritma: (1) izbor sluqajnog elementa, (2) izraqunavae egovog ranga, i (3) eliminacija. Opisaamo efikasnu paralelnu realizaciju svake od faza. Izbor sluqajnog elementa moe se postii organizovaem turnira na stablu. Svaki list xa e svoj broj ocu, gde se on "takmiqi" sa brojem brata. Pobednik u partiji odreuje se bacaem novqia. Broj koji je pobedio prelazi u drugo kolo takmiqea | ide uvis po stablu. Proces se nastav a sve dotle dok koren stabla ne izabere taqno jedan broj kao ukupnog pobednika (ovaj postupak je regularan samo u prvoj iteraciji; razmotriemo kasnije kako ga treba popraviti, da bi radio ispravno i kad su neki elementi eliminisani). Broj{ pobednik se zatim xa e niz stablo do svih listova, nivo po nivo; u procesu slaa uqestvuje svaki qvor stabla, xa ui dobijeni broj i levom i desnom sinu. Poxto svi listovi saznaju koji je broj pivot, oni svoje brojeve mogu da uporede sa pivotom u jednom paralelnom koraku. Listovi zatim xa u navixe, svom ocu, jedinicu, ako je ihov broj mai ili jednak od pivota, odnosno nulu u protivnom. Rang pivota je broj jedinica poslatih navixe. Sabirae brojeva koji se xa u navixe lako se izvodi tako xto svaki qvor sabira brojeve dobijene od sinova. Posle toga koren xa e nanie rang pivota, i svaki list moe nezavisno da ustanovi da li treba eliminixe svoj broj. Ukupno postoje qetiri "talasa" komunikacije u svakoj iteraciji: (1) uz stablo da bi se izabrao pivot, (2) niz stablo, da bi se pivot poslao do listova, (3) uz stablo, da bi se izraqunao rang pivota, i (4) niz stablo se xa e rang pivota. Posle prve iteracije pojav uje se jedan problem; poxto su neki elementi eliminisani, takmiqari vixe nisu ravnopravni. Posmatrajmo, na primer, ekstremni sluqaj kad su u jednoj polovini stabla eliminisani svi listovi sem jednog. Preostali elemenat u toj polovini stabla "provui" e se do "finala" bez ikakvog takmiqea, a onda e biti izabran sa verovatnoom 1/2, dok je verovatnoa izbora ostalih elemenata mnogo maa. Voleli bismo da oquvamo uniformnost raspodele verovatnoa prilikom izbora pivota u svakoj iteraciji. Uniformnost se moe oquvati na sledei naqin. Procesori, qiji su brojevi eliminisani u prethodnim kolima, xa u navixe specijalnu vrednost nil, koju svaki elemenat pobeuje. Svakom elementu koji uqestvuje u takmiqenju pridruuje se brojaq, qija je poqetna vrednost 1. Brojaq pokazuje koliko je
318
12. PARALELNI ALGORITMI
stvarnih "protivnika" uqestvovalo u delu turnira, iz koga je elemenat izaxao kao pobednik (odnosno broj neeliminisanih elemenata u podstablu qvora, u kome se nalazi elemenat). Kad elemenat pobedi u partiji u nekom qvoru stabla, on se upuuje navixe, a vrednost egovog brojaqa poveava se za vrednost brojaqa egovog poraenog protivnika (kao u filmu "Gorxtak"). Partije se odigravaju sa "nesimetriqnim" novqiem, kod koga je odnos verovatnoa nule i jedinice jednak odnosu vrednosti brojaqa dva takmiqara. Ako su brojaqi igraqa p, odnosno q, onda prvi igraq pobeuje sa verovatnoom p/(p + q), a drugi sa verovatnoom q/(p + q). Na primer, ako je u prvoj partiji x pobedio igraqa y, a z proxao da e bez borbe, onda brojaqi elemenata x, odnosno z imaju vrednosti 2, odnosno 1. U igri x protiv z koristi se novqi koji je nakloen elementu x, odnosno dode uje mu prednost u odnosu 2 : 1. Rezultat je da z ima verovatnou 1/3 pobede u ovoj partiji, a x i y sa verovatnoom (1/2) · (2/3) = 1/3 pobeuju u obe svoje partije. Indukcijom se pokazuje da ovakav proces izbora obezbeuje da u svakom kolu svi elementi se jednakom verovatnoom mogu biti izabrani za pivot. Sloenost. Broj paralelnih koraka u svakoj iteraciji jednak je qetvorostrukoj visini stabla. Poxto ovaj algoritam eliminixe elemente na potpuno isti naqin kao i sekvencijalni algoritam, oqekivani broj iteracija je O(log n). Prema tome, oqekivano vreme izvrxavaa je O(log n). 12.4.4. Mnoee matrica na dvodimenzionalnoj mrei. Mrea raqunara koju emo sada razmotriti je dvodimenzionalna mrea n × n. Procesor P [i, j] nalazi se u preseku i-te vrste i j-te kolone, i povezan je sa procesorima P [i, j + 1], P [i + 1, j], P [i, j − 1] i P [i − 1, j]. Pretpostav a se da su suprotni krajevi mree meusobno povezani, odnosno da mrea liqi na torus. Tako, na primer, P [0, 0] je povezan sa P [0, n−1] i P [n−1, 0], pored P [0, 1] P [1, 0], videti sliku 12. Drugim reqima, sva sabiraa i oduzimaa indeksa vrxe se po modulu n. Algoritam koji prikazujemo je simetriqniji i elegantniji uz ovu pretpostavku; egovo vreme izvrxavaa jednako je (do na konstantni faktor) vremenu izvrxavaa na obiqnoj mrei (onoj koja nije presavijaem povezana kao torus). Problem. Date su dve n × n matrice A i B, tako da su ihovi elementi A[i, j] i B[i, j] u procesoru P [i, j]. Izraqunati C = AB , tako da elemenat C[i, j] bude u procesoru P [i, j]. Koristiemo obiqan algoritam za mnoee matrica. Problem je premestiti podatke tako da se pravi brojevi nau na pravom mestu u pravom trenutku. Posmatrajmo elemenat C[0, 0] = P A[0, k] · B[k, 0], koji je jednak proizvodu prve vrste matrice A i prve kolone matrice B; Redni brojevi vrsta i kolona su pri ovakvom oznaqavau za jedan vei od ihovih indeksa. Voleli bismo da broj C[0, 0] bude izraqunat u procesoru P [0, 0]. Ovo se moe postii cikliqkim pomeraem prve vrste A ulevo, i istovremenim cikliqkim pomeraem prve kolone B uvis, korak po korak. U prvom koraku P [0, 0] sadri A[0, 0] i B[0, 0] 2
n−1 k=0
12.4. ALGORITMI ZA MREE RAQUNARA v
v
v
v
v
v
v
v
v
v
v
v
v
v
v
v
319
Ris. 12. Dvodimenzionalna presavijena mrea. i izraqunava ihov proizvod; u drugom koraku P [0, 0] dobija A[0, 1] (od desnog suseda) i B[1, 0] (od suseda ispod sebe) i ihov proizvod dodaje parcijalnoj sumi, itd. Vrednost C[0, 0] se tako izraqunava posle n koraka. Problem je obezbediti da svi procesori obav aju isti ovakav posao, a svi moraju da dele podatke meusobno. Potrebno je da podatke preuredimo tako da ne samo P [0, 0], nego i svi ostali procesori dobiju sve potrebne podatke. Ideja je da se podaci u matricama ispremextaju na takav naqin, da svaki procesor u svakom koraku dobije dva broja qiji proizvod treba da izraquna. Bitan je dakle poqetni raspored podataka. Preurediemo ih tako da na poqetku procesor P [i, j] ima elemente A[i, i + j] i B[i + j, j], odnosno da drugi indeks elementa A bude jednak prvom indeksu elementa B (pri qemu se, kao xto je reqeno, indeksi raqunaju po modulu n). Poxto se formira ovakav raspored, svaki korak se sastoji od istovremenog cikliqkog pomeraa vrsta A i kolona B, qime P [i, j] dobija elemente A[i, i + j + k] i B[i + j + k, j], 0 ≤ k ≤ n − 1, upravo one elemente koji su mu potrebni. Do poqetnog rasporeda moe se doi cikliqkim pomeraem vrste A sa indeksom i za i mesta ulevo, a kolone B sa indeksom i za i mesta navixe, i = 0, 1, . . . , n − 1. Algoritam je prikazan na slici 13. U tabeli 1 prikazano je formirae poqetnog rasporeda elemenata matrica za n = 4. Leva strana pokazuje poqetno stae podataka, a desna ihov razmextaj posle izvrxavaa poqetnih cikliqkih pomeraa. Sloenost. Poqetna cikliqka pomeraa vrsta A traju n/2 paralelnih koraka (kad broj pomeraa postane vei od n/2, pomeraa se izvode u suprotnom smeru | udesno umesto ulevo); isto vai i za poqetna pomeraa kolona B . U narednih n koraka izvode se u svakom procesoru izraqunavaa i pomeraa. Ti koraci mogu se izvrxiti paralelno. Ukupno vreme izvrxavaa je O(n). Efikasnost algoritma je O(1), ako uporeujemo paralelni algoritam sa
320
12. PARALELNI ALGORITMI
Algoritam Ulaz: i ( matrice). Izlaz: (proizvod ).
Mnoˇ zenje matrica(A, B);
A
B n×n
C
AB
begin
for i := 0 to n − 1 do in parallel
cikliqki pomeri ulevo vrstu i matrice A za i mesta; {odnosno, izvrxi A[i, j] := A[i, (j + 1) mod n] i puta} for j := 0 to n − 1 do in parallel cikliqki pomeri navixe kolonu j matrice B za j mesta; {odnosno, izvrxi B[i, j] := B[(i + 1) mod n, j] j puta} {podaci su sada na e enim poqetnim pozicijama} for sve parove i, j do in parallel C[i, j] := A[i, j] · B[i, j];
for k := 1 to n − 1 do for
sve parove i, j do in parallel
A[i, j] := A[i, (j + 1) mod n];
B[i, j] := B[(i + 1) mod n, j]; C[i, j] := C[i, j] + A[i, j] · B[i, j] end
Ris. 13. Algoritam za paralelno mnoee matrica na mrei. a00 b00 a10 b10 a20 b20 a30 b30
a01 b01 a11 b11 a21 b21 a31 b31
a02 b02 a12 b12 a22 b22 a32 b32
a03 b03 a13 b13 a23 b23 a33 b33
a01 b10 a12 b20 a23 b30 a30 b00
a02 b21 a13 b31 a20 b01 a31 b11
a03 b32 a10 b02 a21 b12 a32 b22
a00 b03 a11 b13 a22 b23 a33 b33
Tablica 1. Poqetno razmextae elemenata matrica | priprema za paralelno mnoee.
obiqnim sekvencijalnim mnoeem matrica sloenosti O(n ). Efikasnost je asimptotski maa, ako paralelni algoritam uporeujemo sa npr. Xtrasenovim algoritmom. 3
12.5. SISTOLIQKI ALGORITMI
321
12.5. Sistoliqki algoritmi
Sistoliqka arhitektura liqi na pokretnu traku u fabrici. Procesori su obiqno rasporeeni na vrlo pravilan naqin (najqexe u obliku jednodimenzionalnog ili dvodimenzionalnog po a), a podaci se kroz ih ritmiqki pomeraju. Svaki procesor izvrxava jednostavne operacije sa podacima koje je dobio u prethodnom koraku, a svoje rezultate dotura sledeoj "stanici". Svaki procesor moe da sadri malu lokalnu memoriju. Ulazi se najqexe "utiskuju" u sistem jedan po jedan, umesto da se svi odjednom upixu u neke memorijske lokacije. Prednost sistoliqke arhitekture je efikasnost, i u hardverskom pogledu (procesori su specijalizovani i jednostavni) i u pogledu brzine (minimiziran je broj pristupa memoriji). Kao i na pokretnoj traci, k uqno je da se izbegne potreba za dovlaqeem alata i materijala za vreme rada. Sve xto je potrebno za izvrxavae operacije, dolazi pokretnom trakom. Ozbi an nedostatak ovakvih raqunara je nedovo na fleksibilnost. Sistoliqke arhitekture su efikasne samo za odreene algoritme. Razmotriemo dva primera sistoliqkih algoritama. 12.5.1. Mnoee matrice i vektora. Zapoqiemo sa jednostavnim algoritmom, koji emo zatim koristiti za razvoj komplikovanijeg algoritma. Problem. Izraqunati proizvod x = Ab matrice A dimenzije m × n i vektora b duine n. Sistem se sastoji od n procesora, tako da procesor P dodaje parcijalnoj sumi qlan u kome je qinilac b , i-ta komponenta vektora b. Kretae podataka i operacije koje izvrxava svaki od procesora prikazani su za n = m = 4 na slici 14. Pretpostav amo da se vektor b nalazi u odgovarajuim procesorima (ili je u ih ubaqen korak po korak). Rezultati se akumuliraju tokom kretaa sleva udesno kroz procesore. Izlazne promeive x na poqetku imaju vrednost 0. U prvom koraku se x (= 0) zajedno sa a ubacuje u P , a svi ostali ulazi napreduju jedan korak na putu ka procesorima. Procesor P izraqunava x + a · b , i rezultat prosleuje udesno. U drugom koraku P prima sleva x = a · b i odozgo a , pa izraqunava x + a · b , rezultat prosleuje udesno, itd. U i-tom koraku izraqunavaa x procesor P prima sleva parcijalni rezultat x = P a b , odozgo odgovarajui elemenat matrice a , a odgovarajuu koordinatu b bilo iz lokalne memorije (kao na slici), bilo odozdo. Procesor P izraqunava vrednost izraza x + a b i predaje je da e, udesno. U trenutku napuxtaa niza procesora, posle n koraka, x oqigledno sadri e enu vrednost. Izraqunavae x prati " u stopu" izraqunavae x i zavrxava se u (n + 1)-om koraku. Drugim reqima, izraqunavaa x i x su vremenski skoro potpuno preklop ena. Uopxte, izraqunati elemenat x pojav uje se na izlazu posle n+j −1 koraka, j = 1, 2, . . . , m, a kompletan proizvod izraqunava se posle m + n − 1 koraka. i
i
i
1
11
1
1
1
11
1
1
11
2
1
12
1
1
12
1
i−1 k=1
2
i
1k k
1i
i
i
1
1i i
1
2
1
1
2
j
322
12. PARALELNI ALGORITMI a41 a31 a21 a11
a ? x = x + ab xu i u - b -
x4 x3 x2 x1
a44 a34 a24 a14
a43 a33 a23 a13
a42 a32 a22 a12
IZLAZ
? ? ? ? - b1 - b2 - b3 - b4 -
Ris. 14. Mnoee vektora matricom. Osnovni problem pri konstrukciji sistoliqkih algoritama je organizacija kretaa podataka. Svaki podatak mora se nai na pravom mestu u pravom trenutku. U ovom primeru to je postignuto uvoeem kaxea, tako da poqetak i-te kolone matrice A stie u procesor P u koraku i. Ovaj primer je jednostavan, jer se svaki elemenat matrice A koristi samo jednom. Kad se ista vrednost koristi vixe puta, mnogo je komplikovanije organizovati eno kretae, xto emo videti u sledeem primeru. 12.5.2. Izraqunavae konvolucije. Neka su x = (x , x , . . . , x ) i w = (w , w , . . . , w ) dva realna vektora, pri qemu je k < n. Konvolucija vektora x i w je vektor y = (y , y , . . . , y ), sa koordinatama i
1
1
2
2
n
k
1
2
n+1−k
yi = w1 xi + w2 xi+1 + · · · wk xi+k−1 ,
i = 1, 2, . . . , n + 1 − k.
Problem. Izraqunati konvoluciju y vektora x i w.
Problem izraqunavaa konvolucije moe se svesti na problem izraqunavaa proizvoda matrice i vektora na sledei naqin: x1 x2 x3 ··· xk w1 y1 x2 w2 y2 x x · · · x 3 4 k+1 x3 x4 x5 · · · xk+2 w3 = y3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · · · · · · xn+1−k xn+2−k xn+3−k · · · xn wk yn+1−k
Sistoliqki algoritam koji rexava ovaj problem moe se dobiti kao specijalni sluqaj opxtijeg algoritma za izraqunavae proizvoda matrice i vektora (videti prethodni problem, slika 14). Ovo je prikazano na slici 15. Primetimo da se x istovremeno koristi du celog niza procesora (sem prvih k − 1 vrednosti x , koje se koriste samo u poqetnom delu niza). Zbog toga je potrebna linija za prostirae. Prikazaemo sada rexee problema konvolucije bez prostiraa. Procesori na slici 15 primaju dva ulaza, a daju samo jedan izlaz. Upotrebiemo sada procesore koji primaju ulaze iz dva smera, i xa u izlaz u i
i
12.6. REZIME x5 x4 x3 x2 x1 y2
? - w1
y1
x5 x4 x3 x2 ? - w2
323 x5 x4 x3
? - w3
x5 x4
IZLAZ
? - w4
-
Ris. 15. Konvolucija sa prostiraem. dva smera. Ideja je pomerati vektor x sleva udesno, a vektor w zdesna ulevo. Rezultat y akumulira se u procesorima. Kretae podataka treba tako podesiti da se odgovarajue koordinate w i x sretnu tamo gde treba da budu pomnoene. Problem je u tome xto, kad se dva vektora kreu jedan prema drugom, onda je brzina jednog vektora u odnosu na drugi dvostruko vea. Posledica ove qienice je da bi jedan elemenat vektora x propustio polovinu elemenata vektora w, i obrnuto. Rexee je pomerati vektore dvostruko maom brzinom. Ulaz sleva je dakle "x , nixta, x , nixta, ...", a zdesna isto to za vektor w. Rexee je prikazano na slici 16 (crne taqke odgovaraju odsutnim podacima). 1
wu ¾wi ¾ y xu xi y = y + wu xu xi = xu wi = wu
2
w1 ¾ ¾ ¾ ¾ y3 •- y2 xy1 •- y4 x2 1
x3
?
? -
? -
•
w2
IZLAZ -
? -
Ris. 16. Konvolucija pomou dvosmernog niza.
Prepuxtamo qitaocu da se uveri da svaki procesor P na kraju izraqunava vrednost y . Kad w napusti P , izraqunata je konaqna vrednost y , pa se podaci mogu "izruqiti" iz niza procesora putem naznaqenim ispod niza procesora na slici 16. Nedostatak kretaa podataka dvostruko maom brzinom je u tome xto izraqunavae traje dvostruko due. i
i
k
i
i
12.6. Rezime
Poxto je paralelne algoritme komplikovanije konstruisati od sekvencijalnih, korisno je xto vixe upotreb avati gotove blokove. Jedan od takvih monih blokova je algoritam za paralelno izraqunavae prefiksa, koji je qak predlagan za primitivnu maxinsku instrukciju. Texko je u ovom trenutku proceniti koje e od razmatranih paralelnih arhitektura (odnosno da li e
324
12. PARALELNI ALGORITMI
neka od ih) dominirati u budunosti. Zbog toga je vano identifikovati tehnike projektovaa algoritama zajedniqke za vixe modela. Analizirali smo qetiri takve tehnike: udvostruqavae (odreivae rangova elemenata liste i druge operacije sa povezanim listama), paralelnu varijantu dekompozicije (sabirae, paralelno izraqunavae prefiksa, sortirae), preklapae (kod sistoliqkih algoritama), i tehniku Ojlerovog obilaska (koja je korisna kod mnoxtva algoritama za rad sa stablima, odnosno grafovima).
Zadaci
12.1. Konstruisati algoritam za sabirae k n-bitnih binarnih brojeva. Vreme izvrxavaa algoritma na nk procesora treba da bude O(log n log k). 12.2. Dokazati da je za izvrxavae algoritma Rangovi (slika 12.3) dovo an model EREW. 12.3. Modifikovati CRCW algoritam za nalaee maksimuma (ode ak 12.3.2.2) tako da radi i ako dati brojevi nisu svi razliqiti, a da vreme izvrxavaa i da e bude O(1). 12.4. U vektoru A duine n treba vrednost A[1] prekopirati na sve ostale lokacije. (a) Konstruisati EREW algoritam za rexavae ovog problema, sloenosti T (n, n) = O(log n). (b) Konstruisati EREW algoritam efikasnosti O(1) za rexavae ovog problema, sa vremenom izvrxavaa O(log n). 12.5. Konstruisati algoritam za raqunar sa zajedniqkom memorijom i n procesora, model EREW, koji na lokaciju A[i] vektora A, smexta vrednost A[1] + i, 1 < i ≤ n. 12.6. Paralelizovati Hornerovu xemu za izraqunavae vrednosti polinoma stepena n na modelu EREW, tako da sloenost, odnosno efikasnost algoritma, budu redom O(log n), odnosno O(1). 12.7. Konstruisati algoritam za izraqunavae disjunkcije n Bulovih promen ivih na modelu CRCW za vreme O(1). 12.8. Konstruisati kolo za rexavae problema paralelnog prefiksa, dubine O(log n) sa O(n log n) qvorova, tako da svaki procesor (elemenat kola) ima najvixe dva ulaza i dva izlaza. 12.9. Konstruisati algoritam za sortirae niza razliqitih brojeva x , x , . . . , x , vremenske sloenosti O(log n), na paralelnom CREW raqunaru sa zajedniqkom memorijom i dovo nim brojem procesora. 12.10. Konstruisati CRCW algoritam za objediavae dva sortirana niza A i B u jedan sortirani niz, za vreme O(1). Na raspolagau je neograniqen broj procesora i neograniqen memorijski prostor. 12.11. Kronekerov proizvod vektora A[0], A[1], ..., A[n−1] i B[0], B[1], ..., B[m−1] se definixe kao vektor C[0], C[1], ..., C[nm−1] sa elementima C[km+r] = A[k]B[r], 0 ≤ k ≤ n−1, 0 ≤ r ≤ m −1 (drugim reqima, C sadri n× m matricu qiji (i, j) elemenat je A[i]B[j]). Konstruisati paralelni EREW algoritam za izraqunavae C pomou p procesora za vreme O(mn log p/p). Na raspolagau je memorijski prostor O(mn) (moe se pretpostaviti da su n, m i p stepeni dvojke). 12.12. Zadat je vektor, qiji su elementi slogovi. Svaki slog sadri neke podatke i Bulovu promen ivu Oznaka. Ci je prepakovati na poqetak vektora sve slogove, kojima po e Oznaka ima vrednost 1. Redosled premextenih slogova treba da ostane nepromeen. Konstruisati EREW algoritam sloenosti T (n, n) = O(log n) za rexavae ovog problema. 1
2
n
ZADACI
325
12.13. Data je povezana lista, qiji su elementi proizvo nim redosledom smexteni u vektoru. Neka je F [i] Bulova promen iva pridruena i-tom elementu liste. Konstruisati EREW algoritam sloenosti T (n, n) = O(log n) za formirae druge povezane liste, koja se sastoji samo od onih elemenata za koje je F [i] = 1, i to istim redom kojim se elementi pojav uju u polaznoj listi (ovaj algoritam potreban je, na primer, za izvrxee dolazne numeracije u ode ku 12.3.5). 12.14. Data je povezana lista, qiji su elementi (proizvo nim redosledom) smexteni u vektoru. Konstruisati efikasan paralelni algoritam za formirae povezane liste od istih elemenata u obrnutom redosledu (ne premextajui ni jedan elemenat). Moe se pretpostaviti da je na raspolagau dovo an memorijski prostor za dopunske pokazivaqe. 12.15. Na mrei raqunara u obliku binarnog stabla, pri qemu se u i-tom listu nalazi broj x , 1 ≤ i ≤ n, treba rexiti problem paralelnog prefiksa (po izvrxeu algoritma list i treba da sadri sumu x ? x ? · · · ? x , gde je ? asocijativna operacija koja se izvrxava u jednom koraku). Vreme izvrxavaa treba da bude O(log n). 12.16. Kako treba modifikovati algoritam za nalaee k-tog najveeg broja medju brojevima x , x , . . . , x na stablu (ode ak 12.4.3), tako da radi ispravno i ako brojevi x , x , . . . , x nisu svi razliqiti? 12.17. Procesori, ih n, povezani su u prsten. Procesor sa indeksom i quva (i + 1)-u vrstu date n×n matrice A, i i-ti elemenat datog vektora b = (b , b , . . . , b P) , 0 ≤ i ≤ n−1. Potrebno je izraqunati proizvod x = Ab, tako da na kraju elemenat x = a b bude smexten u procesoru P , 0 ≤ i ≤ n − 1. Konstruisati algoritam vremenske sloenosti O(n) koji rexava ovaj problem. 12.18. Rexiti zadatak 12.17 ako na poqetku procesor P sadri i-tu kolonu matrice i komponentu b . 12.19. Neka je n × n matrica A = (a ) smextena u kvadratnoj mrei istih dimenzija, tako da procesor P [i, j] quva elemenat a . Konstruisati EREW algoritam za transponovae matrice A, vremenske sloenosti O(n). 12.20. U kvadratnoj mrei od n × n procesora svaki procesor sadri po jednu taqku n × n crno-bele slike (bit 1 odgovara crnoj, a 0 beloj boji). Potrebno je pronai povezane komponente slike (dve crne taqke pripadaju istoj komponenti ako postoji put od jedne do druge preko crnih taqaka; svake dve uzastopne taqke na putu su horizontalno ili vertikalno susedne | ne dijagonalno). Sve taqke u istoj komponenti treba da budu oznaqene jedinstvenom oznakom komponente. Na poqetku je taqka (i, j) oznaqena brojem in + j, 0 ≤ i, j ≤ n − 1. Razmotrimo sledei postupak za oznaqavae svake komponente najmaom od oznaka taqaka koje joj pripadaju. U svakom koraku procesor, koji sadri crnu taqku, proverava oznake susedne qetiri taqke. Ako bilo koja od ih ima mau oznaku, onda procesor tu vrednost upisuje kao oznaku svoje taqke. Dokazati da opisani algoritam posle najvixe n koraka korektno oznaqava sve komponente, ali da se za neke ulaze oznaqavae ne moe izvrxiti za mae od cn koraka, gde je c > 0 konstanta. Kako se moe izabrati trenutak za prekid izvrxavaa opisanog postupka? 12.21. Neka je A kvadratna matrica reda n smextena u kvadratnoj mrei na uobiqajeni naqin. Neka su σ i π dve permutacije skupa {0, 1, . . . , n − 1}, takve da je σ smextena u prvoj, a π u drugoj vrsti mree. Konstruisati algoritam sloenosti O(n) za permutovae vrsta A prema σ, a kolona A prema π (najpre vrste). Drugim reqima, vrsta i treba da bude premextena na poziciju σ(i), a kolona j na poziciju π(j). 12.22. Na raspolagau je 2 procesora povezanih u n-dimenzionalnu hiperkocku. Konstruisati algoritam vremenske sloenosti O(n) za nalaee najveeg od 2 zadatih elemenata. i
1
1
1
2
2
i
n
2
n
0
1
n−1
i
T
n−1 k=0
ik k
i
i
i
ij
ij
2
2
n
n
326
12. PARALELNI ALGORITMI
12.23. Konstruisati algoritam za rexavae na n-dimenzionalnoj hiperkocki. Svaki procesor quva jedan broj. Na kraju svaki procesor treba da ima izraqunatu vrednost prefiksa svog elementa. 12.24. Pokazati kako se moe dvodimenzionalna mrea 2 × 2 umetnuti u (k + m)dimenzionalu hiperkocku. 12.25. Paralelni problem traqeva. Pretpostavimo da n = 2 osoba znaju neke traqeve. U svakom koraku svaka osoba moe da komunicira sa nekom drugom osobom (najvixe jednom), i da sa om razmeni sve traqeve koje u tom trenutku zna. Konstruisati redosled komuniciraa, takav da posle log n koraka svaka osoba zna sve traqeve. k
m
k
2
Glava 13
Uputstva i rexea zadataka 13.1. Matematiqka indukcija
1.1. Tvree je taqno za
; za k ≥ 3 je
n = 1, 2
xk − y k = (x + y)(xk−1 − y k−1 ) + xy(xk−2 − y k−2 ),
pa iz pretpostavke da tvree vai za brojeve mae od n sledi da ono vai i za n. Time je matematiqkom indukcijom dokazano da tvree vai za svaki prirodan broj n. 1.2. Izraqunavxi nekoliko prvih zbirova, nasluujemo da je traeni izraz n(n + 1)(n + 2) (ako nikako drugaqije, do ovog izraza se moe doi odreivaem koeficijenata polinoma treeg stepena a + bn + cn + dn , jednakog sumi, tako da izraz bude taqan za n = 1, 2, 3, 4). Dokaz indukcijom je lakxi deo posla. Za n = 1 je izraz taqan (1 · 2 = · 1 · 2 · 3), a ako je taqan za neko n, onda je 1 3
2
3
1 3
nX +1
i(i + 1) =
i=1
1 n(n 3
+ 1)(n + 2) + (n + 1)(n + 2) =
1 (n 3
+ 1)(n + 2)(n + 3),
odnosno izraz je taqan i za n + 1 sabiraka. 1.3. Indukcijom; (−1) k(k + 1)/2 + (−1) (k + 1) = (−1) (k + 1)(k + 2)/2. 1.4. Svaki elemenat a ∈ A moe se napisati u obliku 2 o(a), gde je o(a) neparan broj, "neparna osnova" broja a. Poxto neparnih prirodnih brojeva maih od 2n ima n, a A ima n + 1 brojeva, u A postoje neka dva broja a i b sa jednakim neparnim osnovama, o(a) = o(b); ako je npr. s(a) < s(b), onda a|b. 1.5. Dokaz se moe izvesti indukcijom po n. Ako nejednakost iz zadatka uzmemo kao induktivnu hipotezu, onda je (a + b) = (a + b)(a + b) ≤ (a + b)2 (a + b ). Dokaz bi bio zavrxen ako bismo dokazali da je (a + b)2 (a + b ) ≤ 2 (a + b ). Ovu je pak nejednakost lako dokazati: posle mnoea i sreivaa dobija se da je ona ekvivalentna oqiglednoj nejednakosti (a − b )(a − b) ≥ 0. 1.6. Ako vrste Paskalovog trougla numerixemo poqevxi od 0, onda je suma brojeva u i-toj vrsti jednaka S = 2 . Za i = 0 tvree je taqno. U zbiru brojeva (i + 1)-e vrste se, posle zamene tih brojeva zbirovima po dva broja iz prethodne vrste, svaki broj iz i-te vrste pojav uje taqno dva puta, pa je S = 2 . 1.7. Za n = 2 je + = > . Ako je nejednakost taqna za neko n, onda je k−1
k
2
k
s(a)
n+1
n
n−1
n
1 3
i=n+2
n
1 2n+1
+
n
n+1
n
n
n+1
n
i
i
2(nX + 1)
n−1
n
1 4
1 i
7 12
i+1
i+1 13 24
2n X
=
1 i
−
1 n+1
1 2n+1
−
1 2n+2
i=n+1 13 24
>
+
+ =
13 24
+
1 2n+2
>
1 (2n+1)(2n+2)
>
13 , 24
pa je nejednakost taqna i za n + 1. Prema tome, nejednakost je taqna za svako n > 1. 1.8. Neka je P = k /m , i neka je s najvei eksponent stepena dvojke kojim je de iv imenilac m . Drugim reqima, m = 2 o , gde je o neparan broj. Izraqunavxi nekoliko prvih zbirova, zapaamo da su brojevi k neparni, i da je s neopadajua funkcija od n, jednaka najveem eksponentu stepena dvojke kojim je de iv neki broj ≤ n, odnosno n 1 i=1 i n
n
n
n sn
n
n
327
n
n
n
328
13. UPUTSTVA I REXE A ZADATAKA
s = blog nc. Dokazaemo ovo tvree indukcijom po n. Tvree je taqno za n = 1, 2. Ako je taqno za neko n, onda je n
2
n+1 X i=1
n
1 X1 1 kn 1 mn + kn (n + 1) 2sn on + kn 2x y = + = + = = , i i n+1 mn n+1 mn (n + 1) 2sn +x yon i=1
gde je n + 1 = 2 y, a y je neparan broj. Ako je n + 1 stepen dvojke, odnosno y = 1, onda je s = blog nc = x − 1, pa gori razlomak postaje (o + 2k )/(2 o ), odnosno k = o + 2k je neparan broj, a najvei eksponent stepena dvojke kojim je de iv imenilac m = 2 o je x = blog (n + 1)c. U protivnom, ako n + 1 nije stepen dvojke, odnosno za neko r vai 2 < n + 1 < 2 , onda je s = r i x < r (jer izmeu 2 i 2 nema brojeva de ivih sa 2 ), pa je x
n
x
n
n
n
n
n+1
x
n+1
r
n
2
n
n
r
r+1
2
r+1
r
kn+1 2r−x on + kn y = , mn+1 2r yon
odnosno brojilac k = 2 o + k y je neparan, m = 2 yo i s = r = blog (n + 1)c. 1.9. Zgodno je tvree formulisati na sledei naqin: brojevi mai od 5 · 2 , n ≥ 0, mogu se predstaviti u obliku zbira razliqitih brojeva iz ovog niza. Za n = 0 tvree je taqno. Neka je tvree taqno za brojeve mae od n, i neka je dat proizvo an broj a iz intervala [5 · 2 , 5 · 2 ). Poxto je a − 5 · 2 < 5 · 2 − 5 · 2 = 5 · 2 , broj a − 5 · 2 moe se predstaviti u obliku zbira razliqitih brojeva iz ovog niza, maih od 5 · 2 , tj. a se dobija dodavaem tom zbiru broja 5 · 2 , razliqitog od svih prethodnih sabiraka. 1.10. Za n = 3 tvree je taqno, jer su prave u opxtem poloaju. Pretpostavimo da tvree vai za proizvo nih n pravih u opxtem poloaju, i neka je dato n + 1 pravih u opxtem poloaju. Meu oblastima na koje prvih n pravih dele ravan postoji po induktivnoj hipotezi bar jedan trougao. Ako (n + 1)-a prava p ne seqe taj trougao, onda je dokaz zavrxen | moe se uzeti bax taj trougao. U protivnom, prava p seqe neke dve stranice tog trougla. Zajedniqko teme te dve stranice sa ihovim preseqnim taqkama sa p qine traeni trougao. 1.11. Zadatak se moe preformulisati na sledei naqin: dato je n krugova polupreqnika 1 u ravni, tako da svaka tri imaju bar jednu zajedniqku taqku; dokazati da je presek svih n krugova neprazan (taqka iz preseka svih krugova je centar kruga polupreqnika 1 koji sadri centre svih n krugova | zadate taqke u originalnoj formulaciji). Ovo tvree emo pojaqati: pokazaemo da ono vai za proizvo nih n konveksnih skupova (tzv. Helijeva teorema). Dokaz se izvodi indukcijom po n. Baza indukcije je sluqaj n = 4. Neka su dati (konveksni) skupovi k , k , k , k , i neka je C neka taqka iz preseka skupova iz familije {k , k , k , k } \ {k }, i = 1, 2, 3, 4. Mogui su sledei sluqajevi. • Taqke C su temena konveksnog qetvorougla; tada presek dijagonala tog qetvorougla pripada preseku svih skupova k . • Jedna od taqaka, npr. C , pripada trouglu koji qine ostale tri taqke C , C , C ; tada skup k sadri taqke C , C , C , a sa ima i taqku, C , taqku trougla C C C , pa je C traena taqka. Neka tvree vai za proizvo nih n − 1 konveksnih skupova u ravni, i neka je dato n ≥ 5 proizvo nih konveksnih skupova k , k , . . . , k , takvih da je presek bilo koja tri od ih neprazan. Skupovi k = k ∩ k , i = 1, 2, . . . , n − 1, zadovo avaju induktivnu hipotezu: konveksni su i presek svaka tri je neprazan: r−x
n+1
n−1
n
n
r
n+1
n
n−1
n
n
n+1
n−1
2 n
n−1
n−1
n−1
n−1
1
1
i
2
3
4
2
3
4
i
i
i
1
4 2
2
1
3
4
2
3
4
3
1
1
0 i
1
i
2
n
n
ki0 ∩ kj0 ∩ kl0 = ki ∩ kj ∩ kl ∩ kn 6= ∅,
jer je taqnost tvrea za dokazana. Zbog toga im je presek neprazan, tj. postoji taqka . 1.12. Rexee se zasniva na sliqnoj ideji kao i dokaz teoreme 1.7. Boje su 0, 1 i 2. Bazni sluqaj n = 1 je trivijalan. Novododata, n-ta krunica sa tetivom deli ravan na tri oblasti. Oblastima van krunice ne meaju se boje. Oblastima u krunici sa jedne (druge)
n=4 0 C ∈ k10 ∩ k20 ∩ . . . ∩ kn−1 = k1 ∩ k2 ∩ . . . ∩ kn
13.1. MATEMATIQKA INDUKCIJA
329
strane tetive boja i zameuje se bojom i + 1 mod 3 (i − 1 mod 3), i = 0, 1, 2. Na taj naqin dobija se ispravno bojee sa tri boje i posle dodavaa n-te figure. 1.13. Dokaz se moe izvesti indukcijom po broju oblasti n na koje mapa deli ravan. Za n = 1 bojee je mogue | dovo na je jedna boja. Pretpostavimo da je tvree taqno za mape sa mae od n oblasti i neka je data mapa sa n oblasti. Poxto su svi qvorovi parnog stepena (imaju paran broj susednih qvorova), svaka grana je deo granice neke oblasti, jer ne postoje qvorovi iz kojih vodi samo jedna grana. Posmatrajmo spo axu, beskonaqnu oblast. Uklaaem grana na granici spo axe oblasti, dobija se mapa sa maim brojem oblasti, qiji su svi qvorovi parnog stepena (granica beskonaqne oblasti za svaki svoj qvor ima dve susedne grane), pa se ona po induktivnoj hipotezi moe ispravno obojiti. Vraaem ukloenih grana se od beskonaqne oblasti odsecaju oblasti koje su u polaznoj mapi bile susedne beskonaqnoj oblasti; ima se ne mea boja. Te oblasti su jedini susedi polazne beskonaqne oblasti, koja se zbog toga moe obojiti suprotnom bojom. Na taj naqin je indukcijom konstruisano ispravno bojee planarne mape sa n oblasti, odnosno zavrxen je dokaz indukcijom. 1.14. Dokaz se izvodi indukcijom po n. Za n = 2 je d +d = 2, pa mora biti d = d = 1; stablo sa dva qvora stepena jedan postoji: to su dva qvora povezana granom. Pretpostavimo da je tvree taqno za n − 1 brojeva, i neka je dato n ≥ 3 prirodnih brojeva d , d , . . . , d sa sumom 2n − 2. Tada bar jedan od ih (npr. d ) mora biti jednak 1 (u protivnom bi im suma bila vea ili jednaka od 2n), i bar jedan od ih (npr. d ) mora biti vei od 1 (u protivnom bi im suma bila maa ili jednaka od n < 2n − 2). Izbacivxi d iz skupa i umaivxi d za jedan, dobijamo skup za koga po induktivnoj hipotezi postoji stablo sa tim stepenima. Dodavxi u to stablo jedan novi qvor stepena d = 1 (list), "prikaqen" za qvor stepena d − 1 ≥ 1, dobijamo stablo sa n qvorova i stepenima d , d , . . . , d . Jasno je da rexee ovog problema u opxtem sluqaju nije jedinstveno. 1.15. Ako sa f (n) oznaqimo traeni broj oblasti, neposredno se izraqunava nekoliko prvih vrednosti f (1) = 1, f (2) = 2, f (3) = 4, f (4) = 8, f (5) = 16. Diferencna jednaqina za niz f (n) moe se izvesti tako da se izraquna poveae broja oblasti posle dodavaa n-te taqke P , poxto su na krunici ve rasporeene taqke P , P , . . . , P . Du P P (k = 1, 2, . . . , n − 1) seqe dui P P , gde je 1 ≤ i ≤ k − 1, k + 1 ≤ j ≤ n − 1, pa eno dodavae poveava broj oblasti za 1 + (k − 1)(n − k − 1) (toliko oblasti du P P deli na taqno dve podoblasti; dui P P , k = 1, 2, . . . , n − 1, ne seku se unutar kruga). Prema tome, 1
2
1
1
2
2
n
i
j
i
j
i
1
j
n
2
n
1
2
n−1
n k
i j
n k
n k
n X
f (n) = f (n − 1)+
i=2
(1 + (k − 1)(n − k − 1)) = f (n − 1) + 61 (n3 − 6n2 + 17n − 12).
Sumiraem (videti (2.10), (2.11)) se dobija rexee ove diferencne jednaqine f (n) = 1 +
1 6
n X
(i3 − 6i2 + 17i − 12) = i=2
1 (n4 24
− 6n3 + 23n2 − 18n) + 1.
Ova i prethodna suma mogu se izraqunati korixeem suma P i , videti (2.5.3). Druga mogunost je prosto dokazati taqnost ovih izraza indukcijom (poxto se prethodno "pogode"). 1.16. Dokazaemo najpre tri pomona tvrea; definicije pojmova videti u uvodu poglav a 6. Najpre se zapaa da ako je stablo G povezano, onda je povezano i stablo f (G) (koje se sastoji od qvorova | slika qvorova iz G, i svih grana iz G koje ih povezuju). Tvree je posledica qienice da f svaki put iz G preslikava ili u put ili u jedan qvor u f (G). Da e, ako je G stablo i vai f (G) = G, onda f svaku granu G preslikava u granu (po definiciji), i obratno, svaka grana u f (G) = G je slika neke grane iz G (u protivnom bi grana bez inverzne slike zatvarala ciklus u f (G) = G, suprotno pretpostavci da je G stablo). Drugim reqima, ako je f (G) = G, onda je f izomorfizam, preslikavae koje quva susednost qvorova. Specijalno, ako za stablo G vai f (G) = G, onda je qvor v ∈ V list, akko je qvor f (v) list. n k i=1
330
13. UPUTSTVA I REXE A ZADATAKA
Neka je G = (V, E) stablo i neka je V ⊂ V skup egovih unutraxih qvorova. Tada je indukovani podgraf G = (V , E ) takoe stablo (povezan je | put izmeu svaka dva unutraxa qvora G vodi samo preko unutraxnijh qvorova G, i nema ciklusa). Navedene qienice dovo ne su za izvoee dokaza. Skup qvorova grafa f (G) je podskup V , a ako je V 6= ∅, onda i f (G) ima bar jedan qvor. Posmatrajmo niz stabala G = G, G = f (G), ..., G = f (G ), ..., i neka je G = (V , E ). Za neko i mora da bude V = V (jer G ima konaqno mnogo qvorova). Na kraju se indukcijom po m = |F | dokazuje da ako za stablo H = (U, F ) vai f (H) = H , onda H sadri nepokretni qvor ili granu (baza je oqigledno tvree za m = 1, 2; za m > 2 se H zameuje sa H , stablom indukovanim unutraxim qvorovima H , za koje takoe vai f (H ) = H , pa poxto H ima mae grana od H , za ega vai induktivna hipoteza). 1.17. Za n = 1 tvree je taqno (u jednoj urni se nalaze dve kuglice). Neka je princip taqan za n kuglica i n+1 urni. Pretpostavimo da su n+2 kuglice ubaqene u n+1 urni. Da je princip u tom sluqaju taqan, dokazujemo pretpostav ajui suprotno, da se u svim uranama nalazi najvixe po jedna kuglica. Izdvojivxi na stranu proizvo nu urnu sa samo jednom kuglicom, dobijamo sistem od n urni sa n + 1 kuglicom, u kome po induktivnoj hipotezi mora da postoji urna sa bar dve kuglice | suprotno pretpostavci. Time je dokazano da Dirihleov princip vai za svako n. 1.18. Suma visina qvorova KBS visine 1 je 1 = 2 − 1 − 2. Ako je tvree taqno za KBS visine h, onda je suma visina qvorova KBS visine h + 1 jednaka dvostrukoj sumi visina qvorova KBS visine h uveanoj za h + 1 (visinu korena): 2(2 − h − 2) + h + 1 = 2 − (h + 1) − 2, pa je tvree taqno i za KBS visine h + 1. 1.19. Dokaz se moe izvesti pojaqavaem induktivne hipoteze, tako xto se dokae da za n ≥ 2 vai F + F = F i F F + F F = F . 1.20. Tvree je taqno za n = 2 (K je stablo, n/2 = 1). Pretpostavimo da imamo razlagae K na n/2 povezujuih stabala. Graf K se od K dobija dodavaem dva nova qvora u, v, sa granom (u, v) i jox 2n grana koje u, v povezuju sa qvorovima K . Qvorovi u i v mogu se "prikaqiti" kao listovi svim povezujuim stablima K tako xto se iskoriste n/2 grana koje u povezuju sa n/2 qvorova K , i n/2 grana koje v povezuju sa preostalih n/2 qvorova K . Grana (u, v) sa preostalih n/2 + n/2 grana koje povezuju u i v sa svim qvorovima K qine novo povezujue stablo grafa K , sa rednim brojem n/2 + 1, pa je dobijeno razlagae skupa grana K na (n + 2)/2 povezujuih stabala (slika 1). 0
0
0
0
0
1
i
i−1
i
i
i
i
i−1
0
0
0
0
2
h+1
h+2
2 n
2 n+1
n−1 n
2n+1
n n+1
2n
2
n
n+2
n
n
n
n
n
n
n+2
n+2
'
$ d u
Kn
d
d
&
d
d d v %
Ris. 1. Uz zadatak 1.20.
1.21. Za n = 1 to je graf sa dva qvora i jednom granom. Kako konstruisati graf G polazei od grafa G ? Potrebno je dodati dva nova qvora v, w i n −(n−1) = 2n−1 novih grana; da bi konstrukcija bila "cista", zgodno je da nove grane povezuju ili novi qvor sa starim, ili dva nova qvora. Ako se v i w poveu granom, i ako to bude jedina grana susedna npr. qvoru v, onda taj qvor u savrxeno uparivae moe ui samo granom (v, w) | to je iznueni izbor; to takoe iz uparivaa isk uquje sve grane susedne qvoru w; interesantno je da se upravo w moe povezati sa 2n − 2 grana sa svim prethodnim qvorovima, pa ni jedna od tih grana ne bi mogla da ue u savrxeno uparivae. Poxto po induktivnoj hipotezi u n−1
2
2
n
13.1. MATEMATIQKA INDUKCIJA
331
grafu G postoji taqno jedno savrxeno uparivae, vidimo da i u ovako konstruisanom grafu G postoji taqno jedno savrxeno uparivae (videti sliku 2). n−1
n
' w
$
n−1
c
2
c
1
c
···
c
Gn−1
c
c
v
n−1
c
c
2
1
···
&
%
Ris. 2. Uz zadatak 1.21.
1.22. Nejednakost se moe prepisati u obliku . Za nejednakost (u ovom sluqaju jednakost) je trivijalna. Pretpostavimo da je nejednakost taqna za Qn
i=1 (1
+ ai )/2 ≥ 1
n = 1
proizvo nih n − 1 realnih brojeva sa proizvodom 1. Sluqaj n brojeva a , a , . . . , a prirodno je svesti na sluqaj n − 1 brojeva tako da se umesto neka dva od ih, a i b, uzme ihov proizvod ab | ta zamena trebalo bi da uvek smauje (to treba dokazati) vrednost izraza sa leve strane nejednakosti. Drugim reqima, da bi svoee uspelo, moralo bi da bude 1
1+a 2
+
1+b 2
≥
2
n
1+ab , 2
xto je ekvivalentno sa (1 − a)(1 − b) ≤ 0. Da ova nejednakost bude ispuena moe se postii tako da se za a izabere neki broj vei ili jednak od 1, a za b neki broj mai ili jednak od 1. Sada je jasno kako se izvodi dokaz. Meu brojevima a , a , . . . , a sigurno postoji neki (npr. a ) koji je vei ili jednak od 1, i neki (npr. a ) koji je mai ili jednak od 1. Koristei dokazanu nejednakost + ≥ , dobijamo n 1
i
2
n
j
1+aj 2
1+ai 2
Y
1+ak 2
=
1+ai 2
·
1+aj 2
Y
·
k=1
1+ai aj 2
1+ak 2
≥
1+ai aj 2
1≤k≤n k6=i,j
Y
1+ak 2
≥ 1.
1≤k≤n k6=i,j
Posleda nejednakost u nizu je taqna, jer se dobija primenom induktivne hipoteze na n − 1 brojeva a , a , . . . , a , a , . . . a , a , . . . a , a a . 1.23. Pretpostavimo da je najvixi bit binarnog broja b[1]. Razmotrimo sledei algoritam. 1
2
i−1
i+1
j−1
n
j+1
i j
begin n := 0; for i := 1 to k do n := n · 2 + b[i] end
Pokazaemo da posle i-tog prolaska kroz pet u vai n = P b[j]2 , i = 1, 2, . . . , k. Zaista, tvree je taqno za i = 1, a ako je taqno za neko i, onda posle narednog prolaska i j=1
i−j
332
13. UPUTSTVA I REXE A ZADATAKA
kroz pet u n ima vrednost 2
i X
iX +1
b[j]2i−j + b[i + 1] = 2
j=1
b[j]2i+1−j .
j=1
Time je dokazano da je posle k-tog prolaska kroz pet u n = P algoritam je korektan.
k j=1
b[j]2k−j
, odnosno navedeni
13.2. Analiza algoritama
2.1. Ako je f (n) = o(g(n)), onda za proizvo no ² > 0 postoji prirodan broj n takav da za svako n > n vai f (n) < ²g(n), odakle sledi da je f (n) = O(g(n)). Obrnuto ne vai; na primer, n = O(2n), ali nije n = o(2n). 2.2. Moe se poi od nejednakosti (f (n)) = O ¡a ¢ (a > 1, c > 0), i u oj zameniti f (n) sa log n, a sa 2 i c sa a. 2.3. Sabirajui jednakosti T (k) = T (k − 1) + za k = 2, 3, . . . , n dobija se 0
0
c
f (n)
b
2
k 2
n X
T (n) = T (1)+
k 2
=
1 2
+
n(n+1) . 4
k=2
2.4. Karakteristiqna jednaqina ove diferencne jednaqine je z − 8z + 15 = 0, a eni koreni su z = 5 i z = 3. Zbog toga rexee traimo u obliku T (n) = c 5 +c 3 . Konstante c i c odreuju se iz uslova T (1) = 5c + 3c i T (2) = 25c + 9c . Rexavaem ovog sistema od dve linearne jednaqine dobija se c = 1/10, c = 1/6, pa je T (n) = (5 + 3 )/2. 2.5. Karakteristiqna jednaqina ove diferencne jednaqine je z − 4z + 5z − 2 = 0, ili (z − 1) (z − 2) = 0, pa je eno rexee oblika T (n) = (c + c )n + c 2 . Konstante c , c , c odreuju se iz poqetnih uslova; dobija se c = c = 0, c = 1, pa je T (n) = n. 2.6. Zbog jednostavnosti uvedimo oznake T (2n) = a i T (2n − 1) = b , n ≥ 1. Gore diferencne jednaqine mogu se prepisati u obliku a = 2 P b , b = 2 P a (n ≥ 1), b = 1. Prvih nekoliko qlanova ovih nizova su a = 2b = 2, b = a = 2, a = 2(b + b ) = 6, itd. Ideja je da se iz diferencnih jednaqinaP najpre uklone sume, formiraem razlika P dva uzastopna qlana ( n ≥ 1): a −a = 2 b −2 b = 2b , b −b = P P a = a , Sada se zamenom b , b u drugu, odnosno a , a u prvu a − jednaqinu dobijaju homogene linearne diferencne jednaqine za nizove a i b : 2
1
1
2
1
2
1
2
1
1
2
3
1
1
3
2
n
1
n i=1
i
n+1
i
n
1
1
n+1
n
n n+1 i=1 i 2 1
n+1 i=1 i
n
n+1
n+1 i=1
3
n−1
2
n i=1 i
odnosno
bn+2 = 4bn+1 − bn ,
3
n+2
n
− an ) −
1 (an 2
an+1 = 4an − an−1 ,
i
1
n+1
n+2
1 (an+1 2
n i=1
2
n
(bn+2 − bn+1 ) − (bn+1 − bn ) = 2bn+1 ,
2
2
n
1
n
2
n−1
2
2
n
2
n+1
n+1
n
− an−1 ) = an ,
n ≥ 2,
n ≥ 2.
Koreni zajedniqke karakteristiqne jednaqine z − 4z + 1 = 0 su z = 2 + √3 i z = 2 − √3, pa su rexea diferencnih jednaqina oblika a = c z + c z i b = c z + c z ; konstante c , c , c , c odreuju se iz poqetnih uslova b = 2, b = 8 (jer b = 4b − b vai tek za n ≥ 2!!!), odnosno a = 2, a = 6. Dobija se da je 2
n
1
2
3
4
2
1
an = T (2n) =
n 1 1 3
n 2 2
1
n
n+2
2 n n 3 1 4 2 n n+1
2
1 √ 3
³ √ ´ √ √ √ ( 3 − 1)(2 + 3)n + ( 3 + 1)(2 − 3)n ,
bn = T (2n − 1) =
1 √ 3
³ ((2 +
√
3)n−1 + ((2 −
√
´ 3)n−1 ,
n ≥ 1,
n ≥ 2.
2.7. Ako sa a , odnosno b oznaqimo trajae rexavaa problema P primenom algoritma A, odnosno B, dobijamo sistem diferencnih jednaqina n
n
an = bn−1 + n,
n
bn = an−1 + n,
(n ≥ 2),
a1 = 1, b1 = 2.
13.2. ANALIZA ALGORITAMA
Zamenom
za niz (
(
333
) u prvu jednakost, dobija se diferencna jednaqina ). Ova jednaqina rexava se sumiraem:
bn−1 = an−2 + n − 1 n ≥ 3 an = an−2 + 2n − 1 an a2 = b1 + 2 = 4 a2n+1 a2n
Dakle,
=
a2n−1 + 4n + 1 = a2n−3 + (4n + 1) + (4n − 3) = . . .
=
a1 + (4n + 1) + (4n − 3) + . . . + 1 = 1 + (n + 1)(2n + 1),
=
a2n−2 + 4n − 1 = a2n−4 + (4n − 1) + (4n − 5) = . . .
=
a2 + (4n − 1) + (4n − 5) + . . . + 7 = n(2n + 1) + 1.
za n parno . za n neparno 2.8. Dovo no je dokazati indukcijom da postoji takva konstanta c > 0 da za sve dovo no velike n vai T (n) ≤ cn log n. Ova nejednakost je za n = 1 taqna za proizvo no c > 0. Treba jox pokazati da ako je nejednakost taqna za brojeve n < N , onda je taqna i za n = N . Zaista, koristei induktivnu hipotezu i nejednakost bxc ≤ x, dobijamo (
n(n+1) , 2 n(n+1) , 2
1+
an = 2 2
T (N )
=
2T (bN/2c) + 2N log2 N ≤ 2cbN/2c log22 bN/2c + 2N log2 N
≤
cN (log2 N − 1)2 + 2N log2 N = cN log22 N + N (2(1 − c) log2 N + c) .
Ako je c > 1, onda za N ≥ 2 vai 2(1 − c) log N + c ≤ 2(1 − c) log 2 + c = 2 − c; za c ≥ 2 je ovaj izraz mai ili jednak od nule, pa vai T (N ) ≤ cN log N , qime je dokazano da ova nejednakost vai za svako N ≥ 1 ako je c ≥ 2. 2.9. Neka je n = 2 . Mnoeem sa 2 dobija se 2 T (2 ) = 2 T (2 ) + ck2 . Prema tome, ¡ ¢ 2
k
2−k T (2k )
2 2
−n
−k
k
2
−(k−1)
k−1
=
2−(k−2) T (2k−2 ) + c k2−k + (k − 1)2−(k−1) = · · ·
=
2−0 T (20 ) + c
k X
−k
i2i = 2−k c(2k+1 − k − 2)
i=1
(videti primer 2.5, strana 20), odnosno T (n) = O(n). Drugo rexee. Indukcijom se moe dokazati da je T (n) ≤ 2cn. 2.10. (a) Nejednakost se moe dokazati indukcijom po n. Za n = 1 nejednakost je taqna. Ako pretpostavimo da je taqna za brojeve mae od n, onda je T (n) ≤ T (bn/2c) + 1 ≤ blog2 bn/2cc + 2 ≤ blog2 (2bn/2c)c + 1 ≤ blog2 nc + 1
(jer za svako n vai 2bn/2c ≤ n), pa je tvree taqno i za n. (b) Sliqno kao u prethodnom sluqaju
T (n) ≤ T (bn/2c) + 1 ≤ dlog2 bn/2ce + 1 = dlog2 (2bn/2c)e ≤ dlog2 ne. P T (n + 1) = n + 1 + n i=1 T (i) T (n) = 1 + T (n) T (n + 1) = 2T (n) + 1
2.11. Oduzimaem date jednakosti od , odnosno , ili
, dobija se T (n + 1) −
T (n + 1) + 1 = 2(T (n) + 1) = 22 (T (n − 1) + 1) = · · · 2n−1 (T (2) + 1) = 2n+1
(jer je T (2) = 2 + T (1) = 3). Dakle, T (n) = 2 − 1. 2.12. Za i ≤ x ≤ i + 1 je i log i ≤ x log x, pa je n
k
n X
ik log2 i
=
i=1 =
n Z i+1 X
i=1 i ³ log2 e k+1
2.13. 2.14. Kontraprimer: Za , ali
k
2
2
ik log2 i dx ≤
n Z i+1 X
xk log2 x dx =
i=1 i ´¯ k+1 ¯n+1 xk+1 ln x − xk+1 ¯ = O(nk+1 log n).
,
,
1
i
je ako je .
,
Z n+1 1
f (n) = 3n g(n) = 2n r(n) = s(n) = n f (n) = s(n) = g(n) = n r(n) = n2 f (n) = O(s(n)) 1 O(n2 ) = O(r(n)) f (n)/g(n) = 1 6= O( n ) = O(s(n)/r(n))
xk log2 x dx
i g(n) = n =
334
13. UPUTSTVA I REXE A ZADATAKA
2.15. Funkcije se mogu izabrati tako da jedna od ih naglo raste za parne, a druga za neparne n. Posmatrajmo sledee dve rastue funkcije: ½ ½ n!, n parno (n − 1)! + 1, n parno f (n) = ; g(n) = . (n − 1)! + 1, n > 1 neparno n!, n neparno Poxto je ³ ´ n 1+ , n parno ³ ´ , = 1+ , n > 1 neparno ni f (n)/g(n) ni g(n)/f (n) nisu ograniqene funkcije: za parno n je f (n)/g(n) ≥ , a za neparno n je g(n)/f (n) ≥ . 2.16. Neka je a = T (2 ). Tada je a = 1 i a = 2a + 1, ili f (n) g(n)
n 2
k
1 (n−1)! 1 (n−1)!
1 n
−1
n 2
k
1
k
k−1
ak + 1 = 2(ak−1 + 1) = 22 (ak−2 + 1) = · · · = 2k−1 (a1 + 1) = 2k .
Prema tome, T (n) = n−1 ako je n stepen dvojke. U opisanom pokuxaju se mogu izbei texkoe ako se kao ci postavi dokazivae nejednakosti T (n) ≤ cn + d. Iz pretpostavke da je ona taqna za k < n sledi da je ¡ ¢ ¡ ¢ n 2
T (n) = 2T
+ 1 ≤ 2 cn + d + 1 = cn + d + (d + 1), 2
xto je mae ili jednako od cn + d akko je d ≤ −1. Prema tome, nejednakost T (n) ≤ cn + d je taqna (za n = 2 ) akko je d ≤ −1 i T (2) = 1 ≤ 2c + d, odnosno c ≥ (1 − d)/2. Najmae c dobija se za najvee d = −1, pa je najbo a gora granica ove vrste T (n) ≤ n − 1 | u skladu sa prethodnim rexeem. 2.17. Moe se iskoristititeorema 2.5.4, jer su¢m i c konstante. Prema tome, ¡ k
S(n) =
O nlogm (cm log2 m) , O(n log n), O(n),
m > 21/c m = 21/c m < 21/c
.
2.18. Za oblika. Mnoei, ovu jednakostoznaqimo izraz sa , dobijamo gde je . Rexee poslede diferencne jednaqine je
n cm + n0 0 ≤ n0 < c R(m) = 2R(m − 1) + k S(m) = 2−m R(m)
2−m
sa
. Tada je ,
T (cm + n0 ) R(m) S(m) = S(m − 1) + k2−m
S(m) = k(2−m + 2−(m−1) + . . . + 2−0 ) + S(0) = S(0) + k(1 − 2−m ).
Da e je ¡ ¢ R(m) = T (cm + n ) = 2 S(0) + k(1 − 2 = O(2 ) = O(d ) (gde je d = 2 ), odnosno T (n) = O(d ). 2.19. Rexee je T (n) = O(n). Da bismo to dokazali, pretpostavimo da postoji konstanta d takva da je T (k) < dk za k < n. Tada je m
0
1/c
T (n) =
−m
m
cm+n0
n
k X
k X
ai T (n/bi ) + cn <
i=1
i=1
ai dn/bi + cn = nd
k X
ai /bi + c/d . i=1 ³ ´ Pk P d ≥ c/ 1 − ki=1 ai /bi i=1 ai /bi +
Konstanta d moe se izabrati tako da bude odnosno c/d < 1. Tada iz gore nejednakosti sledi T (n) < dn, odnosno time je dokazano da nejednakost T (n) < dn vai za svako (dovo no veliko) n. 2.20. U oba sluqaja se prvi utisak o nizovima dobija izraqunavaem nekoliko prvih qlanova; oba niza su monotono neopadajua, xto se lako dokazuje indukcijom. (a) Prvih nekoliko qlanova niza, poqevxi od T (2) su 1, 8, 10, 26, 28, 30, 32, 34, 40, 42, . . .. Indukcijom se dokazuje da je T (n) = 1 + 4 + 4 + . . . + 4 = (4 − 1)/3 za 2 +1≤n≤2 . Odatle se vidi da za 2 < log n ≤ 2 vai 2
k−1
(4 log22
n − 1)/3 ≤
(4(2k )2
k
2
k+1
2k−1
2k
k
− 1)/3 = T (n) = (16(2k−1 )2 − 1)/3 < (16 log22 n − 1)/3,
13.2. ANALIZA ALGORITAMA
335
odnosno T (n) = Θ(log n). (b) Oqigledno je T (n) ≥ 2n. S druge strane, indukcijom se pokazuje da je T (n) < 6n. Neposredno se√proverava da je ovo taqno za n ≤ 14. Za n ≥ 15 > 3(5 + √21)/2 iz nejednakosti √ T (d ne) < 6d ne sledi ¡ √ ¢ √ √ 2
jer je
√
T (n) < 2 · 6d ne + 2n ≤ 12( n + 1) + 2n = 6n − (2 n − 3)2 − 21 < 6n, √ √ n > (3 + 21)/2 n > 3(5 + 21)/2 n = 2i ai = T (2i ) a0 = c i≥1 ai = kai−1 + f (2i )
ekvivalentno sa , , . Za
2.21. Neka je ai
k−i
k−(i−1)
ai−1
= . . . c + k−1 f (21 ) + k−2 f (22 ) + . . . + k−i f (2i ). j
Poxto je k
i
=
, onda je
+
k−(i−1) f (2i−1 )
=
k−j f (2j )
= ai−2
k−(i−2)
=
Ako uvedemo oznaku 2
+
k−i f (2i )
. je tada
, odnosno
+
k−i f (2i )
=
=m
k− log2 m f (m)
= 2− log2 k log2 m f (m) = m− log2 k f (m) = g(m).
= klog2 n = 2log2 k log2 n = nlog2 k , T (n) =
nlog2 k
dobija se da je i X
c +
k−j f (2j ) ,
j=1
xto je i trebalo dokazati. 2.22. Pretpostav ajui da je n = 2 , dobijamo k
T (n)
=
= =
T (2k )
=
T (1) +
T (2k−1 )
21/2
(k+1)/2
2
−1 √ 2−1
+ 2k/2 = T (2k−2 ) + 2(k−1)/2 + 2k/2 = . . .
+ · · · + 2k/2 = √ √ √ = ( 2n − 1)( 2 + 1) = O( n). +
22/2
2.23. Oqigledno je . Indukcijom se lako dokazuje da je za dovo no veliko neopadajua funkcija. Za velike je sa gore strane ograniqeno nizom koji T (n) > 3n
n
zadovo ava diferencnu jednaqinu (za proizvo no veliko b), odnosno S(n) = O(n ) = O(n ), gde je proizvo no malo. Nasluuje se da bi T (n) i sa gore strane moglo biti ograniqeno linearnom funkcijom. Neka je a > 3 konstanta. Iz pretpostavke da za k < n vai T (k) < ak, za log n > 2a/(a − 3) sledi ³j k´ j k T (n)
logb 2
n T (n) S(n) = 2T (n/b) + 3n ²
1+²
S(n)
2
T (n) = 2T
n log2 n
+ 3n < 2a
n log2 n
+ 3n <
2an log2 n
+ 3n < an.
Specijalno, za a = 9, T (n) < 9n sledi iz T (k) < 9k za k < n ako je log n > 3, odnosno n > 8. Za n ≤ 8 neposredno se proverava da je T (n) < 9n, pa za svako n ≥ 1 vai 3n ≤ T (n) ≤ 9n, odnosno T (n) = Θ(n). 2.24. Nejednakost dlog e ≤ 1 + log ≤ 1 + log vai za svako x iz intervala [i − 1, i], 2 ≤ i ≤ n. Integracijom u granicama od i − 1 do i, pa sumiraem po i od 2 do n, dobija se nejednakost Z 2
n 2 i
n 2 i
n
S(n) ≤ log2 n + n − 1 +
log2
n 2 x
n dx = (n − 1)(1 + log2 e), x
pa je S(n) = O(n). 2.25. Neka je n = 2 . Skup {1, 2, . . . , n − 1} vrednosti indeksa i, (sabirak za i = n jednak je nuli), moe se razloiti na k podskupova {2 , 2 + 1, . . . , 2 − 1}, j = 1, 2, . . . , k, na kojima izraz blog c ima konstantnu vrednost k − j + 1. Prema tome, 1
k
j−1
j−1
j
n 2 i
n X i=1
blog2
n c i
=
k X j=1
2j−1 (k − j + 1) =
kX −1
2j (k − j) =
j=0
(videti primer 2.5). Traena suma je dakle 2n − log
2n−2
.
k X j=1
j2k−j = 2k+1 − k − 2
336
13. UPUTSTVA I REXE A ZADATAKA
2.26. Brojevi F (n) i G(n) su definisani za sve cele indekse n. Qlanovi niza G(n) sa indeksima 0 i 1 su G(0) = F (0) = 0, G(1) = F (−1) = 1, a odgovarajua diferencna jednaqina je G(−n−2) = G(−n−1)+G(−n), odnosno (stav ajui −n−2 = k), G(k +2) = G(k)−G(k +1). Neposredno se proverava da brojevi G (k) = (−1) F (k) zadovo avaju ovu diferencnu jednaqinu, a poxto je i G (0) = G(0) = 0 i G (1) = F (1) = 1 = G(1), onda za k ≥ 0 vai G(k) = G (k) = (−1) F (k). 0
0
0
k+1
k+1
0
13.3. Strukture podataka
3.1. Telo rekurzivne procedure se slike 3.12 moe se zameniti blokom sa slike 3. begin v := Koren; if Koren = nil or Korenˆ.Kljuˇ c = x then ˇ Cvor := Koren else while v 6= nil and vˆ.Kljuˇ c 6= x do if vˆ.Kljuˇ c < x then v := vˆ.Levi else v := vˆ.Desni end
Ris. 3. Uz zadatak 3.1.
3.2. Problem se moe rexiti indukcijom, odnosno rekurzivnim algoritmom. Traeni niz se dobija nadovezivaem niza koji odgovara levom podstablu, k uqa korena stabla, i na kraju niza koji odgovara desnom podstablu. Za stablo koje ima samo koren, traeni niz je jednoqlan | sadri samo k uq korena. Broj rekurzivnih poziva jednak je broju qvorova stabla n, a trajae svakog poziva je O(1), pa je sloenost algoritma O(n). 3.3. Ako qvor v sa k uqem a u stablu ima desnog sina, onda je traeni broj k uq sledbenika qvora v u stablu, odnosno k uq qvora do koga se od desnog sina v dolazi idui nanie ulevo sve dok je to mogue. U protivnom, ako v nema desnog sina, a levi je sin svog oca, onda je k uq oca traeni broj. Na kraju, ako v nema desnog sina, i desni je sin svog oca, onda je a najvei elemenat skupa A. Sloenost algoritma je O(log n). 3.4. Poxto je pozicija 16 zauzeta, mora biti zauzeta i pozicija 8, na kojoj treba da bude otac qvora 16. Sliqno, moraju biti zauzete i pozicije 4, 2 i 1. Prema tome, minimalni broj elemenata hipa u nizu duine 16 je pet. 3.5. Obe operacije, umetae novog elementa i uklaae elementa sa najveim k uqem, imaju sloenost proporcionalnu visini stabla, dakle O(log n), gde je n broj elemenata liste. 3.6. Za realizaciju ove strukture podataka moe se iskoristiti stek, kombinacija vektora i promen ive koja pokazuje na poziciju posledeg podatka u vektoru. Novi podatak se zapisuje na kraju vektora, a sa kraja vektora uzima se i podatak koga treba ukloniti. 3.7. Pogodna struktura je binarno stablo pretrage. Sloenost operacija srazmerna je visini stabla, pa u najgorem sluqaju moe da bude O(n), gde je n broj elemenata stabla; ako se koriste npr. AVL stabla, onda je sloenost operacija u najgorem sluqaju O(log n). 3.8. Koristi se vektor duine n, a u emu se elemenat i smexta na poziciju i. Prema tome, umetae je jednostavno. Uklaae je komplikovanije, jer i nije precizirano, a mi ne
13.3. STRUKTURE PODATAKA
337
znamo koje pozicije u nizu nisu zauzete. Problem se rexava povezivaem svih zauzetih pozicija u povezanu listu. Umetae i prema tome obuhvata oznaqavae i-te pozicije i umetae pozicije i u listu. Uklaae brixe prvi elemenat iz liste i uklaa oznaku sa pozicije tog elementa. 3.9. Najpre se uklaa proizvo an elemenat iz jednog od hipova (npr. egov koren) i izvedu se odgovarajue popravke hipa. Taj elemenat se zatim umee kao koren novog hipa, tako da koreni dva stara hipa budu egovi sinovi. Popravka dobijenog stabla | hipa (eventualno premextae nanie elementa iz korena) zahteva O(m + n) koraka. 3.10. Pogodna struktura podataka za realizaciju ovog tipa je AVL stablo, u kome se umetaa i brisaa izvrxavaju za O(log n) koraka. Da bi se izvela operacija Naredni(x) koristi se najpre obiqan algoritam za traee x, posle qega treba pronai sledbenika x u stablu (videti zadatak 3.3). 3.11. Pogodna struktura podataka za realizaciju ovog tipa je AVL stablo, u kome se umetaa i brisaa izvrxavaju za O(log n) koraka. Svakom qvoru v dodajemo novo po e v.D, koje sadri broj potomaka v , zajedno sa v . Neka za dati qvor v Rang(v) oznaqava broj elemenata stabla, sa k uqem maim ili jednakim od v.Kljuˇc. Korixeem po a D moe se odrediti rang qvora v u toku egovog traea, na sledei naqin. Induktivna hipoteza je da znamo rangove svih qvorova na putu od korena do nekog qvora w. Ako koren ima levog sina, onda je egov rang za jedan vei od vrednosti D egovog levog sina; u protivnom je rang korena 1. Neka je w levi sin qvora w, w desni sin w, w desni sin w i w levi sin w . Rangovi sinova qvora w mogu se izraziti na sledei naqin L
D
LD
L
DL
D
Rang(wL )
=
Rang(w) − wLD .D − 1
Rang(wD )
=
Rang(w) + wDL .D + 1
(ako neki od sinova ne postoji, uzima se da je odgovarajua vrednost po a D jednaka 0). Da bi se izvrxila operacija Naredni(x, k), treba najpre pronai qvor v takav da je v.Kljuˇc = x (ako takav qvor ne postoji, onda je potraga neuspexna). Zatim se trai qvor sa rangom Rang(v) + k; traee prema rangu iste je sloenosti kao i traee prema k uqevima: rangovi se izraqunavaju usput, a redosled u stablu isti im je kao redosled k uqeva. Time posao nije zavrxen; poxto je uvedeno novo po e, treba ga aurirati posle operacija koje ga meaju. Posle umetaa, odnosno brisaa elemenata inkrementiraju se, odnosno dekrementiraju po a D u svim qvorovima na putu od korena; u sluqaju neuspexnog umetaa ili brisaa ove promene se moraju ponixtiti. Zaxto je uvedeno po e D umesto po a Rang, koje bi traee k uqa sa datim rangom qinilo jednostavnijim? Zbog toga xto umetae i brisae u najgorem sluqaju meaju rangove O(n) elemenata! 3.12. Neka su T i T dva data stabla, pri qemu su svi k uqevi u stablu T vei svih k uqeva u stablu T , i neka je visina h stabla T vea od visine stabla T . U stablu T treba pronai qvor v sa najmaim k uqem (spuxtajui se polazei od korena ulevo, sve dok je mogue); za to je potrebno O(h) operacija. Qvor v se zatim brixe iz T , pa se formira novo stablo sa korenom v i podstablima T i T (bez v); za sve ovo potrebno je izvrxiti O(h) operacija. 3.13. Rexee je sliqno rexeu zadatka 3.12, pri qemu treba obezbediti da dobijeno stablo bude uravnoteeno, bez obzira xto data stabla T i T mogu biti razliqitih visina h i h . Poxto se radi o AVL stablima, pretpostav a se da se uz svaki qvor quva podatak o egovoj visini. Neka je npr. h ≥ h . Prema definiciji konkatenacije, pretpostav a se da je najvei k uq iz T mai od najmaeg k uqa iz T . Ideja je da se najvei elemenat r iz T obrixe, pa da se iskoristi kao koren preko koga se T privezuje na odgovarajue mesto u levom podstablu T . Preciznije, spuxtajui se u T samo desnim granama, dolazimo do qvora v qija je visina ili h ili h − 1 (takav qvor uvek postoji u T ; lako se proverava da se visine oca i sina u AVL stablu razlikuju ili za jedan ili za dva); neka je p otac v. Tada na p kao desnog sina umesto v kaqimo r, qiji je levi sin v (sa svojim podstablom iz T ), a desni sin koren T . Tako se dobija ispravno binarno stablo pretrage. Posle ove operacije 1
2
2
1
2
1
2
2
1
2
1
1
2
2
1
2
1
2
1
2
1
1
2
2
1
1
2
338
13. UPUTSTVA I REXE A ZADATAKA
visina qvora r moe da postane za jedan vea od visine qvora v koji je bio na tom mestu, pa je eventualno potrebno izvrxiti uravnoteavae pomou rotacije. 3.14. (a) Sluqajno AVL stablo visine 0 sastoji se od samo jednog qvora | korena. Sluqajno AVL stablo visine 1 dobija se izborom sa verovatnoama 1/3 jedne od tri mogunosti: koren ima ili samo desnog sina, ili oba sina, ili samo levog sina. Sluqajno AVL stablo visine h > 2 konstruixe se rekurzivno, tako xto se sa verovatnoama 1/3 bira jedna od tri varijante u kojima su visine levog i desnog podstabla redom (h − 2, h − 1), (h − 1, h − 1) i (h − 1, h − 2). (b) Posmatrajmo faktore ravnotee u qvorovima puta kojim se prelazi od korena sluqajnog AVL stabla, preko kritiqnog qvora v, do novoumetnutog qvora u, i to redom od u do v (mogue je takoe da na putu do u nema kritiqnog qvora; verovatnoa takvog ishoda je 3 , gde je m duina puta od korena do u). Na tom putu, poqevxi od oca w qvora u, faktori ravnotee imaju uniformnu raspodelu na skupu {−1, 0, 1}, a put se zavrxava (jer se doxlo do kritiqnog qvora) onog trenutka kad se naie na faktor razliqit od 0. ¡ ¢ . Matematiqko oqekivae duine ovog Verovatnoa da ovaj put ima duinu i je puta je P i · 2 · 3 = ; ova vrednost ne zavisi od visine h AVL stabla. 3.15. Prvi broj se stav a u koren stabla. Indukcijom po k pokazuje se da brojevi sa indeksima 2 , 2 + 1, . . . , 2 − 1 mogu biti redom umetnuti u stablo tako da u svakom qvoru u svakom koraku bude ispuen uslov ravnotee (da razlika broja qvorova u levom i desnom podstablu ne premaxuje 1). Ako je ovo taqno za neko k, onda se 2 brojeva sa indeksima 2 ,2 + 1, . . . , 2 − 1 takoe mogu redom ubaciti u stablo tako da bude zadovo en uslov ravnotee. Zaista, ove brojeve treba naizmeniqno ubacivati u levo, odnosno desno podstablo; po induktivnoj hipotezi, poxto levo i desno podstablo na poqetku imaju po 2 − 1 qvorova, u ih se moe redom ubaciti 2 brojeva tako da uslov ravnotee bude ispuen u svakom koraku. Pored toga, uslov ravnotee je uvek ispuen i za koren stabla, jer se brojevi naizmeniqno ubacuju u levo i desno podstablo. Drugo rexee. Isti algoritam moe se formulisati i direktno (umesto rekurzivno): prilikom ubacivaa broja sa indeksom n = (b b . . . b ) , gde su b = 1, b , . . . , b binarne cifre broja n, binarne cifre b , b , . . . , b odreuju put do mesta ubacivaa qvora: cifra 0, odnosno 1, odreuje skretae ulevo, odnosno udesno. Ovo tvree dokazuje se indukcijom. 3.16. Utisak o naqinu narastaa AVL stabla moe se stei iscrtavaem nekoliko prvih stabala (na slici 4 | do n = 7). zapaa se da se za n = 2 − 1 dobija potpuno binarno stablo K visine k; da se dodavaem broja 2 (bez rotacije) dobija stablo visine k + 1, i ta visina se ne mea posle dodavaa brojeva 2 + 1, 2 + 2, . . . , 2 +2 −1 (ukupno 2 brojeva). Ovo tvree se dokazuje indukcijom (u korenu K je broj 2 ; prilikom dodavaa prvih 2 brojeva 2 , 2 +1, . . . , 2 +2 −1 mea se samo desno podstablo, koje od K prelazi u K ; zatim se pri dodavau 2 + 2 izvrxava rotacija, i koren umesto 2 postaje 2 , pa desno podstablo ponovo postaje K , spremno da primi bez promene visine novih 2 − 1 brojeva 2 + 2 + 1, 2 + 2 + 2, . . . , 2 + 2 − 1, prelazei ponovo u K ). Uravnoteavae stabla se uvek izvodi jednostrukom rotacijom, jer novi broj, kao najvei, uvek zavrxava u desnom podstablu desnog podstabla. 3.17. Svako binarno stablo moe se nacrtati tako (u "rastav enom obliku") da za svaki egov qvor v vai da su svi qvorovi egovog levog (desnog) podstabla nacrtani levo (desno) ispod ega. Ako se qvorovima stabla kao k uqevi pridrue ihove x-koordinate posle iscrtavaa u rastav enom obliku, stablo postaje BSP. Pogodnim izborom koordinatnog poqetka lako se postie da svi k uqevi budu pozitivni. Neka je v levi sin proizvo nog qvora u i neka je T , odnosno T , levo, odnosno desno podstablo qvora v. Rotacija oko grane (u, v) stabla je transformacija pri kojoj • T umesto desnog podstabla v postaje levo podstablo u; • u umesto sina nekog qvora x postaje desni sin qvora v ; • v umesto levog sina qvora u postaje sin qvora x. −m
∞ i=1
k
−i
k
1 i−1 2 3 3
3 2
k+1
k+1
k+1
k+1
k+2
k
k
0 2
k k−1
k
k
k−1
0
k+1
k+1
0
k−1
k+1
k+1
k
k+1
k+1
k+1
k
k
k−1
k+1
k+1
k
k+1
k+1
k+1
k
1
2
k+1
k
2
k
k+1
k
k
k
k
k−1
k+1
k+1
k
13.3. STRUKTURE PODATAKA 1k
²¯ 2k ±°
2k 2k 1k
²¯ 3k ±° 4k
1k
339
4k
4k
2k
3k 5k 1k 3k
4k
²¯ 5k ±°
2k
6k
6k 1k 3k 5k 7k
Ris. 4. Uz zadatak 3.16. Simetriqno se moe opisati rotacija oko grane (u, v) ako je v desni sin qvora u. Ako je polazno stablo prikazano u rastav enom obliku, posle rotacije se takoe moe predstaviti u rastav enom obliku, pri qemu x-koordinate qvorova nisu promeene. Jasno je da je rotacija reverzibilna transformacija (posle rotacije novog stabla oko grane (v, u) dobija se polazno stablo). Lema. Binarno stablo sa n qvorova moe se pomou n rotacija transformisati u "linearno" stablo, u kome ni jedan qvor nema levog sina. Lema se moe dokazati indukcijom. Za n = 1, 2 tvree je taqno. Neka je tvree taqno za svako binarno stablo sa < n qvorova, i neka je dato proizvo no binarno stablo sa n qvorova. Iz ega privremeno uklonimo proizvo an list v koji je levi sin nekog qvora (ako takav list ne postoji, stablo je ve linearno). Ostatak stabla se pomou najvixe n − 1 rotacije transformixe u linearno stablo. Grana kojom je v povezan sa svojim ocem u nije uqestvovala ni u jednoj rotaciji, pa je v i da e list. Primenom jox jedne rotacije oko grane (u, v) dobija se linearno stablo. Time je lema dokazana. Primetimo da je rezultujue linearno stablo jednoznaqno odreeno polaznim stablom, jer su x-koordinate polaznih qvorova jednake kao u polaznom stablu. Isti niz rotacija, primeenih obrnutim redosledom, prevodi linearizovano stablo u polazno. Pomou ove leme lako je dokazati tvree zadatka. Zaista, T i T se sa po najvixe n rotacija transformixu u isto, linearno stablo T od n qvorova. Posle toga se stablo T pomou najvixe n rotacija (istih onih koje T prevode u T , ali obrnutim redosledom) prevodi u stablo T . 3.18. Moe se iskoristiti sliqna ideja kao za formirae unija skupova. Polazi se od "elementarnih" grafova | grafova zadatih listom povezanosti. U opxtem sluqaju se grafovi predstav aju korenskim stablom, pri qemu su elementarni grafovi predstav eni samo jednim qvorom | korenom. Unija dva grafa{stabla formira se tako xto se pokazivaq na oca korena jednog stabla (prethodno nil) usmeri ka korenu drugog stabla, dakle pomou O(1) operacija. Preostaje pitae kako za graf predstav en ovakvim stablom odrediti skup qvorova i kako za dva qvora ustanoviti da li su povezani granom. Skup qvorova grafa je unija svih skupova qvorova | elementarnih grafova. Da bi se za dva qvora ustanovilo da li su povezani granom, najpre se proverava da li pripadaju elementarnom grafu; ako nisu, onda su sigurno povezani granom; u protivnom, koristi se lista povezanosti ihovog zajedniqkog elementarnog grafa. 3.19. Za skup T moe se iskoristiti struktura od dva nivoa AVL stabala: qvorovi stabla na vixem nivou (glavnog stabla) su blokovi qiji elementi se pojav uju u T , sa pokazivaqima na korene stabala nieg nivoa, nameenih za smextae elemenata pojedinih blokova. Operacije Umetni(s ) i Obriˇsi(s ) poqiu izvrxeem procedure Koji blok(s ); dobijeni broj bloka se koristi da se iz glavnog stabla dobije pokazivaq na stablo sa elementima tog bloka u T , posle qega preostaje da se na obiqan naqin izvrxe operacije u tom stablu. Trea operacija Obriˇsi blok(j) izvrxava se uklaaem bloka j iz glavnog stabla (posle toga pomono stablo j postaje nedostupno). 3.20. Za izraqunavae suma moe se iskoristiti pomoni niz S, u kome se sume brojeva smextaju na poseban, "razgranat" naqin. Pretpostavimo zbog jednostavnosti da je n = 2 − 1 1
2
2
2
i
i
i
k
340
13. UPUTSTVA I REXE A ZADATAKA
za neko k. Zbir brojeva sa indeksima od 1 do 2 smextamo u S[2 ]. Na taj naqin je problem pode en na dva potproblema dvostruko mae veliqine | nalaee sume za levu (od 1 do 2 − 1) i desnu (od 2 + 1 do 2 − 1) polovinu niza A. Svaki od potproblema moe se rexiti indukcijom. Prvi potproblem rexava se nezavisno, izuzev xto se posle svake operacije Dodaj mora izvrxiti odgovarajua izmena sume u S[2 ]. Drugi potproblem se takoe rexava nezavisno, izuzev xto dobijenoj vrednosti Parcijalna suma treba dodati S[2 ]. "Razmotavajui" rekurziju vidimo da S[i] sadri sumu brojeva od A[j + 1] do A[i], gde je j sa doe strane najblii indeks indeksu i, koji je de iv veim stepenom dvojke nego i (drugim reqima, j se od i dobija pretvaraem u nulu egove najdesnije cifre 1 u binarnom zapisu). Na primer, S[12] sadri sumu A[9] + A[10] + A[11] + A[12] (i = 12 = (1100) , pa je j = (1000) = 8. 3.21. Sve operacije osim poslede lako se realizuju pomou AVL stabla. Da bi se realizovala operacija Dodaj svima(y) koristi se nova globalna promen iva N ivo, u kojoj se quva zbir svih vrednosti | argumenata operacije Dodaj svima. Prema tome, Dodaj svima(y) prosto dodaje vrednost y promen ivoj N ivo. Odredi Vrednost(x) dodaje N ivo vrednosti pridruenoj x. Umetni(x, y) dode uje k uqu x vrednost y − N ivo. k−1
k−1
k−1
k−1
k
k−1
k−1
2
2
13.4. Konstrukcija algoritama indukcijom
4.1. Pretpostavimo zbog jednostavnosti da je stepen n polinoma broj oblika 2 − 1. Mogua je dekompozicija polinoma P (x) = a + a x + · · · + a x na parni i neparni deo, P (x) = P (x ) + xP (x ), gde su 2
p
n
0
2
n
1
k
n
Pp (x) = a0 + a2 x + a4 x2 + · · · + an−1 x(n−1)/2 , Pn (x) = a1 + a3 x + a5 x2 + · · · + an x(n−1)/2
polinomi stepena (n − 1)/2 sa koeficijentima parnih, odnosno neparnih indeksa polinoma P . Time se izraqunavae vrednosti polinoma stepena n svodi na izraqunavae vrednosti dva polinoma stepena (n − 1)/2, dva mnoea i jedno sabirae. Ako T (n) oznaqava broj operacija potrebnih za izraqunavae vrednosti polinoma stepena n − 1 (polinoma sa n koeficijenata), onda je T (2 ) = 2T (2 ) + c, gde je c = 2 za broj mnoea, a c = 1 za broj sabiraa. Poqetne vrednosti su T (0) = 0 i T (1) = 1. Rexee ove diferencne jednaqine je T (2 ) = 2 − 1 (sabiraa, za c = 1), odnosno T (2 ) = 2 + 2 − 2 (mnoea, za c = 2). Dakle, za izraqunavae vrednosti polinoma stepena n = 2 − 1 potrebno je izvrxiti n sabiraa i (3n − 4)/2 mnoea | nexto vixe (za faktor 3/2) u odnosu na Hornerovu xemu. Prednost ovog algoritma nad Hornerovom xemom je jednostavna paralelizacija, jer se vrednosti P (x ) i P (x ) mogu izraqunavati nezavisno. 4.2. Tvree da za A = {1, 2, . . . , n} i proizvo nu funkciju f : A → A postoji neprazan podskup S ⊂ A takav da je na emu f bijekcija, moe se dokazati indukcijom po n, malom izmenom induktivne konstrukcije algoritma. Tvree je taqno za n = 1. Ako je taqno za brojeve < n, onda li su u A = {1, 2, . . . , n} svi elementi slike nekih elemenata iz A (tada je S = A 6= ∅), ili postoji takav elemenat a ∈ A u koji se ne preslikava ni jedan elemenat A. Tada je f : A\{a} → A\{a} funkcija definisana na podskupu A\{a} ⊂ A, pa po induktivnoj hipotezi postoji podskup S ⊂ A \ {a} ⊂ A, S 6= ∅, na kome je f bijekcija. 4.3. Invarijanta pet e je sledei iskaz: samo jedna meu osobama 1, 2, . . . , N aredni − 1 moe da bude kandidat za zvezdu, a to je osoba i ako je j = N aredni, ili osoba j ako je i = N aredni. 4.4. Rekurzivni algoritam za izraqunavae faktora ravnotee i visina svih qvorova iz ode ka 4.7 rexava ovaj problem kao specijalni sluqaj, a efikasan je: za priblino uravnoteena stabla sloenost T (n) (gde je n broj qvorova) zadovo ava diferencnu jednaqinu T (n) = 2T (n/2)+c, qije je rexee T (n) = O(n). Preciznije, da bi se doxlo do algoritma, treba malo promeniti induktivnu hipotezu: za stablo sa mae od n qvorova umemo da izraqunamo visine svih qvorova i da proverimo da li je AVL stablo. Za dato stablo sa n qvorova najpre se izraqunava visina korena preko visine podstabala. Stablo je AVL stablo ako je k
k
k
k−1
k
k
k−1
k
p
2
n
2
13.4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
341
faktor ravnotee korena (razlika visina levog i desnog podstabla, ako oba postoje, ili visina levog podstabla, ako samo ono postoji, ili visina desnog podstabla sa znakom minus, ako samo ono postoji, ili 0 ako stablo ima samo koren) u skupu {−1, 0, 1}, i oba podstabla su mu (ako postoje) AVL stabla. Ako se na pojavu qvora sa faktorom ravnotee modula veeg od 1 reaguje izlaskom iz rekurzije, onda je algoritam efikasan i za neuravnoteena stabla. 4.5. Za S-AVL qvor v rei emo da je PS-AVL qvor ako ni jedan egov potomak nije S-AVL qvor. U stablu postoji bar jedan S-AVL qvor akko u emu postoji bar jedan PS-AVL qvor. Problem se rexava indukcijom, odnosno rekurzivnom procedurom koja za podstablo sa datim korenom odreuje visinu i proverava da li u emu postoji neki S-AVL qvor (i oznaqava sve PS-AVL qvorove u sluqaju potvrdnog odgovora). Procedura, primeena na koren stabla, generixe rekurzivne pozive za levo, odnosno desno podstablo. Time su u podstablima oznaqeni svi PS-AVL qvorovi | ako ih ima; ako S-AVL qvorova nema ni u levom ni u desnom podstablu, a visine podstabala su jednake, koren se oznaqava kao PS-AVL qvor; visina stabla (ako ima vixe od jednog qvora) dobija se poveavaem za jedan vee od visina podstabala. 4.6. Moe se primeniti algoritam za rekurzivno izraqunavae faktora ravnotee i visina svih qvorova stabla (videti ode ak 4.7), u kome za svaki izraqunati faktor ravnotee qvora proverava da li je on jednak 1; ako se za bilo koji qvor dobije vrednost razliqita od 1, stablo nije L-AVL stablo. 4.7. Problem se moe rexiti rekurzivnim algoritmom. Proverava se da li su oba stabla neprazna; ako jesu, proverava se da li oba korena imaju levog sina, a ako ga imaju, rekurzivno se proverava da li su jednaka leva podstabla. Ako jesu, proverava se da li oba korena imaju desnog sina, a ako ga imaju, rekurzivno se proverava da li su jednaka desna podstabla. 4.8. Koji od sabiraka S[1], S[2], . . . , S[n] ulaze u sumu K moe se opisati nizom R duine n, takvim da je R[i] = true akko S[i] uqestvuje u sumi. Komponente R[i] izraqunavaju se redom za i = n, n−1, . . . , 1, korixeem delimiqne sume k, qija je poqetna vrednost k = K . U pet i se izvrxavaju dve operacije R[i] := P [i, k].P ripada; k := k − S[i];. 4.9. Videti sliku 5.
begin
indeksi tekue prekidne taqke f (x), f (x) i f (x)} while i ≤ k and j ≤ l do x := min{x ,x }; {naredna prekidna taqka x} if x ≤ x then i := i + 1; {popravka vrednosti f (x) = f (x ) = h } if x ≤ x then j := j + 1; {popravka vrednosti f (x) = f (x ) = h } H := max{h , h }; {vrednost f (x) posle novog prekida x} if H 6= h then k := k + 1; x := x; h := H {nova prekidna taqka f (x)} 0
i := 0; j := 0; k := 0; { 0 i+1
00 j+1
0 i+1 00 j+1
0
0
00
0 i
00 j
k
k
end
00
k
Ris. 5. Uz zadatak 4.9.
0 i
00
0 i
00 j
00 j
342
13. UPUTSTVA I REXE A ZADATAKA
4.10. Dato je funkcija n
gi (x)
=
GLi ,Di ,Vi (x) 0, Vi + (x − Li ), V + δi + x − (Li + δi ), i 0,
=
gde je δ
i
x < Li Li ≤ x < Li + δi Li + δi ≤ x < Di x ≥ Di
.
. Maksimum nekoliko ovakvih funkcija je fukcija oblika
= (Di − Li )/2
g(x1 ,h1 ,k1 ),(x2 ,h2 ,k2 ),...,(xm ,hm ,km ) (x)
sa prekidnim taqkama (x , h ) i nagibom k ∈ {0, ±1} u intervalu [x , x ), 0 ≤ i ≤ m. Drugim reqima, vrednost funkcije u taqki x ∈ [x , x ) je h +k (x−x ). Zbog jednostavnosti se moe smatrati da je x = −∞, h = 0, k = 0, x = +∞. Problem se takoe rexava dekompozicijom: n zadatih funkcija dele se u dve jednake grupe, rekurzivno se za ih odreuju dve funkcije | maksimumi, i na kraju se u O(n) koraka nalazi maksimum te dve funkcije. Objediavae dve funkcije poqie objediavaem ihovih nizova prekidnih taqaka, O(n) koraka; u intervalima izmeu dve uzastopne prekidne taqke obe funkcije su linearne, pa se maksimum lako odreuje. Ako se dve linearne funkcije u intervalu seku, dodaje se nova prekidna taqka, koja interval deli na dva podintervala. Obrada svih intervala izvrxava se za O(n) koraka. Ukupna sloenost algoritma je rexee diferencne jednaqine T (n) = 2T (n/2) + cn, tj. O(n log n). 4.11. Rexee je sliqno rexeu problema nalaea podniza sa maksimalnim zbirom, pri qemu ovde treba da e pojaqati induktivnu hipotezu zbog promene znaka proizvoda elemenata posle mnoea novododatim negativnim brojem. Pretpostav amo da za niz x , x , ..., x , m ≤ n, znamo • podniz x , x , . . . , x sa maksimalnim proizvodom p ; • sufiks x , x , . . . , x sa maksimalnim proizvodom p , i • sufiks x , x , . . . , x sa minimalnim negativnim proizvodom p . Posle dodavaa broja x , nove vrednosti p , p , p su i
i
i
i
i
0
0
i+1
0
i
i
i+1
i
m+1
1
2
m
i
i+1
1
j
r
r+1
m
s
s+1
m
m+1
2
3
1
2
3
(p2 , p3 )
:=
(xm+1 p2 , xm+1 p3 ), (1, −1), (xm+1 p3 , xm+1 p2 ),
p1
:=
max{p1 , p2 }.
xm+1 > 0 xm+1 = 0 , xm+1 < 0
Bez smaea opxtosti moe se pretpostaviti da su brojevi x razliqiti od nule: u protivnom nule razdvajaju niz na podnizove, za koje se problem rexava nezavisno, jer su svi proizvodi koji prelaze granicu nekog od ovih podnizova, jednaki nuli. 4.12. Problem se rexava sliqno kao nalaee faktora ravnotee qvorova grafa (ode ak 4.7). Induktivna hipoteza je da za stabla sa mae od n qvorova umemo da izraqunamo visinu korena, da oznaqimo sve kritiqne qvorove, a time i da ustanovimo da li unutar stabla postoji neki ne-AVL qvor (a time i neki kritiqan qvor). Za dato stablo sa n qvorova primeuje se induktivna hipoteza na egovo levo i desno podstablo, posle qega se moe izraqunati visina korena, proveriti da li je koren kritiqan qvor, oznaqiti ga ako jeste, a time i ustanoviti da li unutar celog stabla postoji neki ne-AVL qvor. Trajae obrade korena je O(1), pa je sloenost rekurzivnog algoritma O(n). 4.13. Rexee je jednostavno za stablo sa jednim ili dva qvora. Pretpostavimo da umemo da reximo problem za stabla sa n qvorova, i neka je dato stablo T sa n + 1 qvorom. Neka je v proizvo ni list u T (qvor koji je povezan sa samo jox jednim qvorom), i neka je w jedini qvor susedan sa v. Uklaaem v iz T dobijamo stablo T sa n qvorova, za koje prema induktivnoj hipotezi umemo da izraqunamo matricu svih rastojaa u O(n ) koraka. Rastojae od v do proizvo nog qvora u iz T je za jedan vee od rastojaa od w do u; drugim reqima, svaki elemenat naredne, (n + 1)-e vrste matrice izraqunava se pomou O(1) operacija. i
0
2
0
13.4. KONSTRUKCIJA ALGORITAMA INDUKCIJOM
343
Nije texko transformisati ovaj algoritam u nerekurzivni, formirajui najpre u O(n) koraka dva niza qvorova u , v takvih da se polazei od qvora u = v u i-tom koraku qvor u povezuje granom sa qvorom v , i = 2, 3, . . . , n, i tako dobija T . Pri tome je uvek v ∈ {u , u , . . . , u }. Vrsta matrice koja odgovara qvoru u (i-ta vrsta) dobija se tako xto se odgovarajui elementi vrste qvora v (dakle jedne od prethodnih vrsta) poveaju za jedan; izuzetno, dijagonalnim elementima dode uje se vrednost 0. 4.14. Stablo sa dijametrom 0 je jedan (izolovani) qvor; stablo sa dijametrom 1 qine dva qvora povezana granom. Stablo sa vixe od dva qvora ima dijametar najmae dva. Ako je δ = δ(T ) dijametar stabla T i qvorovi u, v su takvi da im je rastojae d(u, v) = δ , onda su qvorovi u, v listovi, tj. qvorovi sa po samo jednim susedom (u protivnom, ako npr. u nije list, put izmeu u i v mogao bi se produiti drugom granom iz u do qvora npr. w, i bilo bi d(w, v) = δ + 1, suprotno pretpostavci). Ako se od stabla T sa bar tri qvora formira stablo T uklaaem svih listova, onda su sa svakog puta izmeu dva lista u T ukloeni prvi i posledi qvor, pa je δ(T ) = δ(T ) − 2. Isti postupak moe se ponoviti sa stablom T , ako je broj egovih qvorova bar 3, itd. Na kraju se dolazi ili do izolovanog qvora (δ = 0), ili do dva qvora povezana granom (δ = 1), a dijametar polaznog stabla je δ + 2k, gde je k broj iteracija. Sloenost algoritma je O(n), gde je n = |V |, jer je za uklaae svakog qvora potrebno izvrxiti O(1) operacija. 4.15. Za rexavae problema ranca (odreivae podskupa brojeva k , k , . . . , k sa sumom K ) dovo an je jedan radni vektor A duine K , u kome sa za svako k, 0 ≤ k ≤ K , pamti samo posledi sabirak u sumi jednakoj k, ili se vrednoxu −1 oznaqava da ne postoji podskup sa zbirom k. Najpre se rexava problem sa 0 sabiraka, stav aem A[0] := 0 i A[k] := −1 za k = 1, 2, . . . , K (xto znaqi da je bez ijednog sabirka mogu samo zbir 0). Zatim se za i = 1, 2, . . . , n prave svi mogui zbirovi u koje ulazi novi sabirak k : za sve vrednosti k = 0, 1, 2, . . . , K , takve da je A[k] ≥ 0, ako je k + k ≤ K , stav a se A[k + k ] := k , qime se registruje da je mogue dobiti zbir k + k sa posledim sabirkom k (prethodno je zbir k dobijen kao zbir nekog podskupa skupa k , k , . . . , k ). Ako se na kraju dobije A[K] ≥ 0, onda postoji podskup sabiraka sa sumom K , i taj podskup je lako rekonstruisati: prvi sabirak je A[K]; naredni je A[K − A[K]], itd. 4.16. Za rexavae ove varijante problema ranca moe se iskoristiti matrica P [i, j] sa po ima P ostoji i P ripada iz algoritma Ranac (slika 4.11). Treba staviti P [i, k].P ostoji := true akko vrednost true ima bilo koji od elemenata P [i − 1, k], P [i − 1, k − k ], P [i − 1, k − 2k ], .... Elegantnije rexee je staviti P [i, k].P ostoji := true akko (P [i − 1, k].P ostoji := true ili (k − k ≥ 0 i P [i, k − k ].P ostoji := true). Ako je od uslova u zagradi ispuen drugi, i samo onda stav a se P [i, k].P ripada := true. 4.17. I ovaj problem moe se rexiti primenom dinamiqkog programiraa. Za svaki par (i, k), 0 ≤ i ≤ n, 0 ≤ k ≤ K , neka je C[i, k] najvea mogua vrednost ranca sa sadrajem teine k, ako se u emu mogu nai samo prvih i predmeta, i neka je λ(i, k) broj primeraka predmeta tipa i u nekom od sadraja ranca sa vrednoxu C[i, k]. Graniqni uslovi za matrice C i λ su C[i, 0] = λ[i, 0] = 0, C[0, k] = λ[0, k] = 0, 0 ≤ i ≤ n, 0 ≤ k ≤ K . Podskup prvih i elemenata sa sumom k, takav da ima najveu vrednost, moe se dobiti na jedan od sledea dva naqina: podskup sadri, ili ne sadri i-ti elemenat. U prvom, odnosno drugom sluqaju najvea vrednost podskupa je C[i − 1, k] (pri qemu je λ[i, k] = 0), odnosno C[i, k − k ] + v (pri qemu je λ[i, k] = λ[i, k − k ] + 1). Prema tome, C[i, k] = max {C[i − 1, k], C[i, k − k ] + v }, a λ[i, k] ima vrednost 0 ili λ[i, k − k ] + 1, u zavisnosti od toga da li je vea prva ili druga vredost u izrazu za C[i, k]. Na taj naqin se pomou O(nK) operacija izraqunavaju kompletne matrice C i λ. Na kraju se rekurzivno izraqunavaju brojevi a korixeem pomonog niza w. Najpre je a = λ[n, K], w = K , a zatim w = w − λ[i, w ]k , a = λ[i − 1, w ], za i = n, n − 1, . . . , 2. 4.18. Zbir elemenata u traenim podskupovima treba da bude S/2, pa S mora da bude paran broj. Za nalaee podskupa sa sumom S/2 moe se iskoristiti obiqan algoritam za rexavae problema ranca, (slika 4.11) sloenosti O(n · S/2) = O(nS). i
1
i
i
1
i
2
i
2
i−1
i
i
0
0
0
0
0
0
1
n
2
i
i
i
i
1
i
i
2
i−1
i
i
i
i
i
i
i
i
i
n
n
i−1
i
i
i
i−1
i−1
i
i
344
13. UPUTSTVA I REXE A ZADATAKA
4.19. Pretpostavimo da postoji podskup datog skupa k , k , . . . , k sa sumom k. Crnu kutiju primeujemo na niz k , k , . . . , k ; ako je odgovor "da", onda postoji suma{rexee u koju ne ulazi k ; u protivnom, k obavezno ulazi u sumu, i potrebno je odrediti podskup skupa k , k , . . . , k sa sumom k − k . U oba sluqaja smaen je ulaz jednom upotrebom crne kutije, i ustanov eno je da li k ulazi u zbir. 4.20. Neka je h najmai broj poteza potrebnih da se n diskova prebaci sa xtapia A na xtapi B. Oqigledno je h = 1. Pretpostavimo da znamo rexee za problem sa n − 1 diskom. Problem sa n diskova na xtapiu A mora se rexavati tako da se najvei disk ne dira sve dok se n − 1 maih diskova ne prebaci u h poteza na xtapi C | tek tada se najvei disk moe premestiti na xtapi B. Posle toga se na ega mogu naslagati ostali diskovi, xto se moe izvesti najmae za narednih h poteza. Dakle, problem sa n diskova moe se rexiti za h = 2h + 1 poteza. Ova diferencna jednaqina moe se prepisati u obliku h + 1 = 2(h + 1), odakle je h + 1 = 2(h + 1) = 2 (h + 1) = · · · = 2 (h + 1) = 2 , odnosno h = 2 − 1. 4.21. Problem se rexava indukcijom, kao i osnovna varijanta, koristei zapaae da se najvei disk ne moe pomeriti dok zadati xtapi ne bude prazan, a ostali diskovi sloeni na treem (preostalom) xtapiu. Preciznije, postoje dve mogunosti: ili je najvei disk na dnu zadatog xtapia, ili se nalazi na dnu pogrexnog xtapia. U prvom sluqaju samo treba na najvei disk rekurzivno premestiti ostalih n − 1 diskova | najvei disk ne ometa ihova premextaa zbog svoje veliqine. U drugom sluqaju se n − 1 maih diskova rekurzivno (na najjednostavniji naqin) premexta na trei disk, najvei disk se premexta na zadati xtapi, pa se drugi put rekurzivno (kao u osnovnoj varijanti problema!) n − 1 maih diskova premexta na zadati xtapi. 1
1
2
n
1
2
n
2
n−1
n
n
n−1
n
n
1
n−1
n−1
n
n
n
n−1 n
n−1
n
2
n−1
n−1
n−2
1
n
13.5. Algoritmi za rad sa nizovima i skupovima
5.1. B moe da postavi seriju pitaa "da li je 2 vee od n", za i = 1, 2, . . . , m, gde je m = blog nc + 1. Posle toga zna se da je 2 ≤ n < 2 , pa sledi serija pitaa koja odgovara binarnoj pretrazi intervala (2 , 2 ] veliqine 2 | ukupno m − 1 pitae. Ukupan broj pitaa je 2m − 1 = 2blog nc + 1. 5.2. Ako sa T (n) oznaqimo oqekivani broj pitaa za pogaae broja iz intervala od n uzastopnih prirodnih brojeva (oqekivani broj pitaa ne zavisi od poqetka intervala!), onda T (n) zadovo ava sledee diferencne jednaqine i
m−1
2
m−1
m
m
m−1
2
T (2k) = 1 +
k T (k) 2k
+
k T (k) 2k
= 1 + T (k),
k≥1
(interval od 2k brojeva se pomou jednog pitaa brojem m razbija na dva podintervala od po k brojeva sa jednakim verovatnoama k/(2k) = 1/2), odnosno T (2k + 1) = 1 +
k+1 T (k 2k+1
+ 1) +
k T (k), 2k+1
k≥1
(interval od 2k +1 brojeva se analogno razbija na jedan interval od k +1 i jedan interval od k brojeva, pri qemu su verovatnoe da izabrani broj bude u prvom, odnosno drugom intervalu redom (k + 1)/(2k + 1), odnosno k/(2k + 1)). Poxto je T (1) = 0, za T (97) dobija se 1+ =
2+
=
3+
=
4+
=
5+
=
6+
49 T (49) + 48 T (48) = 1 + 49 (1 + 25 T (25) + 24 T (24)) + 48 (1 + T (24)) 97 97 97 49 49 97 25 72 25 13 12 72 T (25) + T (24) = 2 + (1 + T (13) + T (12)) + (1 + T (12)) 97 97 97 25 25 97 84 13 7 6 84 13 T (13) + 97 T (12) = 3 + 97 (1 + 13 T (7) + 13 T (6)) + 97 (1 + T (6)) 97 7 7 T (7) + 90 T (6) = 4 + 97 (1 + 47 T (4) + 73 T (3)) + 90 (1 + T (3)) 97 97 97 4 93 4 93 2 T (4) + 97 T (3) = 5 + 97 (1 + T (2)) + 97 (1 + 3 T (2) + 13 T (1)) 97 1 T (2)(4 + 93 · 23 ) = 6 + 66 . 97 97
13.5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
345
5.3. Ako je u nekom trenutku traena strana x u opsegu izmeu strana m i n, i ako je kiga otvorena na neparnoj strani y, onda je¥ po uslovu ¦ m+n 2
−0.1(n − m + 1) ≤ y −
≤ 0.1(n − m + 1).
Ako je x = y ili x = y + 1, traena strana je pronaena; u protivnom treba pretraiti ili opseg od m do y − 1 (duine y − m) ili opseg od y + 2 do n (duine n − y − 1). Koristei oqigledne nejednakosti − ≤b c≤ , dobijamo da je veliqina novog opsega maa ili jednaka od m+n 2
m+n 2
1 2
m+n 2
=
min{y − m, n − y − 1} ≤ ©¥ m+n ¦ ¥ ¦ ª − m + 0.1(n − m + 1), n − 1 − m+n + 0.1(n − m + 1) 2 2 ª © − m + 0.1(n − m + 1), n − 1 − m+n + 12 + 0.1(n − m + 1) min m+n 2 2
=
min {0.6(n − m) − 0.1, 0.6(n − m) − 0.4} = 0.6(n − m) − 0.4.
=
min
Ako sa a oznaqimo veliqinu opsega strana posle k otvaraa kige, onda je a = 1998, a ≤ 0.6a − 0.4, odnosno a + 1 ≤ 0.6(a + 1) ≤ 0.6 (a + 1) ≤ · · · ≤ 0.6 (a + 1). Traee se zavrxava najkasnije u trenutku kad je a ≤ 1, odnosno 0.6 · 1999 ≤ 2, ili k ≥ 13.52. Kigu treba otvoriti najvixe 14 puta. 5.4. Moe se iskoristiti binarna pretraga; ulazni tekst podeli se na dve polovine i startuje se program sa prvom polovinom teksta na ulazu. Ako doe do grexke, znamo da je grexka u toj polovini, i nastav amo da e na isti naqin; u protivnom, grexka je u drugoj polovini (pretpostav amo da deo teksta koji izaziva grexku ovom podelom nije preseqen). 5.5. Interpolaciona pretraga dobro radi ako vrednost x ne odstupa mnogo od neke linearne funkcije od indeksa k, 1 ≤ k ≤ n. Zato primer niza na kome interpolaciona pretraga loxe radi treba traiti u kategoriji jako "nelinearnih" monotonih nizova. Na primer, posmatrajmo niz x = k!, i neka u emu treba nai broj z = (n − 1)!. Posle svakog koraka se leva granica intervala indeksa pomera samo za 1. Zaista, ako je k < n − 1 i polazi se od intervala x = k!, x = n!, sledea vrednost leve granice intervala za indekse je k+1, jer je l m l m k+1≤ k+ (n − k) = k + 1 − ≤k+1 5.6. Primer se moe konstruisati indukcijom. Treba obezbediti da na svakom nivou rekurzije najvea dva broja u nizovima koji se objediavaju budu u razliqitim nizovima. Induktivnu hipotezu da se najvea dva broja nalaze u prvoj i drugoj polovini niza proxirujemo zahtevom da se najvei broj nalazi na posledem mestu u nizu. Za k = 1 niz 1, 2 zadovo ava ove uslove. Ako je x , x , . . . , x niz sa traenim osobinama, onda i niz od 2n = 2 elemenata k
k
k−1
k
2
k−1
0 k
k−2
0
k
k
k
k
n
k
(n−1)!−k! n!−k!
k(n−1)!+k!(n−k−1) n!−k!
1
k+1
n
2
2x1 − 1, 2x2 − 1, . . . 2xn − 1, 2x1 , 2x2 , . . . 2xn ,
ima te osobine: obe polovine ovog niza imaju iste meusobne odnose elemenata kao i niz x , x , . . . , x , pa sva objediavaa pri ihovom sortirau po induktivnoj hipotezi sadre maksimalni broj uporeivaa. Pored toga, najvei brojevi 2x − 1 i 2x (x je po induktivnoj hipotezi najvei meu brojevima x , x , . . . , x ) se nalaze u razliqitim podnizovima, a najvei od 2n brojeva, 2x nalazi se na posledem mestu u nizu. 5.7. Sortirae se moe svesti na maksimum pravougaonika. Za date brojeve a , a , ..., a najpre se izraquna a = min{a | 1 ≤ i ≤ n} i b = max{a | 1 ≤ i ≤ n}, pa se za pravougaonike (a − a, b − a, a − a), 1 ≤ i ≤ n (sa visinama jednakim x-koordinati levog kraja a − a i "poravnatim" desnim krajevima b − a) odredi ihov maksimum. Dobijena funkcija f (x) odreuje sortirani redosled brojeva a , a , . . . , a : to je x + a, x + a, . . . x + a (levi gori uglovi svih pravougaonika lee na pravoj y = x). 5.8. Na kraju svakog prolaska kroz osnovnu pet u algoritma na na slici 8) taqno je sledee tvree: x[i] ≤ pivot za 1 ≤ i ≤ L i x[i] > pivot za D ≤ i ≤ n, xto se lako dokazuje indukcijom po broju prolazaka kroz pet u. Pored toga, u svakom prolasku kroz pet u se L 1
n
2
n
1
2
n
n
n
n
1
n
i
i
i
i
i
(x1 ,x1 ),(x2 ,x2 ),...(xn ,xn )
1
2
n
1
2
n
2
346
13. UPUTSTVA I REXE A ZADATAKA
poveava, a D smauje najmae za 1, pa posle najvixe n/2 prolazaka kroz pet u mora da nastupi uslov za iskakae iz pet e L ≥ D. Preciznije, u tom trenutku je D = L − 1, jer se L zaustav a na vrednosti indeksa D zateqenoj iz prethodnog prolaska kroz pet u, a onda se D smauje samo za 1. Poxto je pokazivaq L u posledem prolasku "prexao" sve qlanove niza do indeksa D, zak uquje se da je na kraju x[i] ≤ pivot za i ≤ D i x[i] > pivot za i ≥ D + 1. 5.9. Pretpostav amo da se radi sa promeenim algoritmom Razdvajanje (slika 8), tako da ako pivot nije jednak X[Levi], onda se najpre zameuje sa X[Levi]. Neka je X[1] = 1, X[n] = 2, i neka su svi ostali elementi vei od 2. U tom sluqaju jasno je da e pivot biti X[n]. Promeeni algoritam Razdvajanje e najpre zameniti X[1] sa X[n] (pivot na poqetak niza), a onda e zameniti X[n] sa X[2] (jer je sada X[n] = 1 < 2 i X[2] > 2). Poxto su svi ostali elementi vei od 2, nema drugih zamena. Rezultat razdvajaa je dolazak 1 i 2 na ihova prava mesta na poqetku niza. Sortirae razdvajaem nastav a se rekurzivno na nizu od treeg do posledeg elementa. Da bi se nastavilo na isti naqin, trei najmai elemenat treba da bude na poziciji 3, a (poxto je elemenat na posledoj poziciji u nizu posle razdvajaa na poqetku bio na drugoj poziciji) qetvrti najmai elemenat na poziciji 2. Preme tome, ako je n parno, niz brojeva 1, 4, 3, 6, 5, . . . , n, n − 1, 2 (na krajevima su 1 i 2, a na pozicijama 2i, 2i + 1 nalaze se brojevi 2i + 2, 2i + 1 za 1 ≤ i ≤ n/2 − 1) se primenom sortiraa razdvajaem ureuje pomou Ω(n ) uporeivaa. 5.10. Podelimo skup na dva podskupa sa jednakim brojem elemenata. Rexivxi rekurzivno oba potproblema, dobijamo dva minimalna (m , m ) i dva maksimalna elementa (M , M ) u podskupovima. Maksimalni elemenat u polaznom skupu je max{M , M }, a minimalni je min{m , m }, tj. za objediavae dva rexea dovo na su dva uporeivaa. Ako sa T (n) oznaqimo broj potrebnih uporeivaa za ulaz veliqine n, onda se za parno n dobija T (n) = 2T (n/2) + 2, T (2) = 1. Prema tome, T (2 ) + 2 = 2(T (2 ) + 2) = 2 (T (2 ) + 2) = · · · = 2 (T (2) + 2) = 3 · 2 − 2, tj. za n = 2 je T (n) = n. 5.11. Rezultat je prikazan sledeom tabelom (f je uqestanost pojav ivaa znaka c , l je duina odgovarajue kodne reqi u bitima, i = 1, 2, . . . , 9). Ukupan broj upotreb enih bita je 64, u odnosu na 168 bita ako se upotrebi ASCII kˆo d (osmobitni), odnosno 21 × 4 = 84 bita ako se svaki znak kodira sa po 4 bita. i c f l kˆo d 2
1
2
1
2
1
1
2
2
k
k−1
k−1
k−1
i
1 2 3 4 5 6 7 8 9
a r
b v d n h m
i
4 4 4 2 2 2 1 1 1
2
k−2
3 2 i
k
i
i
i
2 2 3 3 4 4 4 5 5
00 01 111 100 1100 1101 1011 10100 10101
5.12. Matrica rastojaa podstringova A i B, zajedno sa strelicama koje prikazuju edit operacije najmae cene data je tabelom 1: U doem desnom uglu tabele pronalazimo da je minimalni broj edit operacija 6. Do doeg desnog ugla dolazi se samo operacijom . Idui da e unazad, vidimo da se od goreg levog do doeg desnog ugla tabele moe doi npr. nizom operacija , xto odgovara sledeem nizu transformacija: →
&&&&&&&&→→
a b 1+
a a 0+
b a 1+
c c 0+
c b 1+
b a 1+
b b 0+
a a 0+
φ c 1+
φ c 1
= 6.
5.13. Neka je n = bn/2c. Posmatrajmo vrednost w = A[n ]. Ako je w ≥ z, onda se z mora pojaviti u nizu A[1], A[2],... A[n ] (razlika uzastopnih qlanova niza je najvixe 1, pa ni jedna 1
1
1
13.5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA B
0
1 b
A 0 1
a
0
→
↓
&
1 ↓
2
a
3
b
4
c
5
c
↓
2 ↓
3
3
↓
↓ ↓
6
b
6
7
b
7 ↓
↓
8
a
8
7
↓
&
2 &
↓ ↓ ↓
&
5 &
6
→
4
5 b →
5
↓
&
6 &
2
→
6
7 b →
7
→
3
→
4
→
1
→
↓
&
↓ ↓
2
→
5
→
2
2
→
↓
&
2
→
3
↓
&
3
↓
↓
5
4
3 & &
10 c
8
→
9
→
10
→
6
→
7
→
8
→
9
4
→
5
→
6
→
7
→
8
4
→
5
→
6
→
7
&
&
4
→
9 c
&
&
& &
3
8 a &
&
3 3
→
&
↓
&
→
4
3
→
↓
&
↓
↓
5 ↓
↓
6
6
5
→ &
&
6 &
6
6 a &
3 &
4 &
3
2 &
3 &
5 &
→
1
4 &
→
4 c
& ↓
↓
↓
1
2
3 a &
&
&
5
2
&
3
↓
→
1 &
2 ↓
1
2 a
347
4
&
4 4
&
&
4
Tablica 1. Uz zadatak 5.12
5
→ & →
&
↓
&
→
5
5
5
→
4
&
&
&
4
4
5
→ &
&
4
&
→
5 &
↓
→
6
&
5 & &
↓
5
→
6
→
7
4
→
5
→
6
1
2
2
1
2
↓
6
vrednost ne moe biti preskoqena). U protivnom, ako je w < z, onda se z mora pojaviti u nizu A[n + 1], A[n + 2],... A[n]. U oba sluqaja se problem svodi na pretragu skupa od najvixe dn/2e elemenata, sloenost T (n) zadovo ava diferencnu jednaqinu T (n) ≤ T (dn/2e) + 1, T (1) = 0, qije je rexee T (n) ≤ dlog ne (videti rexee zadatka 2.10). 5.14. Moe se iskoristiti teorijsko-informaciona granica. Broj moguih odgovara na pitae postav eno u zadatku 5.13 je n (z moe biti jednako nekom od brojeva A[1], A[2],... A[n]). Prema tome, stablo odluqivaa koje rexava ovaj problem mora imati n listova (gde i-ti list odgovara rexeu z = A[i]). Visina takog stabla odluqivaa je najmae dlog ne. Sloenost algoritma iz rexea zadatka 5.13 jednaka je ovoj dooj granici, xto znaqi da je taj algoritam optimalan u najgorem sluqaju. 5.15. Moe se upotrebiti broj, za jedan vei od najveeg broja u skupu S. Algoritam sloenosti mae od Ω(n) ne moe da rexava ovaj problem za sve ulaze, jer ne moe da pregleda svih n elemenata skupa S. 5.16. (a) Treba sortirati skup S a zatim za svako z ∈ S izvrxiti binarnu pretragu skupa S za brojem x − z. (b) Problem se moe rexiti indukcijom, sa sledeom induktivnom hipotezom: umemo da reximo problem za sortirani skup od < n elemenata. Neka je dat rastue ureeni niz S od n elemenata. Posmatrajmo zbir y = S[1] + S[n]. Ako je y = x, problem je rexen. Ako je y > x, onda S[n] ne moe biti deo rexea, jer za svako i vai S[n]+S[i] > S[n]+S[1] = y > x; S[n] se dakle moe eliminisati (izvoeem O(1) operacija) i preostali problem rexiti indukcijom. Ako je y < x, onda sliqno S[1] ne moe biti deo rexea (S[1]+S[i] < S[1]+S[n] = y < x), pa se eliminixe S[1]. Razmotavajui rekurziju, vidimo da se u algoritmu koriste dva pokazivaqa, Levi (poqetna vrednost 1) i Desni (poqetna vrednost n). U pet i (qije izvrxavae traje sve dok je Levi < Desni i y 6= x) se proverava suma y = S[Levi] + S[desni]; ako je y = x, problem je rexen, a ako je y > x (y < x) dekrementira se Desni (inkrementira se Levi). 5.17. Neka u prvom skupu ima k, a u drugom n − k elemenata. Oznaqimo elemente prvog, odnosno drugog skupa, posle sortiraa u rastuem redosledu sa a , a , . . . , a , odnosno 1
6
&
k
348
13. UPUTSTVA I REXE A ZADATAKA
. Za svako i, 1 ≤ i ≤ n − k, niz a + b , a + b , ..., a + b je rastui, pa se binarnom pretragom pomou O(log n) (preciznije dlog ke + 1) uporeivaa meu ovim brojevima pronalazi x, ili se utvruje da ni jedan od ih nije jednak x. Znaqi, za proveru svih parova a + b dovo no je O(n log n) uporeivaa; sloenost poqetnog sortiraa je takoe O(n log n), pa je ukupna sloenost algoritma O(n log n). Drugo rexee. Drugi deo posla, posle sortirae S i S , moe se obaviti efikasnije, algoritmom sloenosti O(n). Posmatraju se (i uporeuju redom sa x) sume a + b , pri qemu se najpre fiksira i = 1, a j uzima vrednosti redom n − k, n − k − 1, .... Bira se takvo j da je a + b > x ≥ a + b ; tada za sve parove (r, s) takve da je r ≥ 1 i s > j , vai a + b > a + b > x, pa ostaju samo parovi (r, s) za koje je 1 ≤ r ≤ k, 1 ≤ s ≤ j . Ako takvo j ne postoji (tj. ako je a + b < x ili a + b > x), posao je zavrxen, odgovor je "ne". U protivnom, pomou m = n − k − j + 1 sabiraa i uporeivaa eliminisano je m − 1 najveih elemenata b , b , ..., b skupa S . Nastav ajui na ovaj naqin (poveavajui indeks r u sumi a + b , pa smaujui indeks s, itd.) dolazi se do rexea. Ukupan broj sabiraa i uporeivaa pri tome nije vei od 2n. 5.18. Nizove elemenata prvog i drugog skupa treba sortirati, pa objediniti, sliqno kao pri sortirau objediavaem, samo xto se usput jox i izbacuju ponov eni elementi (oni koji se pojav uju u oba skupa). 5.19. Pokazaemo da se traeni parovi mogu formirati tako da se za k = 1, 2, . . . , n/2 upare k-ti najmai i k-ti najvei broj iz datog skupa; oznaqimo ovaj raspored sa A, a odgovarajuu vrednost s sa s (A). Da bismo to dokazali, pretpostavimo suprotno, da postoji neko drugo uparivae (raspored B), takvo da je s (B) < s (A). Pretpostavimo da je dati niz prethodno sortiran u rastuem redosledu. Ako u rasporedu B nisu upareni x i x , odnosno ako je x u paru (x , x ), a x u paru (x , x ), onda se od rasporeda B moe napraviti raspored B zamenom ova dva para parovima (x , x ) i (x , x ). Tada je s (B ) ≤ s (B), jer je x +x ≤ x +x ≤ s (B) i x +x ≤ x +x ≤ s (B), tj. svi zbirovi parova u B su mai ili jednaki od s (B), pa je i s (B ) ≤ s (B). Sliqno se od B formira raspored B u kome su upareni x i x , pri qemu je s (B ) ≤ s (B ), itd. Posle najvixe n/2 ovakvih premextaa parova dolazi se (preko niza rasporeda sa nerastuim vrednostima s ) do rasporeda A, tj. s (A) ≤ · · · ≤ s (B ) ≤ s (B ) ≤ s (B), suprotno pretpostavci da je s (B) < s (A). 5.20. Dovo no je parove (a , x ) sortirati (u mestu) prema "k uqu" a (npr. sortirae razdvajaem). Time par (a , x ) dolazi na poziciju a , i = 1, 2, . . . , n, xto je i traeno, 5.21. Na poqetku treba d prvih (minimalnih) elemenata staviti u hip (tako da u korenu bude najmai elemenat). Zatim se u svakom narednom koraku uklaa iz hipa najmai elemenat (iz korena) i umee se sledei elemenat iz onog niza kome je pripadao uklonjeni elemenat (zbog toga se u hipu mora za svaki elemenat quvati i podatak iz kog je niza potekao). 5.22. (a) Moe se svaki elemenat umetnuti u uravnoteeno binarno stablo pretrage (npr. AVL stablo). Svaki qvor u stablu treba da sadri broj pojav ivaa elemenata jednakih egovom k uqu (pri prvom upisu nekog k uqa u stablo brojaq se postav a na nulu, a pri svakom narednom upisu istog elementa, brojaq se inkrementira). Poxto razliqitih k uqeva ima O(log n), broj qvorova u stablu je O(log n), pa je visina stabla O(log log n). Zatim se AVL stablo "isprav a" (videti zadatak 3.2), tj. egovi elementi se u rastuem redosledu kopiraju (i to toliko puta kolika je vrednost odgovarajueg brojaqa) u izlazni niz duine n. (b) Zahva ujui qienici da je mali broj razliqitih elemenata, pri sortirau su bitno korixene vrednosti elemenata, pa ovaj algoritam nije obuhvaen modelom stabla odluqivaa. 5.23. Neka je T uravnoteeno stablo sa n qvorova, i neka je f (n) zbir visina svih qvorova u T . Stablo T dobija se od stabla T dodavaem listova n + 1, n + 2, . . . , 2n qije su visine 0. Visina qvora i i = 1, 2, . . . , n, u T taqno je za jedan vea od egove visine u T , pa je f (2n) = f (n) + n. Pored toga, f (2n + 1) = f (2n). Pomou ovih diferencnih jednaqina b1 , b2 , . . . , bn−k
1
i
2
i
1
2
i
k
2
i
j
i
1
r
s
1
j+1
1
j
j
1
1
1
j+1
n−k−1
r
max
1
n−k
n−k
s
max
max
n
1
1
1
n
i
max
n
j
1
max
max
1
j
1
n
1
j
n
max
i
max
1
1
2
2
max
max
max
max
i
i
n−2
j
n
max
1
n
i
j
max
j
max
max
max
2
2
max
max
1
1
max
i
i
i
i
n
n
n
2n
2n
n
13.5. ALGORITMI ZA RAD SA NIZOVIMA I SKUPOVIMA
349
lako se indukcijom dokazuje nejednakost f (n) ≤ n − 1, kao i da jednakost vai akko je n stepen dvojke. 5.24. Suma visina je T (n) = P blog (n/i)c. Pretpostavimo da je n = 2 − 1. Tada je blog (n/i)c = j za i = 2 , 2 + 1, . . . 2P − 1 (tj. u zbiru se sabirak j pojav uje 2 put), j = 0, 1, 2, . . . , k − 1, pa je T (n) = j2 = 2 − k − 1 = O(n) (sliqna suma izraqunata je u primeru 2.5). Ako n + 1 nije stepen dvojke, tj. 2 − 1 < n < 2 − 1, onda se svaki sabirak u ovoj sumi moe poveati najvixe za jedan, pa se cela suma poveava najvixe za n, i T (n) = O(n). 5.25. Algoritam se sastoji od rekurzivnog spuxtaa niz hip i brojaa elemenata veih od x, dok se ne proe celi hip, ili se ne izbroji k elemenata. Veih od x ima k ili vixe akko je k-ti najvei vei od x. Preciznije, koristi se rekurzivna procedura koja, primeena na (pot)hip sa korenom u zadatom qvoru v polaznog hipa • uporeuje vrednost u korenu v sa x; • ako je rezultat poreea "vee", poveava se za jedan vrednost promen ive m (koja je statiqka, odnosno zajedniqka za sve nivoe rekurzije); • ako je m > k, izlazi se iz procedure; • procedura se zatim rekurzivno poziva za oba sina qvora v . Algoritam najpre postav a poqetnu vrednost m := 0 (broj elemenata hipa veih od x), a zatim primeuje opisanu proceduru na koren hipa. Broj rekurzivnih poziva ograniqen je sa O(k), nezavisno od veliqine hipa. Memorijski prostor O(k) potreban je za stek, odnosno za pamee rekurzivnih poziva. Drugo rexee. Opisano rexee se moe formulisati i mnogo jednostavnije, ako se proqita poglav e 6. Qvorovi sa k uqem veim od x qine jedno podstablo polaznog stabla, pri qemu, ako je k uq nekog qvora ≤ x, onda zbog osobine hipa to isto vai i za sve egove potomke. To podstablo moe se obii bilo kojim postupkom pretrage, DFS ili BFS, pri qemu se pretraga zavrxava i pre kompletnog obilaska ako se nabroji vixe od k qvorova sa k uqem veim od x (usput se pregleda najvixe k qvorova sa k uqem ≤ x). 5.26. Pretpostavimo da algoritam A pronalazi da je elemenat x k-ti najvei posle niza uporeivaa, qiji rezultati nisu dovo ni da se ustanovi da li je neki drugi elemenat x mai ili vei od x . To znaqi da se rezultati tih uporeivaa nee promeniti ako se x zameni brojem y > x ili brojem z < x . Meutim, u ta dva sluqaja ne dobija se isti k-ti najvei elemenat, xto je u kontradikciji sa pretpostavkom. 5.27. Ideja je posmatrati 2k elemenata istovremeno. Poqiemo sa prvih 2k elemenata, i pronalazimo ihovu medijanu (oqekivani broj koraka je O(2k) = O(k)). Elementi vei od medijane se eliminixu. Zatim posmatramo sledeih k elemenata i radimo isto. Postupak se sastoji od oko n/k iteracija u kojima se izraqunava medijana 2k elemenata, pa je sreda vremenska sloenost O(n). 5.28. Raqunari P i Q mogu da (bez razmene poruka) sortiraju svoje skupove. Pretpostavimo dakle da je a < a < · · · < a i b < b < · · · < b . Oznaqimo sa f (i) rang elementa a u nizu B, odnosno sa g(i) rang elementa b u nizu A. Elemenat a (odnosno b ) je medijana unije akko je i + f (i) = n (odnosno i + g(i) = n). Razumno je da poruke koje raqunari razmeuju budu sledeeg tipa: raqunar xa e jedan svoj elemenat drugom raqunaru, a od ega dobija rang tog elementa u drugom skupu. Funkcije i + f (i), i + g(i) su strogo rastue, pa se binarnom pretragom posle najvixe 4 log n razmeenih poruka pronalazi traena medijana. 5.29. Razliqitih moguih odgovora ovde ima n + 1, pa svako stablo odluqivaa koje rexava ovaj problem treba da ima bar n + 1 listova. Odatle neposredno sledi tvree zadatka. 5.30. Ideja je konstruisati tablicu h (videti ode ak 5.6) za onaj deo uzorka koji je ve poznat, i produavati je po dodavau narednih znakova. Ovo nije texko, jer je konstrukcija tablice h sliqna obiqnom traeu uzorka u tekstu. k−j−1
2 k−j−1
n i=1 k−j−1
2
k
k−j
n i=1
k−j−1
k
k
k+1
i
j
i
j
i
i
1
n
2
i
1
2
i
2
n
i
i
350
13. UPUTSTVA I REXE A ZADATAKA
5.31. Promena je minimalna: svaki put kad doe do neslagaa, treba proveriti da li je uklop en prefiks uzorka vei od dotle najveeg: ako jeste, treba zapamtiti egovu duinu i startnu poziciju u tekstu S. 5.32. Deo (b) je ustvari uputstvo za rexavae dela (a). Najpre se izraqunava edit rastojae (i minimalni broj edit operacija) izmeu T i P , pod pretpostavkom da zamene nizu dozvo ene (moe se koristiti algoritam isti kao na slici 5.25, izuzev xto se za cenu zamene uzima vrednost 2, kao da je zamena izvedena jednim umetaem i jednim brisaem). LCS dva niza je niz znakova koji su preklop eni (koji se ne meaju, odnosno nisu ni umetani ni brisani) pri izvoeu edit operacija. SCS se od LCS dobija dodavaem svih umetnutih i obrisanih znakova. 5.33. Novi algoritam se takoe zasniva na dinamiqkom programirau, odnosno izraqunavau matrice svih edit rastojaa prefiksa A(i) i B(j), 0 ≤ i ≤ m, 0 ≤ j ≤ n, pri qemu se samo mea½diferencna jednaqina i prva vrsta matrice (C[0, j] = 0, 0 ≤ j ≤ n), C[i, j] =
min{C[i − 1, j] + 1, C[i, j − 1] + 1, C[i − 1, j − 1] + c(ai , bj )}, min{C[i − 1, j] + 1, C[i, j − 1], C[i − 1, j − 1] + c(ai , bj )},
1≤i 2n − 2). Na sliqan naqin, za neko j je d > 1 (u protivnom bi bilo d ≤ n < 2n − 2 za n > 2). Zbog toga se moe d uda iti iz skupa, a d smaiti za jedan, i tako dobiti regularan problem sa n − 1 brojeva | svi brojevi su i da e prirodni, a zbir im je 2n − 4. Stablo dobijeno primenom induktivne hipoteze na ove brojeve proxirujemo jednim listom stepena d = 1 privezanim za qvor stepena d − 1, posle qega stepen tog qvora postaje d . Time je rexen zadati problem. Sloenost algoritma je O(n). 6.20. Formiraju se dve liste trojki (j, u , i ): L od trojki sa i = 0 i L od ostalih trojki, ureenih po opadajuim vrednostima indeksa j (zbog qega je 1, u , i ) posleda trojka u L ). Za n = 2 mogu je samo niz parova (0, 1), (1, 0), kome odgovara korensko stablo od dva qvora. Sluqaj niza od n parova se na sluqaj n − 1 parova svodi tako xto se skine prva trojka (k, u , i ) sa liste L , a prva trojka (l, u , i ) iz L zameuje se sa (l, u , i − 1); ako je i − 1 = 0, onda se ta trojka premexta iz L u L ; pamti se grana stabla od oca l ka sinu k. Zbir izlaznih stepena je sada n − 2, pa se sa konstrukcijom stabla nastav a rekurzivno. Sloenost algoritma je O(n). 6.21. Da bi u G postojala ovakva numeracija, mora da postoji bar jedan qvor v sa izlaznim stepenom 0; emu se moe pridruiti redni broj n = |V |. Qvor v uklaamo iz grafa zajedno sa granama koje ulaze u ega (smaujemo izlazne stepene odgovarajuih qvorova). Na preostali graf G rekurzivno primeujemo istu proceduru (odnosno egovi qvorovi se na osnovu induktivne hipoteze mogu numerisati na e eni naqin, ili se moe ustanoviti da je takva numeracija nemogua). Ako postoji numeracija G , dobija se numeracija G. U protivnom se ni G ne moe numerisati: ako bi postojala numeracija G, onda bi se ona mogla promeniti tako da u oj qvor v ima redni broj n (qvorovi koji u G imaju izlazni stepen 0 mogu se numerisati sa nekoliko najveih brojeva na proizvo an naqin), qime se dobija numeracija za G , suprotno pretpostavci. 6.22. Moe se iskoristiti pretraga u xirinu (BFS). Polazi se od proizvo nog qvora, koji se boji crvenom bojom i stav a u listu. Zatim se, dok se lista ne isprazni, skida naredni qvor v sa liste (obojen!), oznaqava, egovi oznaqeni susedi se proveravaju (da li im je boja suprotna od egove; ako nekome nije, onda G nije 2-obojiv), a neoznaqeni susedi se stav aju na listu i boje bojom suprotnom od boje v. Ako graf nije povezan, onda se opisani algoritam primeuje posebno na svaku komponentu povezanosti. Sloenost algoritma je linearna, O(|V | + |E|). 6.23. Ako je G povezan, algoritam iz zadatka 6.22 posle izbora boje proizvo nog qvora jednoznaqno odreuje boje svih ostalih qvorova. Ako pretpostavimo da G nije jednoznaqno 2-obojiv, odnosno da postoji pravi podskup U ⊂ V qvorova koji se mogu obojiti bilo jednom, bilo drugom bojom, onda izmeu qvorova u U i V \ U ne moe da postoji ni jedna grana, tj. G nije povezan. 6.24. Moe se iskoristiti algoritam KMP za nalaee uzorka u tekstu, u kombinaciji sa pretragom stabla u dubinu. U toku obilaska se za svaki qvor quva egov status u odnosu na trenutno potencijalno umetae uzorka. Preciznije, za qvor v egovo po e v.Stat jednako je veliqini maksimalnog prefiksa uzorka koji se slae sa sufiksom puta od korena do v (upravo ti podaci quvaju se i u algoritmu KMP). Ulazna obrada za qvor v obuhvata dodavae znaka iz qvora v (kao u narednom koraku algoritam KMP, i izraqunavae v.Stat. Izlazna obrada treba da v.Stat uredno vrati u prethodno stae posle napuxtaa v. Vremenska sloenost algoritma je linearna u odnosu na broj grana stabla. 6.25. Da nema ciklusa, imali bismo posla sa stablom, za koje se problem lako rexava (u emu se neki qvor izabere za koren, a onda se sve grane usmere od korena). Ciklus se moe pronai pretragom u dubinu, u trenutku kad se naie na prvu (i jedinu) granu koja vodi a1 a2 . . . an−1
N 0
n
n−3
n
0 1
n
N
1
2
i
i
k
j
i
j
k
k
j
j
j
0
j
1
j
1
1
1
k
0
k
l
1
l
l
1
l
0
0
0
0
l
13.6. GRAFOVSKI ALGORITMI
355
ka ve poseenom (oznaqenom) qvoru. Ciklus se moe usmeriti tako da postane usmereni ciklus, i da svi egovi qvorovi imaju ulazni stepen 1. Sve ostale grane treba usmeriti u smeru od ciklusa. To se moe postii pokretaem nove pretrage u dubinu od proizvo nog qvora na ciklusu i usmeravaem grana u smeru kojim su prelaene prvi put u toku pretrage. Jedina povratna grana usmerena je prema korenu stabla pretrage, qiji je ulazni stepen 1 (kao i svih ostalih qvorova). 6.26. Ako je G nepovezan graf, onda se posebno obrauje svaka egova komponenta povezanosti, pa se bez smaea opxtosti moe pretpostaviti da je G povezan. Ako je G stablo, odgovor je ne, jer onda G ima mae grana nego qvorova, nedovo no da se svakom qvoru obezbedi grana koja ulazi u ega. U protivnom u G postoji ciklus, koji se moe pronai, na primer, algoritmom sa slike 6.13. Neka su v, w proizvo na dva susedna qvora u tom ciklusu; posle uklaaa grane (v, w) iz G, G ostaje i da e povezan. Polazei od qvora v startuje se DFS grafa G, konstruixe se DFS stablo, a u tom stablu sve grane se usmeravaju od korena v. Grana (v, w) usmerava se od w ka korenu v. Preostale grana mogu se proizvo no orijentisati. 6.27. Na G treba primeniti pretragu u dubinu, i formirati DFS stablo T . Poxto su sve grane grafa povratne u odnosu na T , mogu se sve grane stabla T usmeriti od korena, a sve ostale grane ka qvorovima bliim korenu (tj. ka precima). 6.28. Neka se topoloxkim sortiraem G dobija redosled qvorova v , v , . . . , v . Ako znamo najdui usmereni put qiji je posledi qvor v za i < m ≤ n, onda se najdui meu putevima koji se zavrxavaju u qvoru v dobija produavaem puta do nekog qvora v , i < m, granom (v , v ) | ako ona postoji. Dakle, prilikom prelaska na naredni qvor po topoloxkoj numeraciji, treba proveriti sve grane koje vode u ega. Tako se posle O(|E| + |V |) koraka dobijaju duine najduih puteva do qvorova v , i = 1, 2, . . . , n. Od tih duina bira se najvea. Da bi se rekonstruisao najdui put, pri dodavau novog qvora v treba pamtiti ne samo duinu najdueg puta do v , nego i posledu granu na najduem (ili jednom od najduih) putu. Sloenost algoritma je O(|E| + |V |). 6.29. Traeni algoritam moe se konstruisati prilagoavaem algoritma za topoloxko sortirae, tako xto se svi qvorovi ulaznog stepena 0 zajedno uklaaju iz liste (qvorova stepena 0), i objediuju u prvu grupu. Obrada ovih qvorova vrxi se na isti naqin kao i u algoritmu za topoloxko sortirae: uklaaju se grane koje iz ih izlaze i dekrementiraju se ulazni stepeni qvorova na krajevima tih grana, a zatim se uklaaju novi qvorovi ulaznog stepena 0. Sa preostalim grafom nastav a se da e na isti naqin, pa se dobijaju druga, trea, ...grupa. Nije texko dokazati da proizvo ni qvorovi v, w iz iste grupe (sa rednim brojem i) ne mogu biti povezani putem. Zaista, u prvoj grupi takav put ne moe da postoji, jer su ulazni stepeni svih qvorova u oj jednaki nuli. Ako se radi o grupi i > 1, pretpostavka da postoji put od v do w je neodriva: iz v nema grana ka "niim" grupama, a ako se iz v pree granom u qvor u u "vixoj" grupi, nemogu je povratak u grupu i; ostaje mogunost da postoji put od v do w preko qvorova iz grupe i | koja takoe otpada, prema konstrukciji. Da e, po konstrukciji u svaki qvor iz grupe i ulazi bar jedna grana iz nekog qvora prethodne grupe (u protivnom bi taj qvor morao pripasti nekoj prethodnoj grupi). Polazei iz proizvo nog qvora poslede grupe unazad, uveravamo se da u G postoji usmereni put duine k. 6.30. Moe se iskoristiti pretraga u xirinu polazei od qvora v. Svakom qvoru w pridruuje se po e | brojaq w.BN P sa tekuim brojem najkraih puteva do w. Za sve w ∈ V na poqetku se stav a w.BN P := 0. Proizvo na grana (x, y) na koju se naie u toku pretrage, deo je najkraeg puta od v do y ako je y novi (neoznaqeni) qvor; tada se stav a y.BN P := x.BN P . Ako y nije novi qvor (tj. ve je oznaqen), a x i y nisu u istoj generaciji (na istom rastojau od korena; rastojaa od korena se lako usput izraqunavaju), onda se stav a y.BN P := y.BN P + x.BN P , jer se svaki najkrai put do x granom (x, y) produuje do najkraeg puta do y. 1
n
2
i
m
i
i
m
i
m
m
356
13. UPUTSTVA I REXE A ZADATAKA
6.31. Dovo no je ne koristiti hip. Umesto toga, novi najkrai put se nalazi proverom svih qvorova. Za to je potrebno vreme O(|V |), ali je zato za obradu svake grane dovo no konstantno vreme (jer nije potrebna popravka hipa). 6.32. Ciklus je put koji poqie i zavrxava u istom qvoru. Algoritam za nalaee duina svih najkraih puteva sa slike 6.25 moe se iskoristiti za traee najkraeg ciklusa | puta od v do v preko qvorova v , v , . . . , v (najkraeg m-puta), redom za m = 0, 1, 2, . . . , n = |V |. Dakle, po izvrxeu algoritma sa slike 6.25, duina najkraeg ciklusa jednaka je veliqini najmaeg elementa na dijagonali matrice A. Da bi se pored duina najkraih puteva mogli da odrede i sami najkrai putevi, za svaki elemenat (i, j) matrice treba pamtiti posledi qvor na dotle najkraem putu od v do v ; na kraju je onda lako rekonstruisati same najkrae puteve, u ovom sluqaju najkrai ciklus. 6.33. Najpre formiramo kvadratnu matricu A = A (reda pet) duina najkraih 0-puteva, tj. (simetriqnu) matricu susednosti grafa G | sa velikim brojevima (∞) na pozicijama koje odgovaraju nepostojeim granama, i duinom grane na poziciji u preseku vrste prvog i kolone drugog kraja grane: i
1
i
m
2
i
j
0
∞ 10 A = A0 = ∞ 1 5
10 ∞ 5 ∞ 4
∞ 5 ∞ 3 ∞
1 ∞ 3 ∞ 4
5 4 ∞ 4 ∞
Pri tome vrste, odnosno kolone redom 1, 2, 3, 4, 5 odgovaraju qvorovima redom a, b, c, d, e. Zatim se redom formiraju matrice A duina najkraih m-puteva (puteva koji vode samo preko qvorova sa indeksima maim ili jednakim od m), m = 1, 2, 3, 4, 5: m
Am [i, j] = min {Am−1 [i, j], Am−1 [i, m] + Am−1 [m, j]} ,
1 ≤ i, j ≤ 5.
Izraqunavae matrica A pojednostav uje ihova simetrija. Redom se za matrice A , A , , , dobija m
A3 A4 A5 ∞ 10 10 20 ∞ 5 1 11 5 4
∞ 5 ∞ 3 ∞
1 11 3 2 4
5 4 ∞ 4 10
2 9 4 1 5
1
20 10 15 1 5
,
9 10 5 8 4
4 5 6 3 7
1 8 3 2 4
5 4 7 4 8
10 15 20 5 5 10 11 3 4 9 ,
1 11 3 2 4
2 9 4 1 5
5 4 9 4 8
9 8 5 8 4
,
4 5 6 3 7
20 10 10 10 15 5 1 8 5 4 1 5 8 4 3 7 . 2 4 4 8
15 5 10 3 9
1 8 3 2 4
5 4 9 4 8
2
,
Posleda dobijena matrica A je traena matrica duina najkraih puteva. 6.34. Neka je n broj qvorova u grafu. Grani e zadate teine w(e) moe se pridruiti nova teina w (e) = n w(e) + 1. Ako su p , p dva proizvo na puta, duina redom |p |, |p |, onda iz w(p ) > w(p ) sledi da je 5
0
2
1
w0 (p1 )
1
2
1
2
2
=
n2 w(p1 ) + |p1 | ≥ n2 (w(p2 ) + 1) + |p1 | > n2 (w(p2 ) + 1) + n2 >
>
n2 (w(p2 ) + 1) + |p2 | = w0 (p2 )
(teina puta jednaka je zbiru teina egovih grana). Pored toga, ako je w(p ) = w(p ), onda je w (p ) > w (p ) akko p ima vixe grana od p . Prema tome, dovo no je primeniti obiqan algoritam za nalaee najkraih puteva, ali sa promeenim teinama w . 6.35. Primeniemo indukciju po k, i odrediti ne samo puteve do w, nego i do svih ostalih qvorova. Zbog jednostavnosti, razmatraemo samo duine puteva, a ne i same puteve. Sluqaj k = 1 je jasan. Neka za e ∈ E d(e) oznaqava duinu grane e, i neka je f (w, k) duina najkraeg puta od v do w, pod uslovom da put sadri taqno k grana. Pretpostavimo da 0
1
0
1
2
1
2
2
0
13.6. GRAFOVSKI ALGORITMI
357
znamo duine najkraih puteva do svih qvorova, pod uslovom da se putevi sastoje od po taqno k − 1 grane, tj. da znamo f (w, k − 1) za sve qvorove w. Najpre se za svako w stav a f (w, k) = ∞. Zatim se razmatra svaka grana (x, y) i vrednost f (y, k) zameuje se vrednoxu f (x, k − 1) + d(x, y) ako je maa. Vremenska sloenost algoritma je dakle O(|V ||E|). 6.36. Algoritam Acikl najkr putevi2 (slika 6.18) radi korektno i ako su cene nekih grana negativne. Za svaki qvor se tim algoritmom uporeuju duine svih puteva do ega od v, xto se moe dokazati indukcijom po rednom broju qvora u topoloxkom redosledu. 6.37. Graf mora da bude Ojlerov, jer ciklus poveava za dva stepen svakog qvora kroz koji prolazi. S druge strane, grane Ojlerovog ciklusa uvek se mogu razloiti u skup ciklusa. Dovo no je primetiti da u Ojlerovom grafu postoji bar jedan prosti ciklus, i da se uklaaem tog ciklusa iz grafa dobija jedan ili vixe povezanih Ojlerovih grafova. 6.38. Posmatrajmo graf G = (V, E) sa n qvorova i 2n−2 grane, koji se moe nacrtati kao pravilni (n − 1)-ugao sa dodatnim qvorom v u centru, stranicama{granama e , e , . . . , e , i jox n − 1 granom f , f , ..., f , koje povezuju v sa temenima (n − 1)-ugla. Za proizvo an neprazni podskup S skupa {e , e , . . . , e } postoji ciklus u G koji od grana e , e , . . . , e sadri taqno grane iz S (dobija se objediavaem ciklusa koje qini v sa putevima formiranim od uzastopnih grana iz S); poxto podskupova ima 2 − 1 (xto je vee od 2 za n > 2), znaqi da i ciklusa ima vixe od 2 , odnosno 2 . 6.39. Rexee se moe konstruisati indukcijom po broju qvorova. Baza je jednostavna. Neka je v bilo koji list u stablu. Voleli bismo da uklonimo v, reximo problem za ostatak stabla, i odredimo S(v) tako da budu ispueni uslovi 1), 2). Ako je grana susedna qvoru v usmerena ka v, redukcija je jednostavna: neka je u pitau grana (w, v); tada se moe staviti S(v) = S(w) ∪ {λ(w, v)}, pa se lako proverava da su uslovi ispueni. Tei je sluqaj ako je grana (v, w). Tada stav amo S(v) = S(w), a svim ostalim skupovima dodajemo broj λ(v, w), i uslovi su takoe ispueni. 6.40. Zamislimo da su qvorovi u jezgru obojeni crno, a ostali belo. Zbog definicije jezgra, ne postoji grana koja vodi iz crnog u crni qvor, a u svaki beli qvor vodi bar jedna grana iz nekog crnog qvora. Qvorovi sa ulaznim stepenom 0 moraju biti u jezgru (odnosno obojeni crno) | oni ne mogu biti van jezgra, jer u ih ne vodi ni jedna grana. Qvorovi do kojih vode grane iz crno obojenih qvorova moraju se obojiti u belo (oni ne mogu biti u jezgru). Sada se mogu ukloniti belo obojeni qvorovi, zajedno sa granama koje vode u ili iz ih, jer to ne utiqe na bojee preostalih qvorova grafa (u qvor jezgra moe da vodi grana iz nekog qvora van jezgra; isto vai i za qvor van jezgra). Sa bojeem se nastav a rekurzivno: poxto je preostali graf u opxtem sluqaju xuma, postoji bar jedan qvor ulaznog stepena 0. 6.41. Neka je v ∈ V proizvo an fiksirani qvor; stavimo p(v) = 0. Po pretpostavci, do svakog drugog qvora w ∈ V postoji put v = v , v , v , . . . , v = w; za i = 1, 2, . . . , k stav amo 1
1
2
2
n−1
n−1
1
2
n−1
1
n−1
0.5n
2
n−1
n/2
Ω(n)
0
1
2
p(vi ) = p(vi−1 ) + f (vi−1 , vi ) =
k
i X
f (vj−1 , vj ).
j=1
Na taj naqin definisana je (bar jednom) vrednost p(w) za svako w ∈ V . Ta definicija je neprotivreqna. Zaista, ako postoji i neki drugi put v = v , w , w , . . . , w = w od v do w, onda je v = v ,v ,v ,...,v = w = w ,w ,...,w ,w = v ciklus, pa je po uslovu zadatka za funkciju f 0
0
1
2
k X
odnosno
k
f (vj−1 , vj )+
j=1 k X j=1
l
f (vj−1 , vj ) =
l X
l−1
1
1
2
0
f (vj , vj−1 ) = 0,
j=1 l X j=1
f (vj−1 , vj ) = p(w).
l
358
13. UPUTSTVA I REXE A ZADATAKA
6.42. Neka je dat graf G = (V, E) Najpre se skup grana E sortira po rastuim teinama, xto zahteva O(|E| log|V |) operacija. Koristi se struktura podataka za formirae unija (ode ak 3.7); polazi se od |V | jednoqlanih podskupova | qvorova G, zaqetka povezujueg stabla G. Grane se uzimaju jedna po jedna iz ureenog niza. Za izabranu granu proverava se u O(log|V |) koraka da li eni krajevi pripadaju razliqitim skupovima (razliqitim stablima povezujue xume); ako ne | grana se preskaqe, a u protivnom se formira unija dva podskupa i grana dodaje u skup izabranih grana (O(1) koraka). Posle dodavaa svake grane broj stabala u povezujuoj xumi se smauje za 1; na kraju se dobija MCST. Zaista, pretpostavimo da dobijeno stablo nije MCST, i da je e, k-ta grana u gorem nizu izabranih grana, prva koja ne pripada MCST. Tada bi dodavaem e u MCST nastao ciklus; ako sa T , T oznaqimo dva stabla koja je grana e povezala, spomenuti ciklus mora da sadri bar jox jednu granu e koja spaja neka dva stabla povezujue xume koja postoji u trenutku pre dodavaa e. Po pretpostavci cena e vea je od cene e. Izbacujui e iz MCST i dodajui e, dobijamo povezujue stablo mae cene, suprotno pretpostavci. 6.43. Treba krenuti od F kao tekueg "minimalnog" povezujueg stabla i dodavati mu grane prema algoritmu iz zadatka 6.42. 6.44. Neka je T neko MCST u G koje sadri granu e = (v, w) najvee teine u nekom ciklusu C . Uklaaem grane e stablo T se raspada na dva stabla T i T , tako da je npr. v u T , a w u T . Posmatrajmo put P od v do w, koji se dobija uklaaem e iz C . Na tom putu postoji grana e qiji je jedan kraj u T , a drugi kraj u T | koja dakle povezuje T i T , a teina joj je jednaka teini e (ako bi teina e bila maa od teine e, onda bi povezujue stablo (T \ {e}) ∪ {e } imalo mau cenu od T ). Prema tome, stablo (T \ {e}) ∪ {e } je takoe MCST, a ne sadri granu e. 6.45. Najpre treba odrediti MCST T grafa G; za sve grane stabla T odgovor je oqigledno T . Za svaki par qvorova u, v treba odrediti granu sa najmaom cenom na (jedinstvenom) putu od u do v u T ; ovo je predobrada. Ova informacija nije neophodna za svaki par qvorova, ali je jednostavnije izraqunati je za svaki par. Za proizvo nu granu (x, y) MCST T (x, y) dobija se dodavaem grane (x, y) stablu T , i uklaaem grane najvee cene u jedinstvenom ciklusu koji je time formiran (ili druge najvee, ako je cena grane (x, y) najvea). Ta grana je grana najvee cene na putu od x do y kroz T , koja se zna posle predobrade. Predobrada se moe izvesti pokretaem pretrage u dubinu na stablu T za svaki od egovih |V | qvorova. 6.46. Poveae cena svih grana za istu konstantu ne mea MCST, jer je bitan samo relativan odnos cena, a on se ne mea posle poveavaa svih cena za isti iznos. 6.47. Osnovna ideja je rexavati problem unazad. Umesto da se qvorovi uklaaju zadatim redosledom, oni se dodaju obrnutim redosledom. Pri tome se koristi struktura podataka za formirae unija (videti ode ak 3.7), da bi se znao tekui skup komponenti povezanosti grafa. Zapoqiemo sa qvorom n i dodajemo ga kao jednu komponentu u strukturi podataka. Zatim razmatramo qvorove n − 1, n − 2, itd. Za svaki qvor i, najpre ga dodajemo kao komponentu, pa onda proveravamo sve grane (i, j) takve da je j > i. Za svaku granu (i, j) proveravamo da li grane i, j pripadaju istoj komponenti (koristi se operacija pronalaea skupa kome pripada elemenat), a ako ne, onda objediujemo odgovarajue komponente (operacija formiraa unije). Zaustav amo se onog trenutka kad neka komponenta sadri vixe od n/2 qvorova. 6.48. Poxto svaki ciklus u G mora da sadri jednu granu iz skupa povratnih grana F , skup grana E \ F ne moe da sadri ni jedan ciklus. Minimizacija veliqine skupa F ekvivalentna je maksimizaciji veliqine E \ F . Maksimalni skup grana bez ciklusa u grafu odgovara povezujuem stablu (ili povezujuoj xumi kod nepovezanog grafa). Prema tome, minimalni skup povratnih grana u neusmerenom grafu je komplement bilo kog povezujueg stabla grafa, a egova veliqina je |E| − |V | + 1 (pod pretpostavkom da je graf povezan). 6.49. Pretpostavka da nema ciklusa negativne teine koristi se u dokazu ispravnosti algoritma za nalaee svih najkraih puteva sa slike 6.25. Pri prelasku sa najkraih (m−1)-puteva na najkrae m-puteve izmeu proizvo na dva qvora u, v uporeuje se najkrai (m − 1)-put od u do v sa zbirom najkraih (m − 1)-puteva od u do m i od m do v ; maa od 1
2
0
0
0
1
1
2
0
1
0
0
2
2
1
0
2
13.6. GRAFOVSKI ALGORITMI
359
te dve vrednosti je duina najkraeg m-puta u do v. Pri tome se koristi pretpostavka da se na najkraem m-putu od u do v qvor m moe nai samo jednom | prolazak kroz taj qvor dva puta dodaje putu od u do v ciklus | za koji se pretpostav a da ima nenegativni zbir teina grana (u protivnom bi svaki prolazak te pet e smaivao duinu puta od u do v!). 6.50. Treba proveriti sve grane van stabla. Neka za proizvo ni qvor x x.SP oznaqava duinu puta od v do x kroz stablo. Ako postoji grana (u, w) takva da je u.SP +duˇzina(u, w) < w.SP , onda T oqigledno nije stablo najkraih puteva. Ostaje samo da se dokae da ako takva grana ne postoji, onda T jeste stablo najkraih puteva. 6.51. Dovo no je upotrebiti algoritam sa slike 6.25, korigovan tako da prekine rad kad se naie na negativni dijagonalni elemenat matrice. 6.52. Treba odrediti topoloxki redosled qvorova grafa i proveriti da li su uzastopni qvorovi u tom redosledu povezani (qine put). Ako jesu, onda topoloxki redosled daje Hamiltonov put. S druge strane, ako postoji Hamiltonov put, onda topoloxko sortirae mora da dovede upravo do onog redosleda qvorova kojim se oni niu u putu. 6.53. Za graf G = (V, E), V = {1, 2, 3, 4}, E = {(2, 3), (3, 1), (1, 4)} promeeni algoritam daje na izlazu graf sa skupom grana bez grane (2, 4), koja pripada tranzitivnom zatvoreu grafa G. 6.54. (a) Pretpostavimo da v pripada bazi qvorova B. Ako v ne pripada ni jednom ciklusu i ulazni stepen mu je vei od nule, onda postoji qvor w takav da je (w, v) grana i w nije dostian iz v. Da bi skup B bio baza qvorova, moralo bi da bude w ∈ B ili da postoji put od nekog qvora iz B do w. U oba sluqaja, meutim, postoji takoe i put od nekog qvora u B do v, pa se v moe ukloniti iz B, xto je u kontradikciji sa minimalnoxu skupa B. (b) Poxto u acikliqkom grafu ni jedan qvor ne pripada ciklusu, iz (a) sledi da samo qvorovi ulaznog stepena 0 mogu biti u bazi qvorova. Isto tako zak uqujemo da svaki qvor ulaznog stepena 0 mora biti u svakoj bazi qvorova, jer do ega ne vodi ni jedan put. Prema tome, jedinstvena baza qvorova acikliqkog grafa je skup qvorova sa ulaznim stepenom 0 (u ode ku 6.4 dokazano je da je taj skup neprazan). 6.55. Posmatrajmo dato stablo kao korensko stablo sa proizvo nim qvorom u ulozi korena. Uzimamo proizvo an list v i uparujemo ga sa svojim ocem w; zatim uklaamo oba qvora iz stabla (zajedno sa ostalim sinovima w, koji ostaju neupareni). Preostali problem se po induktivnoj hipotezi moe rexiti. Potrebno je dokazati da grana (v, w) zaista pripada nekom optimalnom uparivau. Neka je M optimalno uparivae. Ako M ne sadri granu (v, w), onda qvor v nije uparen (jer je povezan jedino sa w). Ako je grana (u, w) u optimalnom uparivau, onda se ona moe zameniti sa (v, w); tako se dobija optimalno uparivae (ono sadri isti broj grana kao i M ) koje sadri granu (v, w). 6.56. Moe se poi od uparivaa M = {(a, 1), (b, 2), (c, 3), (e, 4), (f, 5), (g, 6)}. Da bismo pronaxli eventualne alternirajue puteve u G u odnosu na M , usmeravamo grane G, i to one koje su u uparivau | udesno, a ostale | ulevo. U dobijenom usmerenom grafu traimo obiqan put od neuparenog qvora 7 do neuparenog qvora d. Takav put meutim ne postoji: od 7 se moe doi samo dao c, i da e samo do 3. Prema tome, M je optimalno uparivae. Ako bismo poxli od polaznog uparivaa M = {(a, 5), (b, 2), (c, 3), (e, 4), (g, 6)}, onda bi se iskorixavaem alternirajueg puta f, 5, a doxlo do istog optimalnog uparivaa M . 6.57. Moe se poi od toka sa slike 10(a). Rezidualni graf u odnosu na taj tok prikazan je na slici 10(b). U emu se mogu izdvojiti dva nezavisna (disjunktna) uveavajua puta: s, a, d, t kapaciteta min{4, 5, 4} = 4 i s, c, f, t kapaciteta min{6, 7, 3} = 3. Uzimajui ovo u obzir, dobijamo tok sa slike 10(c). Ovaj tok je oqigledno optimalan, jer su tokovi kroz grane od b, d i f ka t (koje qine presek odreen skupom V \ {t}) jednaki ihovim kapacitetima. 6.58. (a) Graf koji se moe pokriti zvezdama ne sme da sadri qvor stepena 0 (izolovani qvor). Posle uklaaa proizvo nog qvora moe se dogoditi da neka komponenta povezanosti bude izolovani qvor. (b) Pretpostavimo sada da graf nema izolovanih qvorova, i pokuxajmo da obezbedimo da i posle uklaaa qvora v ne bude izolovanih qvorova. Probleme mogu da prouzrokuju samo qvorovi stepena 1. Zbog toga, ako graf sadri neki qvor v stepena 1, onda v uklaamo 0
0
0
1
0
360
13. UPUTSTVA I REXE A ZADATAKA a
c
3/7 s
(a)
µ
c 3/9-cc 2/8
Rc e
3/5
a
-bc 3/3
0/5
4
j -dc 3/7 ~ -c t > 0/7
3/3
2/2
3
f
c
7/7
µ
c 6/9-cc
s
(c)
2/8
6
(b)
a
Rc e
3 c
6 c¼ i - c¾
s
2/5
j -c
µ
3/5
cy
2 5
e
-c t >
3
7 2
3
jdc 4 y
3
2
R c¾
-bc } 3
j c)
3
2
f
-bc 3/3
4/5
j -dc 7/7 ~ -c t > 3/7
3/3
2/2
j -c
5/5
f
Ris. 10. Uz zadatak 6.57. zajedno sa granom, i zvezdu sa korenom u v prik uqujemo pokrivaqu. Na ovaj naqin se samo jednom qvoru stepen smauje za 1; poxto je graf povezan, stepen tog qvora morao je biti bar 2, pa je ova redukcija ispravna | ne dovodi do pojave izolovanih qvorova. 6.59. Moe se iskoristiti kombinacija binarne pretrage i algoritma za nalaee optimalnog uparivaa iz ode ka 6.9. Pozabavimo se najpre proverom da li, za zadato x, postoji optimalno uparivae takvo da su teine svih egovih grana ≤ x. Ovaj problem moe se rexiti uklaaem iz grafa svih grana qije su teine vee od x, i primenom algoritma za nalaee optimalnog uparivaa, da bi se proverilo da li optimalno uparivae u smaenom grafu ima isti broj grana kao i optimalno uparivae u polaznom grafu. Sloenost ove provere odreena je sloenoxu algoritma za nalaee optimalnog uparivaa, koja je O(m√n). U G ima m grana, pa i razliqitih teina ima najvixe m. Binarnom pretragom traimo najmae x, takvo da je x teina neke grane, i da postoji optimalno uparivae u kome sve grane imaju teinu ≤ x. 6.60. Poxto se trai algoritam sloenosti O(n log n), prirodno je pokuxati sa dekompozicijom. Igraqi se dele u dve jednake grupe, pa se za obe grupe rekurzivno konstruixu traeni redosledi. Zatim se dva redosleda objediuju na isti naqin kao kod obiqnog objediavaa dva sortirana niza u jedan. Da se ovo shvati, dovo no je uveriti se da se proizvo ni igraq moe uk uqiti u proizvo an redosled (lanac) igraqa tako da se dobije dui lanac: mesto egovog uk uqivaa je iza posledeg igraqa u nizu od koga je izgubio, odnosno ispred prvog igraqa, ako ga je pobedio. 6.61. Jasno je da je za bojee ovakvog grafa neophodno bar k boja, jer se grane susedne istom qvoru moraju obojiti razliqitim bojama; pokazaemo da je k boja dovo no. Ci je iskoristiti dekompoziciju, tako da potproblemi budu istog tipa kao i polazni problem. Ako se graf podeli na dva maa podgrafa, mora se obezbediti da stepeni qvorova u oba podgrafa budu meusobno jednaki i da budu neki stepen dvojke. Ovo se moe postii konstrukcijom Ojlerovog ciklusa grafa (on postoji jer su stepeni svih qvorova parni). Zatim se prolazi ciklus, a egove grane prik uquju naizmeniqno prvoj, odnosno drugoj grupi. Svaka grupa definixe podgraf sa nepromeenim skupom qvorova i polovinom polaznih grana, pri qemu je stepen svakog qvora k/2 (jer kad god granu koja ulazi u qvor svrstamo u jednu grupu, sledeu granu, koja izlazi iz istog qvora, stav amo u drugu grupu). Podskupovi se po induktivnoj hipotezi mogu obojiti sa k/2 boja; ako se upotrebi k razliqitih
13.6. GRAFOVSKI ALGORITMI
361
boja, onda se dva bojea direktno objediuju. Time je specificiran rekurzivni algoritam za rexavae ovog problema; za k = 2 imamo graf koji se sastoji od jednog prostog ciklusa, i oqigledno se moe obojiti sa dve boje. Sloenost algoritma odreena je sloenoxu nalaea Ojlerovih ciklusa, koja je linearna; pri tome treba uzeti u obzir da se Ojlerov ciklus mora nai u oba podgrafa. Broj iteracija u ovom algoritmu je log k (k se polovi posle svake iteracije); prema tome, sloenost algoritma je O(|E| log k). 6.62. Dato stablo, ako se fiksira egov proizvo ni qvor, moe se shvatiti kao korensko stablo. Posmatrajmo proizvo ni list v i egovog oca w. Grana (v, w) moe se pokriti qvorom v, ali je bo e pokriti je qvorom w: v pokriva samo (v, w), a w pokriva i neke druge grane. Preciznije, postoji minimalni pokrivaq grana koji sadri qvor w. Prema tome, ako izaberemo qvor w (na opisani naqin), uklonimo ga sa svim emu susednim granama, i indukcijom reximo preostali problem, dolazimo do minimalnog pokrivaqa. Vremenska sloenost algoritma je linearna (proporcionalna broju grana). 6.63. Jasno je da teina pokrivaqa grana mora biti vea ili jednaka od broja grana (jer sve grane moraju biti pokrivene, a svaka od ih poveava cenu pokrivaqa najmae za jedan). Prema tome, pokrivaq koji sadri taqno po jedan kraj svake grane bie minimalni pokrivaq grana. Pokazaemo da takav pokrivaq uvek moe biti pronaen. Prvo rexee. Izvrxi se pretraga u xirinu polazei od proizvo nog qvora v kao korena. Zatim se u pokrivaq grana uk uquju svi qvorovi na (na primer) neparnim nivoima (rastojaima od korena). Dobijeni skup qvorova je pokrivaq grana, jer svaka grana povezuje qvorove sa dva susedna nivoa, pa jedan od ih ima neparni nivo. Pored toga, svaka grana je pokrivena taqno jednim qvorom, pa je pokrivaq minimalan. Drugo rexee. Induktivna hipoteza je da umemo da reximo problem za sva stabla sa < n qvorova. U datom stablu sa n qvorova izaberimo proizvo an list v i uklonimo ga (zajedno sa granom) iz stabla. Neka je w jedinstveni qvor u G susedan sa v, i neka je G preostalo stablo. Za graf G rexavamo problem indukcijom. Posmatrajmo ponovo polazno stablo G. Ako je qvor w korixen u minimalnom pokrivaqu grana za G , onda imamo ispravan pokrivaq za G; u protivnom prik uqujemo v pokrivaqu G. Treba dokazati da je u oba sluqaja pokrivaq G minimalan. Meutim, veliqina minimalnog pokrivaqa grana G mora biti bar za 1 vea od veliqine minimalnog pokrivaqa G , jer se dodata grana mora pokriti ili sa v ili sa w (a cena se poveava za 1 u oba sluqaja, jer se poveava stepen qvora w). Ta granica se dostie, pa dobijeni pokrivaq jeste minimalan. 6.64. Neka je v proizvo an qvor u G. Oznaqimo sa N (v) skup qvorova susednih sa v. Ako v pripada pokrivaqu grana, onda ni jedan qvor iz N (v) ne moe pripadati pokrivaqu (jer pokrivaq treba da bude nezavisan skup). Pored toga, svi qvorovi susedni qvorovima iz N (v) moraju pripadati pokrivaqu, jer samo oni mogu pokriti grane ka qvorovima iz N (v). Specijalno, ako su bilo koja dva qvora iz N (v) susedna, onda se grana izmeu ih ne moe pokriti, pa pokrivaq grana koji sadri v ne postoji, tj. procedura "odustaje". Sa procedurom se nastav a sve do nekog "odustajaa" (tada v ne pripada pokrivaqu grana), ili dok se ne pronae pokrivaq grana. Svi koraci procedure odreeni su izborom qvora v , pa je dobijeni pokrivaq grana jedini koji sadri v i zadovo ava uslove zadatka. Ako dobijeni pokrivaq grana ima mae od k qvorova, problem je rexen; u protivnom v ne pripada pokrivaqu. Meutim, ako ustanovimo da v ne moe da pripada pokrivaqu, onda pokrivaqu moraju pripadati svi egovi susedi, pa se primeuje ista procedura. 6.65. Pretpostavimo da u G postoji takav podskup U ⊂ V . Izmeu qvorova u U ne sme postojati grana (U je nezavisan skup), a svaki qvor u V \ U mora biti povezan sa nekim qvorom iz U (U je maksimalni nezavisni skup). Izmeu qvorova u V \ U ne sme biti grana (U je pokrivaq grana), a svaki qvor iz U mora biti povezan bar jednom granom sa nekim qvorom iz V \ U (U je minimalni pokrivaq grana). Dakle, graf G mora biti bipartitni, i to bez izolovanih qvorova. Obrnuto, ako je G = (U , E, U ) bipartitni graf bez izolovanih qvorova, onda se bilo U , bilo U moe uzeti za traeni skup U . Za proveru da li je G bipartitni graf postoji polinomijalni algoritam (videti zadatak 6.22), a provera da li postoje izolovani qvorovi je jednostavna. 2
0
0
0
0
1
1
2
2
362
13. UPUTSTVA I REXE A ZADATAKA
6.66. Interval I moe se predstaviti sa dva broja (l , d ), svojim levim i desnim krajem. Uredimo intervale po rastuim vrednostima d ; neka je I , I , ..., I tako ureeni niz intervala; d je najmai od desnih krajeva. Tvrdimo da postoji maksimalni nezavisni skup koji sadri I . Da bismo to dokazali, uzmimo proizvo ni maksimalni nezavisni skup i posmatrajmo takav interval I da je d najmai od desnih krajeva u nezavisnom skupu. Poxto je d globalni minimum, bie d ≥ d . Iz toga sledi da se I ne seqe sa bilo kojim drugim intervalom u skupu (sem eventualno sa I ; ako se neki interval I seqe sa I , onda zbog d > d mora biti i l > d ≥ d , pa se I ne seqe ni sa I ). Prema tome, I moe da zameni I , a promeeni skup je i da e maksimalni nezavisan skup. Poxto se sa intervalom I iz skupa isk uqe svi intervali koji se seku sa im (odnosno leva granica im je maa od d ), ostaje mai skup intervala, koji se da e obrauje na isti naqin (bez sortiraa desnih granica intervala | ono se izvrxava samo jednom, na poqetku). Sloenost algoritma je O(n log n). 6.67. (a) Za svaki par qvorova u, v ∈ V broji se sa koliko qvorova su oni istovremeno susedni. Onog trenutka kad za neke u, v taj broj dostigne dva, pronaen je kvadrat u G, a ako je taj broj za svaki par u, v mai ili jednak od jedan, u G nema kvadrata. Sloenost algoritma je O(|V | ). (b) Algoritam se zasniva na istoj ideji kao u (a): za svaki par qvorova u, v ∈ V ovog puta se broje zajedniqki elementi lista suseda qvorova u i v. Dakle koristi se lista povezanosti za G, u kojoj se najpre za svaki qvor lista egovih suseda sortira prema rastuim rednim brojevima (O(|E| log|V |) koraka). Brojae zajedniqkih suseda qvorova u i v moe se izvesti za vreme proporcionalno zbiru duina odgovarajuqih lista, odnosno d(u) + d(v), pa je za obradu X svih parova u, v dovo no vreme X X X X j
j
j
1
j
n
2
1
1
j
j
1
1
j
1
j
j
k
1
j
k
j
k
1
k
1
j
1
1
3
(d(u) + d(v)) = 2
d(v) = 4
|E| = 4|E||V | = O(|E||V |).
6.68. Postoje familije grafova u kojima je broj kvadrata asimptotski vei od O(|E||V |). Tako kompletan graf sa n qvorova ima ¡ ¢ = O(n ) kvadrata, a kod ega je |E||V | = O(n ). Za kompletan graf ve samo nabrajae svih kvadrata ima sloenost veu od O(|E||V |). u∈V v∈V
u∈V v∈V
u∈V
n 4
4
3
13.7. Geometrijski algoritmi
7.1. Ako poluprava sadri teme P , treba proveriti da li su temena P , P (P , za k = 1, odnosno P , P za k = n) sa iste strane L: ako jesu, odnosno nisu, presek ne treba, odnosno treba raqunati. Na sliqan naqin rexava se sluqaj kad L sadri stranicu (P , P ): treba proveriti da li su temena P i P sa iste strane L. 7.2. Taqke P , P , . . . , P su kolinearne akko su kolinearne sve trojke taqaka (P , P , P ), i = 3, 4, . . . , n. Sloenost algoritma je O(n). 7.3. Na slici 11 su prikazane qetiri taqke P , P , P , P , i dva razliqita prosta qetvorougla P P P P , P P P P sa temenima u tim taqkama. k
P2
k
n−1
k−1
k+1
k−1
1
1
1
1 2 4 3
n
k+2
n
2
k+1
1
2
3
2
i
4
1 4 2 3
P1
P1
b
P2
b
b
b
b
P4
P4
b P3 P2 b
b P3
Ris. 11. Uz zadatak 7.3.
7.4. Indeksu i ∈ {0, 1, . . . , n − 1} pridruujemo veliqinu ugla α = ∠P AP . Jasno je da je −π < α < π; neka je α = 0. Ako su svi uglovi α istog znaka (odnosno pozitivni, xto se moe pretpostaviti bez smaea opxtosti), onda je AP prava oslonca, a druga prava i
i
n
i
0
0
i
13.7. GEOMETRIJSKI ALGORITMI
363
oslonca AP odreena je temenom P za koje ugao α ima najveu apsolutnu vrednost. Teme P nalazi se binarnom pretragom intervala 1, 2, . . . , n − 1, jer niz |α | najpre raste, pa opada. U dve "srede" taqke i, i + 1 intervala indeksa posmatra se razlika uglova α − α , pa • ako je pozitivna, onda je m ≥ i + 1, • ako je negativna, onda je m ≤ i, • ako je α = α , onda je npr. m = i, ali prava oslonca P P sadri celu stranicu P P . Ako pak nisu svi uglovi α istog znaka, onda postoje dve simetriqne mogunosti: uglovi rastu, opadaju pa rastu, ili opadaju, rastu pa opadaju. U oba sluqaja se binarnom pretragom nalaze dva susedna temena sa uglovima suprotnog znaka. Ta dva temena razdvajaju interval indeksa na dva podintervala, u kojima se na opisani naqin (traei maksimalni ugao po apsolutnoj vrednosti) pronalazi binarnom pretragom po jedna prava oslonca. 7.5. Neka je C centar pomenutog kruga. Polazi se od dui CP (odnosno tri taqke C, P , P ), a onda se nastav a kao u obiqnom Grahamovom algoritmu. Kad se ponovo doe do taqke P (poxto je konveksni put "obuhvatio" sve taqke P , P , . . . , P ), neka je j najvei, a i najmai indeks neke taqke na putu u tom trenutku. Mogue je da bude ∠P P P > π (u protivnom je posle izbacivaa taqke C zavrxen konveksni omotaq). Tada se, sliqno kao u Grahamovom algoritmu, isk uquje taqka C , i neke taqke sa poqetka ili kraja konveksnog puta, sve dok ne postanu konveksni oba ugla u temenima grane koja povezuje jedno teme pri kraju sa jednim temenom sa poqetka puta. 7.6. U primeru na slici 12 taqke P , P ,..., P , lee redom na dui P P . Grahamov algoritam e izbaciti uzastopce p taqaka P , P ,..., P . m
m
m
m
i
i+1
i+1
i
0 m
i
m m+1
i
1
1
2
1
1
n
2
1 i
j
3
4
p+3
p+3
3 p+3
p+2
P3 P4 Pp+2 Pp+4
c
c
c
c
c
c
4
c
c P2
Pp+3
c P1
Ris. 12. Uz zadatak 7.6.
7.7. Dovo no je konstruisati takav raspored n taqaka u ravni da u svakom rekurzivnom pozivu broj taqaka u sredim trakama bude proporcionalan sa ukupnim brojem obraivanih taqaka. Takav raspored se moe rekurzivno konstruisati ako se poe od n = 4 · 3 taqaka, pode enih na dva jednaka podskupa vertikalnom simetralom, pravom x = 0. Desni podskup sastoji se od dva podskupa od po 3 taqaka na dve vertikalne prave (leva od ih je x = 1), na vertikalnim razmacima po 1, i 4 · 3 taqaka izmeu vertikalnih pravih, qiji se raspored konstruixe rekurzivno. Prema tome, broj taqaka u sredoj traci je 2 · 3 = n/6 (ovaj odnos vai za svaki nivo rekurzije), pa je sloenost T (n) rexee diferencne jednaqine T (n) = 2T (n/2) + cn, odnosno T (n) = Ω(n log n). Zahtev da x-koordinate taqaka budu razliqite lako je ostvariti pomerajui vrlo malo u horizontalnom pravcu taqke sa istom x-koordinatom (ravnomerno, uvek za isti iznos, proporcionalno rastu y-koordinate). 7.8. Dui (a , y )−(b , y ) mogu se sortirati leksikografski po parovima (y , a ) (dakle po y-koordinatama, a u okviru grupe sa istim y-koordinatama, u okviru kojih su jedino k
k−1
k−1
k−1
i
i
i
i
i
i
364
13. UPUTSTVA I REXE A ZADATAKA
mogui preseci, po x-koordinatama levog kraja dui). Prilikom prolaska grupe (dui sa istom y-koordinatom), pamte se u povezanoj listi kandidati | dui qiji je levi kraj levo, a desni kraj desno od pokretne vertikalne prave; u posebnom vektoru se za svaku du pamti lokacija levog kraja u sortiranom vektoru. Ako je pokretna prava naixla na levi kraj dui, onda se registruju preseci te dui sa svim kandidatima, i du se ubacuje u listu kandidata. Ako se naie na desni kraj dui, ta du se (po nalaeu pozicije u listi) izbacuje sa liste kandidata. Obrada grupe od k dui sa istom y-koordinatom traje O(k), pa je sloenost ukupne obrade posle sortiraa O(n). 7.9. Neka je y = ak + b jednaqina prave p. Prava q paralelna sa p ima jednaqinu y = ak +b . Rastojae taqke (x , y ) od svoje "projekcije" (u vertikalnom smeru) (x , ax +b ) na pravu q u pravcu y-ose jednako je y − ax − b (ono je pozitivno, odnosno negativno, ako je taqka iznad, odnosno ispod prave q), 1 ≤ k ≤ n. Potrebno je izabrati b tako da polovina brojeva y − ax − b bude vea ili jednaka od nule, odnosno tako da polovina brojeva y − ax bude vea ili jednaka od b . Problem se dakle svodi na nalaee medijane brojeva y − ax , 1 ≤ k ≤ n. 7.10. Treba sortirati temena mnogougla p , p , . . . , p cikliqki prema uglovima koji qine dui q − p sa nekom fiksiranom pravom. Tim redosledom (npr. p , p , . . . , p ) treba proi temena. Zapoqie se sa temenom p : prebroje se ivice koje se seku sa polupravom q − p −, za xta je dovo no O(n) provera ivica mnogougla. Pri prelasku sa temena p na teme p dovo no je uporediti broj preseka polupravih q − p − i q − p − sa stranicama mnogougla susednim sa temenima p , p , da bi se videlo za koliko se broj preseka promenio u odnosu na prethodni poloaj poluprave (O(1) provera). Usput se pamti teme p za koje je najmai broj preseka poluprave q − p− sa ivicama mnogougla. Sloenost algoritma je O(n log n). 7.11. Rexee se zasniva na primeni binarne pretrage. Osnovna operacija je provera, ako je data prava p i taqke A i B, da li su A i B sa iste strane p. Sledea elementarna operacija (koja se lako izvodi pomou nekoliko operacija prvog tipa), je provera za qetiri zadate taqke A, B, C i Q, da li se Q nalazi unutar ugla ∠ABC , odnosno unutar trougla 4ABC . Ideja na kojoj se zasniva rexee je sledea: ako znamo da se Q nalazi unutar ugla ∠P P P , i < j , onda se posle provere da li se Q i P nalaze sa iste strane prave P P , m = b(i + j)/2c, zna da li je Q unutar ugla ∠P P P (ako je odgovor "da", ili ako je Q na pravoj P P ), ili unutar ugla ∠P P P (u protivnom). Na poqetku se proverava da li je Q unutar ugla ∠P P P (ako nije, onda Q ne pripada mnogouglu). Posle najvixe O(log n) koraka zak uquje se ili da Q ne pripada mnogouglu, ili da je unutar nekog ugla ∠P P P ; u drugom sluqaju je Q u mnogouglu akko pripada trouglu 4P P P . 7.12. Prva taqka moe se uzeti za poqetak polarnog koordinatnog sistema; za temena tekueg konveksnog omotaqa pamte se duine potega i uglovi koje oni zaklapaju sa x-osom, sortirano po uglovima. Za novododatu taqku se binarnom pretragom mogu pronai dva uzastopna ugla{potega izmeu kojih lei en poteg, i proveriti da li ona pripada konveksnom omotaqu; ako ne, onda treba pronai dve prave oslonca kroz tu taqku (O(log n) operacija, videti zadatak 7.4), isk uqiti temena koja su unutar novog konveksnog omotaqa, i uk uqiti novo teme (O(log n) operacija). Sloenost algoritma je dakle O(n log n). 7.13. Pomou algoritma iz zadatka 7.9 pronalazi se prava koja dati skup taqaka deli na dva podskupa, tako da se brojevi taqaka u podskupovima razlikuju najvixe za jedan. Lako se moe postii da na deobnoj pravoj ne lei ni jedna taqka iz skupa. Algoritam koji konstruixemo koristimo rekurzivno za dobijae konveksnih omotaqa P i P ova dva podskupa (oni imaju mae od n taqaka); crnom kutijom se konveksni omotaqi P i P objediuju u konveksni omotaq svih n taqaka. Sloenost algoritma T (n) (po pretpostavci o crnoj kutiji) zadovo ava diferencnu jednaqinu T (n) = 2T (n/2) + cn, pa je T (n) = O(n log n). 7.14. Ravan se moe izdeliti u vertikalne trake xirine d, poqevxi od taqke p sa minimalnom x-koordinatom, do taqke q sa maksimalnom x-koordinatom; broj traka je O(X/d). Date taqke se razvrstavaju po trakama; da se za jednu taqku ustanovi kojoj traci pripada 0
k
k
k
k
k
0
k
k
0
0
k
0
k
0
k
k
1
k
n
2
i
i1
i2
in
i1
i1
ik
ik+1
ik
ik
ik+1
ik+1
i 1 j
1 m
j
m 1 j
1 m
i 1 m
2 1 n
i 1 i+1
i 1 i+1
1
2
1
2
13.7. GEOMETRIJSKI ALGORITMI
365
dovo no je O(1) operacija. Za svaku traku pronalaze se taqke sa sa minimalnom i maksimalnom y-koordinatom. Sliqno kao u Grahamovom algoritmu povezuju se redom sve "gore" i sve "doe" taqke (iz omotaqa se izbacuju one koje sa dva suseda qine ugao vei od π; O(n) koraka). Tako se dobijaju dva konveksna puta, "gori" i "doi", koji povezuju taqke p i q (ako je npr. doi put ceo iznad dui p − q, on se izbacuje i zameuje se dui p − q). Ova dva konveksna puta zajedno qine d-priblini omotaq skupa P , xto se lako dokazuje. 7.15. (a) Taqke skupa sortiraju se po x-koordinatama. Taqka (x , y ) sa najveom xkoordinatom je oqigledno maksimalna. Ostale taqke kojima je y-koordinata maa od y nisu maksimalne, jer nad ima dominira taqka (x , y ). Dakle, taqke se razmatraju redom prema opadajuim x-koordinatama i eliminixu do nailaska na prvu taqku (x , y ) za koju je y > y | koja je maksimalna. Postupak se nastav a da e na isti naqin, eliminixui taqke sa y-koordinatama maim od y-koordinate poslede pronaene maksimalne taqke. Deo algoritma posle sortiraa ima sloenost O(n). (b) Sliqno kao u (a) taqke se sortiraju po opadajuim x-koordinatama; za obraene taqke quvaju se sortirano projekcije pronaenih maksimalnih taqaka u ravan yOz. Nova taqka se eliminixe ako nad enom projekcijom dominira neka projekcija (provera se vrxi binarnom pretragom); u protivnom, nova taqka eliminixe neke od projekcija posle umetaa svoje projekcije. 7.16. Najpre se taqke sortiraju prema rastuim x-koordinatama. Za taqku sa najmaom x-koordinatom je broj taqaka "ispod e" (taqaka nad kojima ona dominira) nula. Dolazei do naredne taqke, umeemo je u uravnoteeno binarno stablo pretrage sa k uqevima jednakim y-koordinatama taqaka. Poxto nova taqka ima veu x-koordinatu od svih prethodnih taqaka, ona dominira nad svim taqkama u stablu kojima je y-koordinata maa od ene. Umetae taqke u stablo je sloenosti O(log n), pa je ukupan broj operacija O(n log n). Da bi se lako raqunao broj taqaka ispod novododate taqke, uz svaki qvor v u stablu quva se informacija v.B o broju qvorova u egovom levom podstablu. Pri umetau novog qvora u stablo, najpre stav amo s := 0, a onda u svakom qvoru w kroz koji proemo, ako se ide ulevo inkrementiramo vrednost w.B, a ako se ide udesno, sumu s poveavamo za w.B + 1. Na taj naqin, kad pronaemo mesto za umetae novog elementa, izraqunat je broj s taqaka ispod ega. Prilikom uravnoteavaa stabla rotacijom ili dvostrukom rotacijom, meaju se vrednosti po a B za vreme O(1), xto se neposredno proverava. 7.17. Taqke se najpre sortiraju po svojim x-koordinatama. Zatim se meu nagibima dui koje povezuju uzastopne taqke pronalazi najvei, i to je rexee problema. Korektnost algoritma posledica je qienice da ako izmeu taqaka A i A u sortiranom redosledu postoje jox neke taqke A , A ,..., A , onda postoje takve dve uzastopne taqke A i A da je nagib dui A A vei ili jednak od nagiba dui A A . Ovo tvree moe se dokazati indukcijom po k ≥ 1. Bazni sluqaj k = 1 je trivijalan. Neka je tvree taqno za neko k. Posmatrajmo proizvo nih uzastopnih k + 2 taqaka A , A ,..., A , A . Ako je taqka A iznad dui A A , ili lei na oj, onda je nagib dui A A vei ili jednak od nagiba A A ; u protivnom, nagib A A je vei od nagiba A A , pa po induktivnoj hipotezi izmeu A i A postoje dve uzastopne taqke A , A takve da je nagib A A vei ili jednak od nagiba A A , a time i vei od nagiba A A . 7.18. U svakoj listi trai se najmai moduo razlike uzastopnih qlanova. Kad se za parove susednih lista trai najblii par taqaka, dovo no je raqunati rastojae svake taqke iz jedne liste od samo dve taqke (jedne ispod, jedne iznad) iz susedne liste; parovi taqaka za koje se trai rastojae dobijaju se objediavaem (koje ima linearnu sloenost) dveju susednih lista prema y-koordinatama. Ukupan broj parova taqaka za koje se trai rastojae (ili kvadrat rastojaa, da bi se izbeglo raqunae kvadratnog korena) je dakle O(n). Algoritam ne garantuje nalaee para taqaka na najmaem rastojau, jer dve najblie taqke ne moraju pripadati susednim listama ili jednoj listi (npr. taqke (0, 5), (1, 0) i (2, 5): algoritam ne bi naxao par (0, 5) − (2, 5) na rastojau 2). 7.19. Jedini teak sluqaj je nalaee preseka svih vertikalnih dui sa duima pod nagibom π/4 (svi ostali sluqajevi svode se na ovaj, ili se rexavaju algoritmom iz 1
1
1
1
1
2
2
0
1
i
2
i
0
i+1
1
1
0
k+1
i
1
k
0
k+1
k+1
i+1
0
i+1
k
k+1
k+1
1
k
k−1
0
0
0
2
1
k+1
1
k+1
1
k+1
i
i+1
366
13. UPUTSTVA I REXE A ZADATAKA
ode ka 7.6). Koristi se isti pristup kao u algoritmu P reseci iz ode ka 7.6. Sortiraju se -koordinate svih krajeva dui. Algoritam sa pokretnom vertikalnom pravom primeuje se na isti naqin. Du pod nagibom π/4 ubacuje se u spisak kandidata kad pokretna prava doe do enog levog kraja, i uklaa se iz ega kad pokretna prava doe do enog desnog kraja. Potrebno je jox odrediti preseke izmeu nove vertikalne dui i nekoliko kandidata, dui pod nagibom π/4. To se moe obaviti na sledei naqin. Za svaku kosu du raquna se x-koordinata preseka ene prave sa x-osom. Ove vrednosti koriste se pri pretrazi jednodimenzionalnog opsega, qiji su krajevi x-koordinate preseka sa x-osom pravih pod uglom π/4 (u odnosu na x-osu) kroz krajeve vertikalne dui. Sloenost kompletnog algoritma zbog toga ostaje nepromeena. 7.20. Zadatak se moe rexiti sliqno kao u specijalnom sluqaju kad su dui horizontalne ili vertikalne, metodom pokretne prave. Zbog jednostavnosti se moe pretpostaviti da meu duima nema paralelnih, niti delimiqno preklop enih, niti vertikalnih dui. Najpre se sortiraju svi krajevi dui prema x-koordinatama. U sortiranom redosledu se za svaku taqku pored enih koordinata pamti i redni broj dui kojoj ona pripada, i da li je ona levi ili desni kraj te dui. Time se obezbeuje poznavae redosleda kojim pokretna prava nailazi na krajeve dui. Za dui v , v , ..., v koje pokretna prava L seqe u nekom trenutku ("kandidate") pretpostav a se da y-koordinate ihovih preseka sa L qine rastui niz, kao i da su x-koordinate preseka pravih | nosaqa parova susednih dui redom v , v ; v , v ;...; v , v smextene u poseban hip H . Na vrhu hipa nalazi se x-koordinata prvog sledeeg preseka neka dva susedna kandidata. U trenutku kad prava L naie na novi kraj dui sa x-koordinatom x , onda se najpre proverava da li je najmai elemenat H mai od x (ako jeste, onda je pokretna prava u meuvremenu prexla preko preseka neka dva susedna kandidata, i problem je rexen). Da e, ako je u pitau • levi kraj dui v | novi kandidat: pronalazi se binarnom pretragom mesto y koordinate levog kraja v u sortiranom redosledu (prema y-koordinatama preseka sa L | taj redosled se nije promenio ako se neke dve susedne dui nisu presekle do dolaska L na x ) y-koordinata preseka kandidata sa L; du se umee u sortirani redosled kandidata (za tu svrhu moe se koristiti AVL stablo) izmeu neke dve dui v , v ; x-koordinata preseka nosaqa v , v izbacuje se iz H , a u H se ubacuju x-koordinate preseka nosaqa v , v , odnosno v , v (uz odgovarajue preureee hipa H ). • desni kraj dui v : iz H se izbacuju x-koordinate preseka nosaqa v ,v , odnosno v , v , pa se u H ubacuje x-koordinata preseka nosaqa v , v ; pri tome se v izbacuje iz AVL stabla sa kandidatima. Popravke AVL stabla i hipa H su sloenosti O(log n) u najgorem sluqaju, ukupan broj obraenih krajeva dui je 2n, pa je sloenost algoritma O(n log n). 7.21. Najpre se sortiraju svi krajevi dui, pri qemu se za svaku taqku pamti podatak da li je levi ili desni kraj, crvene ili plave dui. Vrednosti brojaqa p i c postave se na nulu. Krajevi dui se prolaze sleva udesno ovim sortiranim redosledom, i pri nailasku na svaku novu taqku, ako je to • poqetak plave (crvene) dui, inkrementira se broj p (c) "otvorenih" plavih (crvenih) dui, • kraj plave (crvene) dui, dekrementira se broj p (c) "otvorenih" plavih (crvenih) dui. Proverava se da li je istovremeno p > 0 i c > 0; ako jeste, pronaen je presek plave i crvene dui. Ako se u toku pregleda krajeva dui ne dogodi istovremeno p > 0 i c > 0, onda ne postoji presek neke plave i neke crvene dui. 7.22. Najpre se intervali sortiraju prema rastuim x-koordinatama svojih levih krajeva. Problem se moe rexiti pomou sledee induktivne hipoteze: u skupu sa < n intervala umemo da oznaqimo sve intervale sadrane u drugim intervalima, i da odredimo najvei desni kraj tih intervala. Ako je x-koordinata desnog kraja n-tog intervala vea x
i1
i2
ik
i1
i2
i3
ik−1
i2
ik
i
i
p
p
i
im
im
im+1
im
im
im
im+1
im
ip
im+1
ip
im+1
im−1
im−1
im
im+1
13.7. GEOMETRIJSKI ALGORITMI
367
od do tog trenutka najvee x-koordinate desnog kraja nekog intervala, onda n-ti interval nije sadran u nekom drugom intervalu; egov desni kraj preuzima ulogu najveeg desnog kraja. U protivnom je on deo nekog drugog intervala, pa se oznaqava. Posledi interval ima najveu x-koordinatu levog kraja, pa ne sadri ni jedan drugi interval. Sloenost algoritma je O(n log n), zbog poqetnog sortiraa. 7.23. Sortiraju se DL (doi levi) i GD (gori desni) uglovi datih pravougaonika prema x-koordinatama. Koristi se sledea struktura podataka S: za svaki DL ugao pamti se niz GD uglova koji dominiraju nad im (videti zadatak 7.15), i to sortirano, npr. u AVL stablu. Kad se naie na novi DL ugao, proverava se da li je egov GD ugao ispod nekog drugog u S; ako jeste, oznaqi se, a ako nije, onda se ubacuje u S, pri qemu se neke taqke izbacuju iz S (koristi se binarna pretraga, a ukupan broj izbacivaa u toku izvrxea celog algoritma mai je od n). Kad se naie na GD ugao, odgovarajui prvougaonik se izbacuje iz S. Ukupna sloenost je O(n log n + n) = O(n log n). 7.24. Presek dva pravougaonika sa stranicama paralelnim osama pronalazi se za konstantno vreme. Taj presek je ili prazan, ili je neki pravougaonik. Prema tome, problem se moe rexiti za vreme O(n), nalazei preseke jednog po jednog pravougaonika sa presekom svih prethodnih pravougaonika. 7.25. Za svaku krunicu posmatramo vertikalne prave koje je dodiruju. Sve x-koordinate ovih pravih se sortiraju, pa se prave prolaze sleva udesno pokretnom vertikalnom pravom L. Izmeu dva uzastopna poloaja L u traci izmeu ih postoji niz lukova koji povezuju jednu taqku leve sa jednom taqkom desne prave. Svaka krunica{kandidat (ona koja seqe obe prave) daje dva ovakva luka. Zadatak je proveriti da li se neka dva od ovih lukova seku u traci; ako nema preseka, onda se lukovi mogu sortirati prema rastuim ykoordinatama preseka sa levom pravom. Dakle, za svakog kandidata treba quvati dva luka (oni su zadati centrom, polupreqnikom i podatkom da li je u pitau gora ili doa polukrunica), i to sortirano prema y-koordinatama preseka sa L. Taj redosled se ne mea pri prelasku L u novi poloaj ako nema preseka; ako se pak neka dva luka seku, onda uvek postoji presek neka dva uzastopna luka u sortiranom redosledu. Prema tome, ako L naie na desni kraj nekog kandidata, egova oba luka se eliminixu (pogodna struktura podataka je zato uravnoteeno binarno stablo pretrage); ako naie na levi kraj neke krunice, onda u sortirani redosled treba umetnuti oba luka i proveriti da li se nova krunica seqe sa krunicama{susedima u sortiranom redosledu kandidata (dve krunice polupreqnika r i r sa rastojaem centara d seku se akko je |r − r | ≤ d ≤ r + r ). Sloenost algoritma je O(n log n). 7.26. Problem se moe rexiti sliqno kao u zadacima 7.25, 7.20. U ovom sluqaju se sortira svih nk temena mnogouglova po x-koordinatama. Tekui skup kandidata qine ivice mnogouglova koje seku pokretnu vertikalnu pravu; one se mogu (ako nema preseka) quvati sortirano prema y-koordinatama svojih preseka sa pokretnom pravom. Za kandidate se pamte indeksi mnogouglova kojima pripadaju, da se ne bi kao preseci raqunala temena mnogouglova | preseci susednih ivica. Ukupan broj kandidata je najvixe nk, pa je sloenost algoritma O(nk log(nk)). 7.27. Ideja je izdeliti oba mnogougla vertikalnim pravama na trapeze, i onda pronai preseke parova trapeza. Najpre se sva temena sortiraju prema x-koordinatama. Ovo se moe uraditi za vreme O(n), jer se zna cikliqki redosled temena oba mnogougla. Kroz svako teme povuqe se vertikalna prava i na taj naqin su oba mnogougla izde ena na trapeze (sa osnovama paralelnim y-osi; trougao je specijalan sluqaj trapeza). U jednoj po jednoj vertikalnoj traci, sleva udesno, pronalaze se (za vreme O(1), jer oba trapeza imaju po najvixe qetiri temena) preseci po dva trapeza, dela dva mnogougla. Zatim se za vreme O(n) odgovarajui preseci objediuju u mnogougao. 7.28. Presek trouglova je konveksan mnogougao. Presek dva trougla pronalazi se za konstantno vreme, a presek dva konveksna mnogougla za linearno vreme (videti zadatak 7.27). 1
2
1
2
1
2
368
13. UPUTSTVA I REXE A ZADATAKA
Prema tome, algoritam zasnovan na dekompoziciji deli trouglove na dva podskupa, izraqunava rekurzivno preseke trouglova u oba podskupa, a onda pronalazi presek dva dobijena konveksna mnogougla. Sloenost algoritma je O(n log n). 7.29. Neka gora granica d za dijametar mnogougla (duinu najvee dui koju sadri) moe se odrediti za O(n) koraka | to je npr. dijagonala pravougaonika koji sadri mnogougao, a ivice su mu paralelne osama. Zatim se za svako teme P mnogougla konstruixe jednakokraki trougao kome je P teme, stranice mu sadre stranice mnogougla koje se sustiqu u temenu P , a visina iz temena P ima duinu d (taj trougao sadri celi mnogougao!). Presek ovih n trouglova je zadati mnogougao. 7.30. Za svaku taqku P , 1 ≤ i ≤ n, sortiraju se nagibi od P ka ostalim taqkama, i proveri se da li meu ima ima jednakih (ako ima, onda su pronaene tri kolinearne taqke). Sloenost algoritma je O(n · n log n) = O(n log n). 7.31. Neka su date taqke A = (x , y ), i = 1, 2, . . . , n. Svih n(n − 1)/2 dui A A mogu se leksikografski sortirati (O(n log n) koraka) prema qetvorki (x , y , x , y ); pri tome je zbog odreenosti redosled taqaka u svakom paru A A definisan tako da bude x < x ili x = x i y < y . Na taj naqin mogue je za proizvo nu du binarnom pretragom za O(log n) koraka proveriti da li se nalazi ili ne u ovom skupu dui. Za svaku od n(n − 1)/2 dui se proverava da li skup sadri tri dui koje sa om zatvaraju kvadrat na jedan ili drugi naqin | za ovo je potrebno najvixe xest binarnih pretraga, odnosno jox ukupno O(n log n) koraka. 7.32. Neka su date taqke P = (x , y ), i = 1, 2, . . . , n. Formiraju se qetiri skupa brojeva A = {x |1 ≤ i ≤ n}, B = {y |1 ≤ i ≤ n}, C = {x − y |1 ≤ i ≤ n} i D = {x + y |1 ≤ i ≤ n}. Sortiraem brojeva u ovim skupovima utvruje se broj razliqitih elemenata u svakom od ih, koji je upravo jednak broju paralelnih pravih koje sadre sve date taqke, a paralelne su y-osi (A), x-osi (B), pravoj y = x (C ) i pravoj y = −x (D). Najmai od ova qetiri broja odreuje rexee zadatka. i
i
i
i
i
i
2
i
i
2
i
i
i
i
i
j
i
i
j
j
j
j
i
j
j
2
i
i
i
i
i
i
i
i
i
13.8. Algebarski algoritmi
8.1. Neka je (k k . . . k ) binarni zapis broja k. Rezultatu z dode uje se poqetna vrednost z := 1. Poxto je k = ((k · 2 + k ) · 2+) . . . · 2 + k , biti k prolaze se redom za i = m − 1, m − 2, . . . , 0: tekui rezultat z se kvadrira, a ako je k = 1, onda se i mnoi sa n: z := z · n . 8.2. Algoritam Stepen kvadriranjem sa slike 8.2 za stepenovae eksponentom 15 zahteva 6 mnoea, n = (((n ·n) ·n) ·n). Meutim, n moe se izraqunati pomou 5 mnoea: n = ((n ) · n) . 8.3. Potrebno je Euklidovim algoritmom odrediti d = NZD (a, b), posle qega je a = a/d, b = b/d. 8.4. Dokazuje se indukcijom po k, gde je n = 2 . 8.5. Za razliku od mnoea polinoma, ako se pokuxa sa svoeem proizvoda P Q, 0 ≤ P, Q < 2 , na proizvode maih brojeva pomou P = P + 2 P , Q = Q +2 Q , 0 ≤ P ,P ,Q ,Q < 2 , P Q = P Q + 2 (P Q + P Q ) + 2 P Q , i P Q + P Q = (P + P )(Q + Q ) − P Q + P Q , pojav uje se izraqunavae proizvoda (P + P )(Q + Q ) brojeva 0 ≤ P +P , Q +Q ≤ 2·2 − 2, koji izlaze iz polaznog opsega [0, 2 − 1]. Problem se moe rexiti na sledei naqin: izraqunavae proizvoda dva broja od po n = 2 + 2 bita svodi se na izraqunavae tri proizvoda brojeva od po najvixe m = + 1 = 2 + 2 bita. Zaista, ako je 0 ≤ P, Q < 2 , onda je P = P + 2 P , Q = Q + 2 Q , gde je 0 ≤ P , P , Q , Q < 2 , i 0 ≤ P + P , Q + Q < 2 . Sloenost T (n) zadovo ava diferencnu jednaqinu T (2 + 2) = 3T (2 + 2) + c2 . Indukcijom se pokazuje da je gora granica enog rexea T (2 + 2) < 3c(3 − 2 ), pa za n = 2 + 2 vai T (n) < 3c3 = 3c2 = 3c(n − 2) , odnosno T (n) = O(n ). Uopxtee na sluqaj proizvo ne osnove b ≥ 2 je direktno | i da e se proizvod brojeva od n = 2 + 2 cifara svodi na tri proizvoda brojeva od po m = n/2 + 1 cifara. m−1 m−2
0 2
m−1
2
0
i
i
ki
15
15
m−2
2 2
2
2
2
15
3
0
0
k
n
0
1
1
0
0
0
n/2
1
1
1
0
0
0
0
1
1
k
k
0
k−1
k
0
0
0
1
1
0
n/2
n
1
1
n/2
0
1
1 n/2
0
0 n
1
1
1
1
0
0
0
1
k
n
m−1
n/2
0
1
0
k
1 k
m−1
m
k
1
0
n 2 m−1
k
log2 3
k
k−1
1
0
k log2 3
1
0
1
log2 3
13.8. ALGEBARSKI ALGORITMI
Drugo rexee. Ako je n = 2 , moe se poi od P = P 0 ≤ P ,P ,Q ,Q < 2 , i identiteta k
0
1
0
n/2
1
0
369
,
+ 2n/2 P1 Q = Q0 + 2n/2 Q1
,
P Q = (2n + 2n/2 ) + 2n/2 (P1 − P0 )(Q0 − Q1 ) + (2n/2 + 1)P0 Q0 ,
kojim se izraqunavae proizvoda n-bitnih brojeva P , Q svodi na izraqunavae tri proizvoda n/2-bitnih brojeva i nekoliko jednostavnih operacija, sabiraa i dopisivaa nula zdesna u sistemu sa osnovom 2. Uopxtee na sluqaj proizvo ne baze b ≥ 2 takoe je direktno. 8.6. Dovo no je izraqunati proizvode p = ac, p = bd i p = (a + b)(c + d) = p + p + (ad + bc), jer je tada 1
2
3
1
2
(a + bi)(c + di) = ac − bd + i(ad + bc) = p1 − p2 + i(p3 − p1 − p2 ).
8.7. Ako se ograniqimo na sluqaj n = 4 , i ako sa T (n) oznaqimo sloenost izraqunavaa proizvoda dve matrice reda n, onda je T (n) = kT (n/4) + cn . Rexee ove diferencne jednaqine je (videti ode ak 2.5.4) T (n) = O(n ). Da bi algoritam bio asimptotski bri od Xtrasenovog, trebalo bi da bude n < n , ili log k < log 7 = log 49, odnosno k < 49. 8.8. Uzastopna mnoea: n ima id cifara, pa je ukupan broj koraka d + 2d + . . . + (k − 1)d = (k − k)d /2. Uzastopna stepenovaa: ukupan broj koraka je k
2
log4 k
log4 k
log2 7
4
2
4
i
2
2
2
2
2
d2 + (2d)2 + (4d)2 + . . . + (kd/2)2 = (k2 − 1)d2 /3.
Dakle, pod ovim pretpostavkama oba algoritma imaju istu asimptotsku sloenost . 8.9. NZD brojeva a , a , . . . , a se ne mea ako se (pretpostavimo da je a najmai od ih) brojevi a , a , . . . , a zamene svojim ostacima pri de eu sa a , i ako se zatim iz skupa izbace nule. Ovim operacijama se veliqina najveeg broja u skupu smauje, pa se (kao i kod obiqnog Euklidovog algoritma) posle konaqnog broja koraka dolazi do sistema od samo jednog broja; taj broj je traeni NZD brojeva a , a , . . . , a . 8.10. Neka je d = NZD (a, b); tada je a = a d, b = b d, gde su a i b uzajamno prosti brojevi, pa je NZS (a, b) = a b d = ab/NZD (a, b). Time je odreivae NZS (a, b) svedeno na odreivae NZD (a, b). 8.11. Problem se moe rexiti indukcijom po k. Ako su dati brojevi a , a , . . . , a i izraqunat je A = NZS (a , a , . . . , a ), onda je O(k2 d2 ) = O(k2 log2 n)
1
2
3
2
1
k
1
k
1
2
1
k
1
1
1
1 1
1
k−1
1
2
2
k
k−1
Ak = NZS (a1 , a2 , . . . , ak ) = NZS (Ak−1 , ak ) = Ak−1 ak /NZD (Ak−1 , ak ),
odnosno potrebno je jox jednom izvrxiti Euklidov algoritam, mnoee i de ee. 8.12. Da se svaki prirodan broj n moe predstaviti u obliku zbira razliqitih Fibonaqijevih brojeva moe se dokazati indukcijom po n. Za n = 1, 2 tvree je taqno. Neka je tvree taqno za brojeve mae od n (induktivna hipoteza). Neka je k takav indeks da je F (k) ≤ n < F (k + 1). Tada je F (k) > n/2 (u protivnom bi bilo F (k + 1) = F (k) + F (k − 1) ≤ 2 · n/2 = n). Prema induktivnoj hipotezi se n − F (k) moe predstaviti u obliku zbira najvixe log (n − F (k)) razliqitih Fibonaqijevih brojeva. Meutim, kako je n − F (k) < F (k), u toj reprezentaciji F (k) ne moe da uqestvuje, pa je i za broj n = (n − F (k)) + F (k) dobijena reprezentacija u obliku zbira razliqitih Fibonaqijevih brojeva; broj sabiraka je mai od log (n − F (k)) + 1 = log (n + (n − 2F (k))) < log n. Da bismo efektivno odredili reprezentaciju datog broja n, izraqunavamo Fibonaqijeve brojeve dok ne doemo do nekog koji je vei od n, a onda nastav amo kao u induktivnom dokazu: od n se oduzima prethodni Fibonaqijev broj, pa se sa razlikom nastav a na isti naqin, koristei ve izraqunate Fibonaqijeve brojeve. 8.13. Sliqno kao kod prirodnih brojeva, ako se izvrxi de ee sa ostatkom a = bq + r, deg r < deg b, onda je NZD (a, b) = NZD (b, r). Tako se moe polazei od r = a i r = b izvrxiti niz de ea sa ostatkom r = qr + r , deg r < deg r , i = 1, 2, . . . , k (niz de ea je konaqan, jer stepeni polinoma r qine strogo opadajui niz). Ako je r posledi 2
2
2
2
0
i−1
i
i
i+1
i+1
1
i
k
370
13. UPUTSTVA I REXE A ZADATAKA
ostatak razliqit od nule, onda je r = NZD (a, b), jer svaki zajedniqki delilac a i b deli , i svaki delilac r deli i a i b. NZD se moe izraziti u obliku r = au + bv, gde su u i polinomi; to se postie na isti naqin kao i kod prirodnih brojeva. Ako su dva polinoma i d istovremeno NZD polinoma a i b, onda d |d i d |d , pa poxto su im najstariji koeficijenti jedinice, mora biti d = d . 8.14. Neka je p = a a , p = b b , p = c c , p = d d , p = (a + b )(a + b ), p = (a +c )(a +c ), p = (a +d )(a +d ), p = (b −c )(b +c ), p = (d −b )(b +d ), p = (c − d )(c + d ) (ukupno 10 mnoea). Tada je k
rk v d1
k
k
2
1
1
1
13
1
34
1
1
1
2
1 2
2
2
14
2
1
1
2
2
1
2
1 2
3
2
2
1 2
23
4
1 2
1
1
2
12
1
2
24
1
1
2
1
2
2
2
2
(a1 + b1 i + c1 j + d1 k)(a2 + b2 i + c2 j + d2 k) = (a1 a2 − b1 b2 − c1 c2 − d1 d2 ) +
(a1 b2 + b1 a2 + c1 d2 − d1 c2 )i
+
(a1 c2 − b1 d2 + c1 a2 + d1 b2 )j
+
(a1 d2 + b1 c2 − c1 b2 + d1 a2 )k
=
(p1 + p2 + p3 + p4 ) + (p12 − p1 − p2 + p34 − p3 + p4 )i
+
(p13 − p1 − p3 + p24 − p4 + p2 )j + (p14 − p1 − p4 + p23 − p2 + p3 )k.
Prema tome, izraqunavae proizvoda dva kvaterniona svodi se na 10 (umesto 16) realnih mnoea. 8.15. Poxto je µ ¶ µ ¶ µ ¶ a c
b d
a c
b d
=
a2 + bc c(a + d)
b(a + d) bc + d2
,
vidi se da je dovo no izraqunati pet proizvoda a , bc, d , c(a + d) i b(a + d). 8.16. (a) Matrica A je permutaciona akko se rezultat mnoea y = Ax proizvo nog vektora kolone x sa A dobija permutovaem komponenti x (na naqin koji ne zavisi od x: y[i] = x[j] = x[P [i]], ako je P [i] = j , 1 ≤ i ≤ n). Proizvod dve permutacione matrice A A na proizvo an vektor kolonu x deluje tako xto mu permutuje komponente, jer je (A A )x = A (A x), pa je i A A permutaciona matrica. (b) Neka je y = A x, z = A y = A A x, i neka su P , P vektori koji predstav aju permutacione matrice redom A , A . Tada je y[i] = x[P [i]], z[i] = y[P [i]] = x[P [P [i]]], pa je i-ta komponenta vektora koji predstav a permutacionu matricu A A jednaka P [P [i]], 1 ≤ i ≤ n. 8.17. Moe se primeniti dekompozicija. Bulova funkcija f (x , x , . . . , x ) od n promen ivih moe se predstaviti kao linearni polinom po x : 2
2
1
1
1
2
1
2
2
2
2
1
1
1
2
1
2
2
2
1
2
1
1
1
2
2
2
1
n
n
xn f (x1 , x2 , . . . , 1) ∨ x ¯n f (x1 , x2 , . . . , 0) =
gde je
xn f (x1 , x2 , . . . , 1) + (1 + xn )f (x1 , x2 , . . . , 0)
=
xn (f (x1 , x2 , . . . , 1) + f (x1 , x2 , . . . , xn−1 , 0)) + f (x1 , x2 , . . . , xn−1 , 0)
=
xn h(x1 , x2 , . . . , xn−1 ) + g(x1 , x2 , . . . , xn−1 ),
g(x1 , x2 , . . . , xn−1 )
=
f (x1 , x2 , . . . , xn−1 , 0),
h(x1 , x2 , . . . , xn−1 )
=
f (x1 , x2 , . . . , xn−1 , 1) + f (x1 , x2 , . . . , xn−1 , 0);
korixen je identitet x¯ = 1 + x . Vektor od 2 koeficijenata polinoma f dobija se prema tome nadovezivaem dva vektora od po 2 koeficijenata polinoma g, h od n − 1 promen ive. Ako broj operacija potrebnih za dobijae koeficijenata polinoma funkcije od n promen ivih oznaqimo sa T (n), onda je T (n) = 2T (n − 1) + c2 . Qlan c2 potiqe od izraqunavaa tablice h sabiraem dve polovine tablice f . Rexee ove diferencne jednaqine je T (n) = O(n2 ) (dobija se npr. uvoeem smene R(n) = 2 T (n), koja diferencnu jednaqinu transformixe u R(n) = R(n − 1) + c, odakle je R(n) = O(n)). n
n
n
n−1
n
n
−n
n
13.8. ALGEBARSKI ALGORITMI
371
8.18. Zadatak se rexava nalaeem rastojaa od svih linearnih funkcija , . Sloenost trivijalnog algoritma (izraqunavae
Pn
f
La (x) =
ai xi a = (a0 , a1 , . . . , an ) ∈ B n+1 2n+1 n n n O(n2 · 2 ) = O(n4 )
svih vrednosti svake od linearnih funkcija, i nalaee rastojaa tih funkcija od f ) je . Do uxtede se moe doi primenom dekompozicije a0 +
i=1 2n
f = xn f 00 (x1 , x2 , . . . , xn−1 ) + x ¯n f 0 (x1 , x2 , . . . , xn−1 ),
gde su
f 0 (x1 , x2 , . . . , xn−1 )
=
f (x1 , x2 , . . . , xn−1 , 0),
f 00 (x1 , x2 , . . . , xn−1 )
=
f (x1 , x2 , . . . , xn−1 , 1)
dve Bulove funkcije od n − 1 promen ive (tablica f dobija se nadovezivaem tablica f , f ). Na P isti naqin se proizvo na linearna funkcija od n promen ivih L (x , x , . . . , x ) = a + a x predstav a preko dve linearne funkcije od n − 1 promen ive 0
00
0
a
n i=1
1
n
2
i i
Pn−1
L0a0 ,a1 ,...,an−1 (x1 , x2 , . . . , xn−1 )
=
a0 +
L00 a0 ,a1 ,...,an−1 (x1 , x2 , . . . , xn−1 )
=
a0 + an +
ai xi , Pn−1
i=1
i=1
ai x i :
La (x1 , x2 , . . . , xn ) xn L00 ¯n L0a0 ,a1 ,...,an−1 (x1 , x2 , . . . , xn−1 ). a0 ,a1 ,...,an−1 (x1 , x2 , . . . , xn−1 ) + x
=
Pri tome je
(
¯0 L a0 ,a1 ,...,an−1 , L0a0 ,a1 ,...,an−1 ,
0 L00 a0 ,a1 ,...,an−1 = an + La0 ,a1 ,...,an−1 =
an = 1 , an = 0
xto znaqi da je druga polovina tablice funkcije L jednaka prvoj ako je a = 0, odnosno enom komplementu ako je a = 1. Svakoj linearnoj funkciji od n − 1 promen ive odgovaraju na ovaj naqin dve linearne funkcije od n promen ivih (za a = 0, odnosno a = 1). Polazei od jednakosti a0 ,a1 ,...,an
n
n
n
n
D(f, La0 ,a1 ,...,an ) = D(f 0 , L0a0 ,a1 ,...,an−1 ) + D(f 00 , L00 a0 ,a1 ,...,an−1 ) ½ D(f 0 , La0 ,a1 ,...,an−1 ) + D(f 00 , La0 ,a1 ,...,an−1 ), an = 0 , D(f 0 , La0 ,a1 ,...,an−1 ) + 2n−1 − D(f 00 , La0 ,a1 ,...,an−1 ), an = 1
=
mogu se izraqunati sva rastojaa f od linearnih funkcija, ako se znaju sva rastojaa funkcija f , f (od n − 1 promen ive) od linearnih funkcija: dovo no je izvrxiti O(2 ) sabiraa. Ako sa T (n) oznaqimo vremensku sloenost ovako definisanog rekurzivnog algoritma, onda je T (n) = 2T (n − 1) + O(2 ), i konaqno T (n) = O(n2 ) (videti zadatak 8.17). 8.19. Elemenat c moe se izraqunati za konstantno oqekivano vreme. Zaista, 2n sluqajnih dogaaja a = 0, b = 0, k = 1, 2, . . . , n, meusobno su u parovima nezavisni. Zbog toga su nezavisni i dogaaji d = 0, gde je d = a ∨ b ; verovatnoa P {d = 0} je 1/4. Nezavisni dogaaji A = {d = d = · · · = d = 1, d = 0}, k = 1, 2, . . . , n, i A = {d = d = · · · = d = 1}, qine kompletan sistem dogaaja (sa zbirom verovatnoa 1). Ako je d = 0, stav a se c := 0 (dogaaj A sa verovatnoom ; c je izraqunato primenom jedne Bulove operacije, tj. posle jednog koraka); ako je d = 1 i d = 0 stav a se takoe c := 0 (dogaaj A sa verovatnoom · ; izraqunavae c zavrxeno je posle dva koraka), itd. Uopxte, ako je d = d = · · · = d = 1 i d = 0, stav a se c := 0 (dogaaj A sa verovatnoom ( ) · ; izraqunavae c zavrxeno je posle k koraka, k = 1, 2, . . . , n). U protivnom se posle n koraka stav a c := 1 (dogaaj A sa verovatnoom ( ) ). Oqekivani 0
00
n
n
n
ij
ik
kj
k
1
k
n+1
1
k
2
ik
k−1
kj
k
k
n
2
1
3 1 4 4 k−1
2
ij
3 k−1 4
1 4
1
1 4
1
ij
2
ij
1
2
ij
k
ij
k
ij
ij
n+1
3 n 4
372
13. UPUTSTVA I REXE A ZADATAKA
(sredi) broj koraka potrebnih za izraqunavae c je(videti primer 2.4) ij
n X
<
k
¡ 3 ¢k−1
k=1 ∞ X 1 4
4
1 4
+n
¡ 3 ¢n 4
n X
=
k
¡ 3 ¢k−1 4
k=1 k
¡ 3 ¢k−1 4
=
k=1
1 1 4 1− 3 4
∞ X
1 + 4
n
¡ 3 ¢k−1 4
1 4
k =n+1
= 4.
Oqekivani broj koraka za izraqunavae proizvoda C = AB je dakle mai od 4n = O(n ). 8.20. Neka je C = AB, A = (a ), B = (b ), C = (c ). Dovo no je pretpostaviti da su vrste matrice APotvoreni Grejovi kodovi. Najpre se izraqunavaju elementi prve vrste matrice C , c = a b (O(n ) operacija) i pronalaze indeksi R[i] | pozicije na kojima se razlikuju i-ta i (i+1)-a vrsta matrice A, i = 1, 2, . . . , n−1 (takoe O(n ) operacija). Poxto je 2
ij
1j
n k=1
ci+1,j − cij
=
ij
2
1k kj
=
ij
2
2
n X
ai+1,k bkj −
n X
aik bkj =
k=1 k=1 (ai+1,R[i] − ai,R[i] )bk,R[i] ,
n X
(ai+1,k − aik )bkj k=1
svi ostali elementi matrice c , izraqunavaju se korigovaem vrednosti elementa iznad sebe (c ) pomou jednog mnoea, sabiraa i oduzimaa, i ≥ 2, 1 ≤ j ≤ n. Prema tome, pri izraqunavau proizvoda izvrxeno je ukupno O(n ) operacija. 8.21. Rexiemo problem indukcijom po n. Sluqaj n = 2 je trivijalan. Pretpostavimo da znamo rexee za n ≥ 2 matrica, i neka je dato n + 1 matrica koje treba pomnoiti. Oznaqimo sa M [i..j] proizvod M M . . . M . Najbo i naqin da se izraquna proizvod M [1..n+1] je da se izraqunaju proizvodi M [1..i] i M [i+1..n+1] za neko (za sada nepoznato) i, pa da se onda ti proizvodi pomnoe. Najbo a vrednost za i odreuje se izraqunavaem cene u svim varijantama. Prema induktivnoj hipotezi znamo najbo i naqin za izraqunavae M [1..i] (kao i odgovarajuu cenu). Meutim, mora se pronai najbo i naqin za izraqunavanje M [i + 1..n + 1]. Zbog toga je zgodno pojaqati induktivnu hipotezu: znamo najbo i naqin za izraqunavae M [i..j] za sve 1 ≤ i < j ≤ n. Da bi se induktivna hipoteza proxirila na n + 1, treba izraqunati M [i..n + 1] za sve 1 ≤ i ≤ n. Ovaj problem rexava se drugom (umetnutom) indukcijom, pri qemu i uzima vrednosti n, n − 1, . . . , 1. Za i = n problem je trivijalan. Pretpostavimo da znamo najbo i naqin izraqunavaa M [i..n + 1] i razmotrimo proizvod M [i − 1..n + 1]. Sada se moe izvesti kompletno svoee: za svako j, i < j < n + 1, proverava se cena izraqunavaa M [i − 1..j] (xto znamo po osnovnoj induktivnoj hipotezi), M [j + 1..n + 1] (xto znamo po unutraxoj induktivnoj hipotezi), i cena mnoea ova dva proizvoda; bira se ono j za koje je cena izraqunavaa najmaa. Ako se pogleda kompletan algoritam, induktivna konstrukcija odgovara dvema pet ama | spo axoj veliqine n, i unutraxoj veliqine n − i, pa se unutraxa pet a sastoji od n − i koraka. Ukupan broj koraka je dakle X X X ij
i−1,j
4
i
i+1
j
n n nO(1) = O(n3 ). k=1 i=k j=i
13.9. Primene u kriptografiji
9.1. Proverom moguih pomaka redom, sa pomakom dobija se poruka Za sve ostale pomake dobijaju se besmisleni tekstovi. 9.2. Broj moguih k uqeva je , pa odreivae k uqa u najgorem sluqaju traje sati. Ako jedno xifrovae traje , onda odreivae k uqa traje najvixe sati, odnosno u proseku sati. 9.3. Ako se uporede xifrovae poruka , odnosno k uqevima redom , odnosno. , zapaa se da su odgovarajui izlazi posle -te runde komplementarni, 5
ˇ CEZAROVASIFRASAPOMAKOMPET 268
268 /3600 58
¯ K
0.001 ·
= 58000
1µs
29
P i
P¯
K i = 1, 2, . . . , 16
13.9. PRIMENE U KRIPTOGRAFIJI
373
Zaista, blokovi L i R u ova dva xifrovaa su oqigledno komplementarni, jer su biti ovih blokova kopije ulaznih bita (videti sliku 9.4). Da e, zbog strukture funkcije f (slika 9.5) vai f (R , K ) = f¯(R¯ , K¯¯ ). Prema tome, ako je ulaz u i-tu rundu L¯ , R¯ , onda je prema (9.1) izlaz iz e R = L i 0
0
i−1
i
i−1
i
i−1
i−1
i−1
i
¯ i−1 ⊕ f (R ¯ i−1 K ¯ i ) = Li−1 ¯ ⊕ f (Ri−1 Ki ) = (Li−1 ⊕ f (Ri−1 Ki )) = R ¯i . L
9.4. Mogu se formirati dva niza i duine qiji elementi a
256
b
a[i] = (DESi (P1 ), DESi (P2 ), . . . , DESi (P10 )) , ³ ´ b[i] = DESi−1 (C1 ), DESi−1 (C2 ), . . . , DESi−1 (C10 ) ,
su veliqine 10 · 8 = 80 bajtova. Ovde je DES (P ), odnosno DES (C) rezultat xifrovanja P , odnosno dexifrovaa C , k uqem i, 0 ≤ i ≤ 2 − 1. Nizovi a i b se sortiraju u mestu, posle qega se jednim prolaskom kroz oba niza (sliqno kao pri objediavau) pronalazi ihov zajedniqki elemenat a[j] = b[k], odakle je DES (P ) = DES [C ], odnosno DES (DES (P )) = C za svako l = 1, 2, . . . , 10. Drugim reqima, pronaen je par k uqeva (j, k) za DES koji deset datih poruka transformixu u deset datih xifrata. Pri tome je DES za xifrovae ili dexifrovae korixen 2 · 2 · 10 < 2 puta, broj uporeivaa blokova od 80 bajtova je oko 2 · 56 · 2 < 2 (xto znaqi da je ovaj deo posla jednostavniji od xifrovaa/dexifrovaa algoritmom DES). 9.5. Jedini naqin da svi potk uqevi K budu jednaki je da se obe grupa od po 28 bita k uqa (koje se rotiraju posle svake runde) budu sastav ene od jednakih bita, da ih rotacije ne bi meale. Postoje qetiri takve mogunosti. Koristei tabelu 9.2 dobijamo da su to sledei k uqevi (heksadecimalno): K uq Ispermutovani k uq i
56
−1 i
j
j
k
l
−1 k
l
l
l
56
56
61
63
i
0101010101010101 FEFEFEFEFEFEFEFE 1F1F1F1F1F1F1F1F
00000000 FFFFFFFF 00000000 FFFFFFFF
00000000 FFFFFFFF FFFFFFFF 00000000
9.6. Do faktorizacije n moe se doi probabilistiqkim algoritmom tipa Las Vegas. Najpre se izraqunava k = de − 1, broj koji je umnoak φ(n). Poxto je φ(n) = (p − 1)(q − 1) paran broj, bie k = 2 r, gde je t ≥ 1 i r je neparan broj. Za proizvo an broj g, uzajamno prost sa n vai g ≡ 1 (mod n), pa je g koren iz jedinice po modulu n. Korena iz jedinice po modulu n ima qetiri: ihovi ostaci po modulu p i q mogu biti (1, 1), (−1, −1), (1, −1) ili (−1, 1); prva dva od ih su ±1, a ostala dva su ±x, gde x zadovo ava kongruencije x ≡ 1 (mod p) i x ≡ −1 (mod q). Poznavae bilo kog od ova dva posleda korena iz jedinice po modulu n, omoguava nalaee faktorizacije n izraqunavaem NZD (x − 1, n). Za sluqajno izabrani broj g, 1 < g < n, sa verovatnoom bar 1/2 meu brojevima g , g ,..., g (mod n), nalazi se bar jedan od korenova iz jedinice koji otkriva faktorizaciju n. 9.7. Polazimo od qienice da φ(n)|ed−1; potrebno je da za novi javni k uq e odredimo neko d tako da je φ(n)|e d −1. Najpre izraqunavamo rezultat de ea ed−1 svim zajedniqkim deliocima sa e , tj. g = (ed − 1)/NZD (ed − 1, e ). Poxto su ti zajedniqki delioci uzajamno prosti sa φ(n) (naqin izraqunava k uqeva za RSA podrazumeva da su e i φ(n) uzajamno prosti), bie φ(n)|g. Zatim se pomou Euklidovog algoritma odreuje takvo d da g|e d − 1, a time i φ|e d − 1. Eksponent d moe se koristiti za dexifrovae poruka xifrovanih eksponentom e . Drugo rexee. Osoba B moe, znajui n, e i d, da faktorixe n (videti zadatak 9.6), posle qega lako moe da izraquna tajni k uq d koji odgovara javnom k uqu e . Napomena. Ovo zapaae pokazuje da se RSA moduo n ne sme koristiti dva puta. 9.8. Javni eksponent e bira se tako da bude uzajamno prost sa χ(n) i mai od χ(n). Tajni eksponent d dobija se pomou Euklidovog algoritma, kao rexee kongruencije de ≡ 1 t
k
k/2
k/2
k/2t
k/4
0
0
0 0
0
0
0
0
0 0
0 0
0
0
0
0
374
13. UPUTSTVA I REXE A ZADATAKA
. Xifrovae bloka p daje c = p (mod n), a dexifrovaem c dobija se p ≡ p , jer je ed istovremeno i oblika 1 + l (p − 1) i oblika 1 + l (q − 1), gde su l i l prirodni brojevi. 9.9. Jedno mogue rexee je da se na poqetku poruke rezervixe prostor za po e u kome se zapisuje duina poruke; pretpostavka je da su duine svih poruke mae od neke fiksirane vrednosti. e
(mod χ)(n) (mod n)
ed
1
2
1
2
13.10. Redukcije
10.1. Problem se rexava svoeem na problem nalaea najkraih puteva iz datog qvora u posebnom grafu G = (V, E) odreenom nizovima A i B. Skup qvorova G je V = {(i, j) | 0 ≤ i ≤ n, 0 ≤ j ≤ m}, a u qvor (i, j) vode grane iz qvorova • (i, j − 1) ako je 0 ≤ i ≤ n, 1 ≤ j ≤ m (umetae znaka a , cena ci), • (i − 1, j) ako je 1 ≤ i ≤ n, 0 ≤ j ≤ m (brisae znaka b , cena cj ), • (i − 1, j − 1) ako je 1 ≤ i ≤ n, 1 ≤ j ≤ m (zamena a sa b ; cena je 0 ako a = b , odnosno 1 ako a 6= b ). U grafu G pronalaze se najkrai putevi od qvora (0, 0) do svih ostalih qvorova, specijalno do qvora (n, m); taj put odgovara nizu edit operacija najmae cene koji A transformixe u B. 10.2. Pokazaemo da se problem inkluzije intervala moe rexiti pomou algoritma za nalaee maksimalnih taqaka. Svakom intervalu I = (L , D ) pridruujemo taqku A = (−L , D ). Tada je interval I sadrzan u intervalu I akko je taqka A maa od odgovarajue taqke A . Drugim reqima, interval I je sadran u nekom drugom intervalu akko odgovarajua taqka A nije maksimalna. 10.3. Svaki qvor koji odgovara fakultetu zamenimo sa dva qvora, povezana granama sa svim studentima koji su se kvalifikovali za prijem na taj fakultet. Time je problem sveden na obiqan problem bipartitnog uparivaa. 10.4. Problem se moe rexiti svoeem na obiqan problem bipartitnog uparivaa. Polazei od bipartitnog grafa G = (U, V, E) sa skupom nastavnika U , kurseva V i grana E , formira se graf G = (U , V , E ) tako da svakom nastavniku u ∈ U odgovaraju dva qvora u , u ∈ U , svakom kursu v ∈ V odgovaraju dva kursa v , v ∈ V , a svakoj grani (u, v) ∈ E odgovaraju qetiri grane (u , v ), (u , v ), (u , v ), (u , v ) ∈ E . Lako se pokazuje da svakom obiqnom bipartitnom uparivau u G odgovara takvo dode ivae kurseva nastavnicima u G, da svaki nastavnik dri najvixe dva kursa, i svaki kurs dre najvixe dva nastavnika. Pri tome je ukupan broj kurseva jednak veliqini odgovarajueg uparivaa u G . 10.5. Za dati graf G = (V, E) formira se novi graf G = (V , E ) na sledei naqin. Svaki qvor v ∈ V zameuje se sa b(v ) qvorova v , v , . . . , v . Pored toga, za svaku granu (v , v ) ∈ E uvode se jox dva qvora v i v . Za svaku granu (v , v ) ∈ E u G postoje grane (v , v ), 1 ≤ k ≤ b(v ), (v , v ), i (v , v ), 1 ≤ k ≤ b(v ), videti sliku 13. Da bi se odredilo optimalno b-uparivae M u G, moe se odrediti optimalno uparivae M u G , i zatim ga transformisati u optimalno b-uparivae u G na sledei naqin: (v , v ) ∈ M akko su od grana G pridruenih grani (v , v ) ∈ E u uparivae M uk uqene dve grane (od ovih grana u uparivae M moe biti uk uqena ili jedna ili dve grane). Zaista, najpre se uveravamo da je skup grana M b-uparivae. Uparivae M u G transformixe se u uparivae M , u kome se svim kompletima grana pridruenim granama (v , v ) iz G sa jednom granom u uparivau M bira za M "sreda" grana (v ,v ) iz kompleta. Iz ostalih kompleta grana za M su izabrane po dve grane, po jedna grana sa svake strane srede grane; za fiksirani qvor v ∈ V u uparivau M je najvixe b(v ) grana emu susednih, jer u G skup qvorova v , v , . . . , v moe da obezbedi najvixe b(v ) kompleta sa po dve grane u uparivauM : svaki od tih kompleta grana pokriva po jedan od qvorova | replika qvora v . i
j
i
i
j
j
j
j
i
j
j
j
j
j
j
j
k
j
k
j
0
0
0
0
0
0
1
0
0
0
0
0
1
1
0
1
0
1
0
1
0
0
i
i
i
i,1
j
i,j,0
i,j,0
i,k
0
i
i
i,j,0
i,2
0
i,b(vi )
j,i,0
j,i,0
0
i
j,k
0
j
j,i,0
j
0
0
j
i
0
j
0
00
i
0
j
0
i
0
i,1
0
i
i,2
00
i,j,0
i
i,b(vi )
i
j,i,0
0
13.10. REDUKCIJE vi,1 vi,2
b
b
375 vi,b(vi )
b
···
vi
b
b
vi,j,0
b vj,i,0
b
vj
b
b
b
···
vj,1 vj,2
vj,b(vj )
Ris. 13. Ilustracija uz zadatak 10.5. Da bismo se uverili da je uparivae M optimalno b-uparivae u G, pretpostavimo da u emu ima k grana (odnosno da u uparivau M ima |E|+k grana), i da u G postoji uparivae M sa k > k grana. Tada se moe, polazei od M , formirati (obiqno) uparivae M u G koje iz kompleta grana pridruenih grani iz M (odnosno E \ M ) sadri dve (odnosno jednu) granu; broj grana u M je 2k + (|E| − k ) = |E| + k > |E| + k, suprotno pretpostavci da je M optimalno uparivae u G . Prema tome, M jeste optimalno b-uparivae u G. 10.6. Polazei od grafa G konstruixe se novi graf H, u kome svakom qvoru w iz G odgovaraju dva qvora w ("zavrxni") i w ("polazni"). Za svaku granu (w, u) iz G dodajemo granu (w , u ) cene 0 u H (drugim reqima, preprav amo sve grane da vode od polaznog ka zavrxnom qvoru). Pored toga, dodajemo granu (u , u ) cene (c(u) za svaki qvor u iz G. Time je dati problem sveden na problem odreivaa najkraih puteva od v do svih polaznih qvorova u H . 10.7. Dovo no je ograniqea sa nejednakostima tipa "≥" pomnoiti sa (−1). 10.8. Neka je n = |V |, m = |E| i neka je x = w(e ) teina i-te grane e ∈ E, 1 ≤ i ≤ m. Potrebno je maksimizirati vrednost z = P x , pod uslovom da je X x ≤ h za svaki qvor v ∈ V, e je susedna sa v i x ≥ 0, 1 ≤ i ≤ m. 10.9. Mogu se prepraviti nejednakosti { ograniqea u osnovnoj varijanti. Lakxe je primetiti da svaka osoba treba da pokloni svoj maksimalni iznos. 10.10. Dokaz se izvodi tako xto se pokae da se problem sortiraa (za koji se zna doa granica sloenosti | pod pretpostavkom da se koristi model stabla odluqivaa) moe svesti na ovaj problem, sliqno kao xto je to uraeno za problem konstrukcije prostog mnogougla sa zadatim skupom temena. Zadatih n brojeva, ulaz za problem sortiraa, transformixu se u n taqaka P , P , . . . P na krunici sa centrom O u koordinatnom poqetku, takvih da du OP sa x-osom zaklapa ugao ax + b; konstante a i b biraju se tako da sve vrednosti ax + b pripadaju intervalu [0, 2π). Na taqke P , P , . . . P primeni se algoritam za ureee temena konveksnog mnogougla (sve taqke lee na krunici, pa su temena konveksnog mnogougla). Na taj naqin (qitajui taqke sa krunice suprotno od kaza ke na satu, polazei od x-ose) dobija se sortirani niz taqaka P , P , . . . , P , a time i ureee x < x < · · · < x | rexee problema sortiraa. Poxto je doa granica sloenosti problema sortiraa Ω(n log n), time je dokazano da je i doa granica sloenosti ureea temena konveksnog mnogougla Ω(n log n). 10.11. Da bi se izraqunao kvadrat matrice, dovo no je pet mnoea matrica dvostruko mae dimenzije. Meutim, to su proizvodi dve proizvo ne, a ne jednake matrice. 10.12. Neka su A i B dve proizvo ne kvadratne matrice reda n. Potrebno je svesti izraqunavae proizvoda AB na izraqunavae proizvoda nekih doih i gorih trougaonih matrica. U tom ci u se A i B mogu predstaviti (ne jednoznaqno) u obliku zbira jedne doe 0
000
0
000
IV
0
IV
0
0
0
0
0
1
2
2
1
1
2
2
i m i=1
i
i
i
i
i
i
1
i
2
n
i
1
i
i1
i1
i2
in
2
i2
n
in
376
13. UPUTSTVA I REXE A ZADATAKA
i jedne gore trougaone matrice, A = A
d
,
+ Ag B = Bd + Bg
. Odatle se dobija
AB = (Ad + Ag )(Bd + Bg ) = Ad Bd + Ad Bg + Ag Bd + Ag Bg .
Potrebno je jox pronai naqin da se doe trougaone matrice "pretvaraju" u gore trougaone i obrnuto. Ci se postie pomou specijalne permutacione matrice P , koja ima jedinice samo na sporednoj dijagonali, a ostali elementi su joj nule. Mnoeem sleva matricom P proizvo ne matrice C sa vrstama redom c , c , ..., c , dobija se matrica C sa vrstama redom c , c , ..., c , pa je C gora trougaona akko je C doa trougaona, i obrnuto. Ako je E jediniqna matrica reda n, onda je oqigledno P = E, odnosno P = P . Matrica P je jediniqna matrica. Drugo sredstvo je za postizae istog ci a je operacija transponovaa, koja takoe dou trougaonu matricu prevodi u goru trougaonu i obrnuto. Pomou ovih dveju operacija sloenosti O(n ) sva qetiri gora proizvoda trougaonih matrica svode se na izraqunavae proizvoda doe i gore trougaone matrice: • A B = (P ((P B )A )) (dva permutovaa vrsta i tri transponovaa), • A B (proizvod e enog oblika), • A B = (B A ) (tri transponovaa), • A B = P ((P A )B ) (dva permutovaa vrsta). Do ovih izraza se lako dolazi posle malo eksperimentisaa. 10.13. Sliqno kao u rexeu zadatka 10.12, koristi se permutaciona matrica P reda n takva da je eno mnoee matrice sleva ekvivalentno zameni prve i poslede vrste, druge i pretposlede vrste, itd, pa dou trugaonu matricu pretvara u goru trougaonu i obrnuto. Matrice A i B koje treba pomnoiti razlau se u zbirove jedne doe i jedne gore trougaone matrice, A = A + A , B = B + B , a onda se proizvod AB = A B + A B + A B + A B izraqunava tako xto se sva qetiri proizvoda sa desne strane svedu na mnoee dve truogaone matrice, i neke dopunske operacije sloenosti O(n ): • A B = P ((P A )B ) (dva permutovaa vrsta), • A B = (B A ) (dva transponovaa), • A B = P (B (P A ) ) (dva permutovaa vrsta i tri transponovaa). 10.14. Pokazaemo kako se navedeni algoritam za nalaee MCST moe iskoristiti za sortirae. Neka je dat niz x , x , . . . , x razliqitih brojeva koje treba sortirati. Svakom broju x pridruujemo taqku P na x-osi sa x-koordinatom x . Lako je videti da MCST u ovom sluqaju mora da povezuje svaku taqku sa enim susedima na pravoj, odnosno stablo je put | niz taqaka bez granaa. Stablo ima dva lista | minimalni i maksimalni elemenat niza. Znajui minimalno povezujue stablo, lako dolazimo do ureea brojeva za linearno vreme: pronalazimo najleviju taqku, npr. x , a zatim niz taqaka odreen stablom daje ureeni niz brojeva. Time je dokazano da je doa granica za problem nalaea MCST po modelu stabla odluqivaa (po tom modelu je dokazana doa granica za problem sortiraa) jednaka Ω(n log n). 10.15. Potrebno je nai takvo preslikavae brojeva iz A ∪ B u skup S taqaka u ravni, da se odgovor na pitae o disjunktnosti skupova A i B dobija nalaeem dijametra S. Neka svi brojevi iz A i B pripadaju intervalu (m, M ) (brojevi m i M odreuju se pomou O(n) uporeivaa). Svaki broj z ∈ A ∪ B preslikava se u taqku D = φ(z) na jediniqnoj krunici sa centrom u koordinatnom poqetku O, tako da poluprava OD sa x-osom gradi ugao π(z −m)/(M −m), ako je z ∈ A, odnosno π +π(z −m)/(M −m), ako je z ∈ B . Sve dobijene taqke pripadaju krunici preqnika 2, pa je dijametar dobijenog skupa taqaka mai ili jednak od 2. Preciznije, dijametar je jednak 2 akko u skupu postoje dve dijametralno suprotne taqke, odnosno akko postoje dva broja z ∈ A i z ∈ B takva da je π + π(z − m)/(M − m) = π(z − m)/(M − m) + π , tj. z = z . Dakle, preslikavaem ≤ n taqaka iz A ∪ B i rexavaem problema DM za dobijene taqke, dobija se rexee problema DS. n
n−1
1
0
1
n
2
0
0
2
−1
2
2
d
d
d
g
g
d
g
g
T d
T d
T d
T
T T g g
g
g
d
g
d
g
g
d
g
d
g
g
d
g
d
g
d
g
T g
2
T g
g d T T g d
T T
1
i
n
2
i
i
i
1
1
1
2
2
2
d
13.11. NP-KOMPLETNOST
377
13.11. NP-kompletnost
11.1. Neka su B i C dva netrivijalna problema iz P (tj. za oba postoje ulazi sa odgovorom "da" i ulazi sa odgovorom "ne"). Neka su u i u dva ulaza za problem C , takva da je za u rexee "ne", a za u "da" (odnosno u ∈/ L i u ∈ L ). Za svoee problema B na problem C moe se iskoristiti sledei polinomijalni algoritam: ulazu v za problem B pridruuje se φ(v) = u ako v ∈/ L , odnosno φ(v) = u ako v ∈ L . Tada za proizvo an ulaz v za problem B vai v ∈ L akko φ(v) ∈ L . 11.2. Funkcija n je polinom po n, ali eksponencijalno zavisi od k. Poxto je k deo postavke problema (i moe da dostigne n), vremenska sloenost ovog algoritma nije polinomijalna. 11.3. Traeni 3 SAT izraz je 0
0
1
0
0
k
1
1
C
C
1
B
B
B
C
(x + y + a1 )(¯ a1 + a2 + z¯)(¯ a2 + a3 + w)(¯ a3 + u + v¯) (¯ x + y¯ + a4 )(¯ a4 + a5 + z)(¯ a5 + a6 + w)(¯ ¯ a6 + u + v) (x + y¯ + a7 )(¯ a7 + a8 + z¯)(¯ a8 + a9 + w)(¯ a9 + u + v¯) (x + y¯ + a10 )(x + y¯ + a ¯10 ).
11.4. Dokaz se zasniva na redukciji sa obiqnog problema pokrivaq grana. Neka je proizvo ni neusmereni graf, i neka je skup qvorova neparnog stepena u
. Dodavaem tri nova qvora x, y, i z, meusobno povezana u trougao, i povezujui x sa svim qvorovima iz U , dobijamo novi graf G , qiji svi qvorovi imaju paran stepen. Graf G ima pokrivaq grana veliqine k akko G ima pokrivaq grana veliqine k − 2. Zaista, od proizvo nog pokrivaqa G veliqine k − 2 se dodavaem qvorova x i y dobija pokrivaq grana grafa G veliqine k. Obrnuto, ako u G postoji pokrivaq grana veliqine k, onda taj pokrivaq mora da sadri bar dva od tri qvora x, y i z; tada je i skup od k qvorova koji se dobija zamenom ta dva qvora sa x, y takoe pokrivaq grana G ; poxto x, y ne pokrivaju ni jednu granu iz G, ihovim uklaaem iz skupa dobija se pokrivaq grana grafa G veliqine k − 2. 11.5. Problem je u klasi NP, jer se za svaki od najvixe ¡ ¢ izbora dva podskupa od k qvorova, polinomijalnim algoritmom proverava da li je prvi podskup klika, a drugi { nezavisan skup. S druge strane, problem klika, za koji se zna da je NP-kompletan, svodi se na ovaj problem. Zaista, za dati graf G = (V, E) i prirodni broj k (proizvo ni ulaz za problem klika), formira se graf G = (V , E) sa skupom qvorova V koji se od V dobija dodavaem k izolovanih qvorova. Rexavaem problema nalaea k-klike i k-nezavisnog skupa za par G , k, pronalazi se klika veliqine k u G , koja je istovremeno i klika veliqine k u G (jer klika ne moe da sadri ni jedan od dodatih izolovanih qvorova). Time je dokazana NP-kompletnost problema iz formulacije zadatka. 11.6. Problem je u klasi NP, jer se za izabrani podskup od k qvorova, za polinomijalno vreme moe proveriti da li je indukovani graf acikliqki. Na ovaj problem moe se svesti problem 3 SAT. Neka je E = C C . . . C proizvo ni ulaz za 3 SAT. Polazei od E , konstruixemo graf G sa 4n + 1 qvorova na sledei naqin. Za svaku klauzu C dodajemo qetiri qvora | jedan koji odgovara klauzi i tri koji odgovaraju enim literalima. Ta qetiri qvora povezana su sa svih xest grana. Pored toga, svaka dva qvora koji odgovaraju nekoj promen ivoj x i enom komplementu x¯ povezuju se granom. Na kraju dodajemo jox jedan qvor r i povezujemo ga sa svim qvorovima pridruenim literalima (ne klauzama). Tvrdimo da graf G ima podskup od 2n + 1 qvorova koji indukuje acikliqki graf akko je izraz E zadovo iv. • Ako je izraz zadovo iv, onda postoji pridruivae vrednosti promen ivim takvo da je u svakoj klauzi taqan bar jedan literal. Podskup koji se sastoji od qvora r, n qvorova koji odgovaraju klauzama i n qvorova (po jedan iz grupe svake klauze) koji odgovaraju taqnim literalima, indukuje acikliqki graf (preciznije, stablo u kome je koren r povezan sa qvorovima taqnih literala, a qvorovi klauza G = (V, E) G
U
0
0
0
0
0
n 2 k
0
0
0
0
0
1
2
n
i
378
13. UPUTSTVA I REXE A ZADATAKA
su listovi; po konstrukciji izmeu qvorova taqnih literala ne postoji ni jedna grana). • Ako postoji podskup S od 2n + 1 qvorova, koji indukuje acikliqki graf, onda S sadri r i po taqno dva qvora iz svake klauze (ako bi iz neke klauze sadrao tri qvora, onda bi sadrao trougao, jer su svi qvorovi u grupi jedne klauze meusobno povezani). Poxto S sadri r, onda S ne moe da sadri istovremeno dva qvora koji pripadaju nekoj promen ivoj x i enom komplementu x¯. Prema tome, S odreuje takvo pridruivae vrednosti promen ivima, koje izraz E qini taqnim. 11.7. Zgodno je uopxtiti pretpostavke o izrazu E: neka se u emu svaka promen iva x i en komplement x ¯ , i = 1, 2, . . . , n, pojav uju najvixe po jednom. Ukupan broj literala u E je zbog toga najvixe 2n. U zavisnosti od toga da li se i gde pojav uju x i x¯ , izraz E moe se napisati u jednom od sledeih oblika: x + B)E (ako se x i x ¯ pojav uju u razliqitim klauzama); • (x + A)(¯ • (x + A)E (ako se samo x pojav uje u nekoj klauzi); • (¯ x + B)E (ako se samo x ¯ pojav uje u nekoj klauzi). Ovde su A, B ostaci klauza u kojima se pojav uju x , odnosno x¯ , a E je ostatak izraza E, u kome se ne pojav uju ni x ni x¯ . Izrazi (x + A)E , odnosno (¯x + B)E su zadovo ivi akko je zadovo iv izraz E . Sliqno, izraz (x + A)(¯x + B)E je zadovo iv akko je zadovo iv izraz CE , gde je C klauza koja se od A + B dobija izbacivaem ponov enih literala, odnosno 1, ako se u A + B pojav uje i neka promen iva y i ena negacija y¯. U sva tri sluqaja dobijeni izraz (E , E , CE ) zavisi samo od promen ivih x , x , . . . , x , i svaki literal se u preostalom izrazu pojav uje najvixe jednom. Dakle, ovim postupkom se (za polinomijalno vreme) eliminixe iz izraza jedna promen iva, pa je odgovarajui algoritam polinomijalne sloenosti. 11.8. Iskoristiemo redukciju sa problema 3 SAT. Neka je C = x + y + z neka klauza u proizvo nom 3 SAT izrazu. Ovu klauzu zameujemo sa sledee tri (pri qemu su svi simboli a nove promen ive, koje se uvode samo za klauzu C ): (x + a + a ), (y + a + a ), (z + a + a ). U razmatranoj varijanti problema 3 SAT u ovim klauzama treba da vrednost 1 ima po taqno jedna promen iva. Da bi se obezbedilo da vrednost 1 ima bar jedan od literala x, y, z, dodajemo jox xest klauza, koje garantuju da od promen ivih a , a , a , odnosno a , a , a , vrednost 1 ima najvixe jedna: (a + a + a ), (a + a + a ), (a + a + a ), (a + a + a ), (a + a + a ), (a + a + a ). Sada se moe pokazati da je bar jedan od literala x, y , z taqan akko se novim promen ivim a , a , . . . , a mogu dodeliti takve vrednosti, da u svakoj novoj klauzi taqno jedan literal ima vrednost 1. • Ako je bar jedan od literala x, y , z taqan, onda se mogu razlikovati tri sluqaja, kad je broj taqnih meu ima 1, 2 i 3. U sva tri sluqaja se mogu vrednosti novih promen ivih izabrati tako da u svakoj novoj klauzi taqno jedan literal ima vrednost 1. (videti tabelu 2; ona zbog simetrije obuhvata sve mogue sluqajeve). • Pretpostavimo da u svakoj novoj klauzi taqno jedan literal ima vrednost 1, i da je x = y = z = 0. Tada u grupama (a , a ), (a , a ), (a , a ) taqno po jedna promen iva ima vrednost 1, a u grupama (a , a , a ) i (a , a , a ), najvixe po jedna promen iva ima vrednost 1 (zbog druge, odnosno tree grupe dodatih klauza). Ako je na primer a = 1, onda je a = 0; a = a = 0; a = a = 1 { kontradikcija. Sluqaj a = 0, a = 1 je simetriqan. Prema tome, ako u svakoj od devet novih klauza taqno jedan literal ima vrednost 1, onda je bar jedan od literala x, y, z taqan. 11.9. Svexemo problem klika na ovaj problem. Neka je G = (V, E), k, proizvo an ulaz za problem klika. Ci je transformisati graf G u regularan graf R, takav da se problem klika na G moe rexiti rexavaem problema klika na regularnom grafu R. Jasno je da se ne mogu prosto dodavati grane u G dok ne postane regularan, jer se tako mogu pojaviti nove, vee klike. Grafu G moraju se dodavati novi qvorovi i grane, tako da se ne formiraju nove klike. Neka je d maksimalni stepen nekog qvora u G, i neka je d = d ako je d parno, i
i
n
n
0
n 0
n
n
n
n
0
n
n
n
0
n
n 0
n
n
0
0
0
0
n
n
0
n
0
0
1
i
1
2
6
11
6
2
3
7
5
8
5
n−1
3
1
4
5
5
2
2
9
2
4
4
1
2
3
5
2
3
3
5
4
2
4
5
4
6
6
6
1
2
0
0
6
10
12
1
0
6
12
1
1
3
2
3
1
1
4
n
13.11. NP-KOMPLETNOST x 1 1 1
y 0 1 1
z 0 0 1
a1 0 0 0
a2 0 0 0
a3 1 0 0
a4 0 0 0
a5 0 1 0
a6 1 0 0
a7 0 1 1
a8 0 0 1
379 a9 1 0 1
Tablica 2. Uz zadatak 11.8.
a10 1 1 1
a11 0 1 1
a12 0 1 1
odnosno d = d + 1 u protivnom. Za svaki qvor v u G stepena d(v) < d dodajemo d − d(v) novih qvorova i svePih granom povezujemo sa v. Ako je |V | = n, onda je ukupan broj novododatih qvorova dn − d(v ) = dn − 2|E|. Ovaj broj je paran, jer je d po konstrukciji parno. Svi stari qvorovi u novom grafu imaju sada isti stepen d, a nove klike se nisu pojavile (jer je svaki novi qvor povezan samo sa jednim qvorom). Ostaje jox problem novih qvorova, jer oni imaju stepen 1. ihovi stepeni mogu se poveati na d, ne dodajui nove klike, povezujui ih granama na sledei naqin. Skup novih qvorova podelimo na dva jednaka podskupa, a onda svaki qvor iz jednog podskupa povezujemo sa taqno d − 1 qvorova iz drugog podskupa (pri tome samo treba voditi raquna o tome da stepeni novih qvorova iz drugog skupa ne preu d, xto nije texko). Novi qvorovi sada indukuju bipartitni graf, koji ne sadri kliku veu od dva. 11.10. Za svako mogue razlagae skupa n = |V | qvorova na k podskupova (kojih ima mae od n!¡ ¢), za polinomijalno vreme se moe proveriti da li je to razlagae na nezavisne skupove. S druge strane, na ovaj problem moe se svesti problem k-obojivosti grafa. Proizvo an algoritam koji rexava postav eni problem moe se iskoristiti za kbojee grafa G: qvorovi koji odgovaraju istovremeno obav enim poslovima qine nezavisan skup (izmeu ih nema grana), pa se mogu obojiti jednom istom bojom. Problem k-obojivosti grafa je NP-kompletan, jer je u klasi NP, a na ega se svodi (kao specijalni sluqaj) problem 3-obojivostgrafa. 11.11. Posmatrajmo familiju grafova prikazanu na slici 14. Algoritam bojea pretragom (slika 11.12) mora da proveri redom svih 3 · 2 ispravnih bojea podgrafa koji qine qvorovi 1, 2, . . . , n − 3. Svaki taj pokuxaj zavrxava se neuspehom kad se doe do qvora n, koji ima tri susedna qvora n − 1, n − 2 i n − 3 obojena razliqitim bojama. Zapaa se da je u ovom algoritmu bitna numeracija qvorova: ako bi qvorovi n, n − 1, n − 2, n − 3 bili prenumerisani redom sa 1, 2, 3, 4, onda bi se posle O(1) koraka ustanovilo da ne postoji 3-bojee ovog grafa. 0
n i=1
i
n−1 k−1
n−4
n−2
f n−4
f
f
f
1
2
3
···
f
f
f
n−3
n
f n−1
Ris. 14. Ilustracija uz zadatak 11.11.
380
13. UPUTSTVA I REXE A ZADATAKA
13.12. Paralelni algoritmi
12.1. U svakom koraku treba sabirati po dva broja (broj bita zbira je O(n + log k), pa je broj koraka za svako sabirae O(log(n + log k)). U prvoj fazi se k brojeva dele na parove i izraqunava se zbir svakog para, xto se paralelnim algoritmom (ode ak 12.3.1) na kn/2 procesora izvrxava za O(log n) koraka. Da e se na isti naqin nastav a sa dobijenim zbirovima; broj zbirova posle svake faze postaje dvostruko mai, pa je ukupan broj faza O(log k). Sloenost algoritma je dakle O(log n log k), ako se zanemari da meurezultati imaju vixe od n bita (taqnija ocena je O(log(n + log k) log k)). 12.2. Dovo no je da svaki procesor P izraqunava svoju sopstvenu kopiju D[i] promen ive D. Dakle, inicijalizacija je paralelni korak D[i] := 1, a ostala pojav ivaa D zameuju se sa D[i]. Drugih konflikata pri pristupau memoriji nema: samo procesor P qita R[N [i]] (rang svog suseda) i eventualno poziciju egovog suseda N [N [i]]; procesori qijim se elementima pronae rang, isk uquju se i ne izazivaju konflikte. 12.3. Ako u prvom koraku neki procesor naie na dva jednaka broja, onda on upisuje jedinicu u promen ivu pridruenu broju sa maim indeksom. Sloenost algoritma je i da e O(1). 12.4. (a) Koristi se metod udvostruqavaa. U prvom koraku procesor P kopira A[1] u A[2]. Induktivna hipoteza: pre poqetka i-tog koraka A[1] je iskopirano na pozicije od 1 do 2 (xto je za i = 2 taqno). U koraku i uqestvuje 2 procesora, koji u jednom paralelnom koraku kopiraju elemente A[1], A[2], . . . , A[2 ] u elemente A[2 + 1], A[2 + 2], ..., A[2 ]. (b) Da bi se popravila efikasnost algoritma, koristi se Brentova lema. Preciznije, neka je n = 2 , neka je na raspolagau bn/ log nc = b2 /kc procesora, i neka je i takav broj da je 2 < 2 /k < 2 . Tada se u i − 1 koraka A[1] kopira na lokacije od 1 do 2 opisanim algoritmom. Zatim se pomou 2 < 2 /k procesora svaki od 2 tih elemenata paralelno kopira 2 /2 − 1 put (elemenat sa lokacije j, 0 ≤ j < 2 procesor P kopira redom na lokacije j + m · 2 , m = 1, 2, . . . , 2 /2 − 1); pri tome je i − 1 < k = log n i 2 /2 −1 = 2·2 − 1 < 2k − 1 < 2 log n, pa je ukupno vreme izvrxavaa mae od 3 log n, odnosno O(log n). 12.5. Ovaj problem svodi se na problem paralelnog prefiksa za operaciju +, pri qemu su poqetne vrednosti A[i] = 1 za 2 ≤ i ≤ n (ova inicijalizacija izvrxava se u jednom paralelnom koraku | konstantu 1 moe generixe nezavisno svaki procesor).P 12.6. Sa n+1 procesora P ,P , ...,P na raspolagau, vrednost polinoma a x stepena n moe se izraqunati paralelno za O(log n) koraka na sledei naqin. Najpre se svakom procesoru obezbedi kopija argumenta x (npr. algoritmom paralelni prefiks sloenosti O(log n), pri qemu je operacija sabirae, poqetno stae procesora P je x, a ostalih 0). Zatim se jox jednom izvrxi paralelni prefiks za mnoee, qime se postie da procesor P ima izraqunatu vrednost x , 0 ≤ i ≤ n. U narednom paralelnom koraku P izraqunava proizvod a x , 0 ≤ i ≤ n. Na kraju se ovi proizvodi sabiraju treom primenom paralelnog prefiksa | posle toga se u procesoru P nalazi izraqunata vrednost polinoma. Efikasnost ovog algoritma je O(1/ log n), a i ne koristi se Hornerova xema. Efikasnost se moe popraviti primenom Brentove leme tako sa se koristi samo k = n/ log n procesora. Polinom se predstav a u obliku polinoma stepena k od x , l = n/k, qiji su koeficijenti "mali" polinomi stepena l − 1, qije vrednosti pojedini procesori izraqunavaju sekvencijalno Hornerovom xemom za vreme O(l) = O(log n). Vrednost "velikog" polinoma stepena k = n/ log n izraqunava se na ve opisani naqin na k procesora za vreme O(log k) = O(log n). Efikasnost konstruisanog algoritma je O(n/((n/ log n) log n)) = O(1). 12.7. Problem se rexava sliqno kao problem nalaea maksimuma. Promen ivim z, v , v , . . . , v na poqetku se dode uje vrednost 0. Procesor P uporeuje x i x , pa ako su razliqiti, upisuje 1 u z, 1 ≤ i < j ≤ n. Posle ovog paralelnog koraka z e imati vrednost 1 akko za bar neko i vai x = 1, i za bar neko j vai x = 0; tada je vrednost disjunkcije 1. U protivnom, ako je z = 0, onda P kopira x u z (tada je x = x = · · · = x = z ). i
i
1
i−1
i−1
i−1
i−1
k
i−1
k
i−1
k
i−1
i−1
k
i−1
i−1
i−1
k−i
k
i
k
2
i
i−1
k
k−i
j
i−1
2
2
0
2
n i=0
n
1
0
i
i
i
i
i
n
l
1
2
n
ij
i
i
j
j
1
1
1
2
n
i
i
13.12. PARALELNI ALGORITMI
381
12.8. Slika traenog kola za prikazana je na slici 15. Za kolo se sastoji od grupa po procesora , , ..., , . Procesor u grupi za preuzima ve izraqunatu vrednost -tog prefiksa od procesora ; k j 0 ≤ i < 2j 2j ≤ i < n
n = 8 P0j P1j
n
n = 2k
Pn−1,j j = 0, 1, . . . , k − 1 Pij i Pi,j−1 xi xi−2j Pi,j−1 Pi−2j ,j−1 xi xi Pij xi−2j +1 ? xi−2j +2 ? . . . ? xi 2j ≤ i < n xi
za procesor P , uzimajui rezultate , od procesora , , izraqunava proizvod x ? x , i rezultat smexta u (svoju) promen ivu . Indukcijom po j = 0, 1, . . . , k − 1 dokazuje se da promen iva posle prolaska kroz procesor sadri vrednost x ? x ? . . . ? x ako je i < 2 , odnosno , ako je . Za j = k − 1 odatle se dobija da promen iva posle izlaska iz kola sadri vrednost odgovarajueg prefiksa. ij
i
0
1
i−2j
j
i
i\j x0 s
0
1
2
x1 c
s
c
c x1
x2 c
c
s
c x2
x3 c
c
s
c x3
x4 c
c
c
s x4
x5 c
c
c
s x5
x6 c
c
c
s x6
x7 c
c
c
s x7
c
c x0
c
Ris. 15. Ilustracija uz zadatak 12.8.
12.9. Poxto je na raspolagau dovo an broj procesora, a dozvo eno je istovremeno qitae sa iste lokacije, moe se najpre½formirati matrica A sa elementima aij =
1, 0,
xi < xj xi > xj
,
za xta je potrebno O(1) paralelnih koraka. Rang i elementa x (pozicija x u sortiranom redosledu) jednak je broju elemenata x maih od x uveanom za jedan, odnosno s + 1, gde je s zbir elemenata r-te vrste matrice A. Pomou n procesora zbirovi vrsta u A mogu se paralelno izraqunati za O(log n) koraka (posebnim turnirom za svaku vrstu). Zatim se u jednom paralelnom koraku x kopira na poziciju i izlaznog vektora, 1 ≤ r ≤ n.. 12.10. Svakom paru elemenata A[i], B[j], 1 ≤ i < j ≤ n, dode uje se po jedan procesor P . Procesor P najpre uporeuje A[i] sa B[j], a onda A[i] sa B[j + 1]. Ako je A[i] izmeu B[k] i B[k + 1], onda procesor P to otkriva i zak uquje da u izlaznom vektoru elemenat A[i] treba da bude na poziciji i + k. Na isti naqin utvruju se pozicije elemenata vektora B. Sva kopiraa ulaznih elemenata u izlazni vektor izvode se u jednom paralelnom koraku. 12.11. Posao se moe podeliti u dva dela. Prvi deo je "proxirivae" vektora A, B u vektore{matrice A , B duine nm, A [km + r] = A[k], B [km + r] = B[r] (ovo je neophodno da bi se izbeglo istovremeno qitae istog elementa vektora od strane vixe procesora). Drugi deo je paralelno mnoee C[i] = A [i]B [i], 0 ≤ i ≤ nm − 1. Proxirivae se sa p paralelnih procesora moe izvrxiti za O(log p) koraka u okviru jedne od mn/p grupa po p elemenata, pa je trajae prve faze O(mn log p/p) (pretpostav a se da je p ≤ mn). Mnoee se izvrxava za O(mn/p paralelnih koraka (obrada svake od mn/p grupa izvrxava se za jedan paralelni korak). r
r
r
ij
r
r
j
r
2
r
ij
ik
0
0
0
0
0
0
r
382
13. UPUTSTVA I REXE A ZADATAKA
12.12. Problem se moe rexiti elegantno svoeem na problem paralelnog prefiksa (iako ga je mogue rexiti i direktno). Najpre se paralelno izraqunaju prefiksi na kopiji vektora Oznaka, sa operacijom +. Vrednost prefiksa za svaki slog kome Oznaka ima vrednost 1 bie jednaka egovoj poziciji u prepakovanom vektoru. Zatim se vrednosti vektora Oznaka mogu komplementirati (0 → 1, 1 → 0), i na isti naqin izraqunati pozicije preostalih slogova (onih za koje je Oznaka imala vrednost 0). Kad su svi indeksi izraqunati, onda se stvarno kopirae izvrxava u jednom paralelnom koraku, jer nema konflikata. 12.13. Neka je N [i] adresa (i + 1)-og elementa liste, odnosno pokazivaq pridruen i-tom elementu, 1 ≤ i ≤ n. U prvom paralelnom koraku (ako je N [i] 6= 0) procesor P proverava F [N [i]]: ako je 0, onda se "premoxuje" (i + 1)-ti elemenat pomou N [i] := N [N [i]], a pomou N [N [i]] := 0 signalizira procesoru P , da od sledeeg koraka prestane sa radom, jer je egov elemenat isk uqen iz liste. Time je prepolov ena duina svakog niza uzastopnih elemenata liste sa vrednoxu F [i] jednakom 0. Nastav ajui da e na isti naqin, posle O(log n) koraka postie se da za svako i, takvo da je F [i] = 1, N [i] pokazuje na sledei neobrisani elemenat liste (tj. F [N [i]] = 1). Na kraju se, ako je F [1] = 0, pokazivaq na poqetak liste preusmerava na N [1]. 12.14. Ako se svakom slogu pridrui procesor, onda u jednom paralelnom koraku svaki procesor upisuje indeks (adresu) svog sloga u odgovarajue po e sledeeg sloga u listi. Posle toga svaki procesor zna svog prethodnika u listi. 12.15. Koristiemo indukciju. Ako je visina stabla (broj slojeva procesora) 2, onda levi list xa e svoj broj korenu, koji ga zatim xa e nanie desnom listu, a koji ga dodaje svom broju x . Pretpostavimo da imamo algoritam za visinu h ≥ 2, i razmotrimo stablo visine h + 1 (razmatramo samo sluqaj kompletnih binarnih stabala; algoritam se lako preprav a da radi u opxtem sluqaju). Neka je R koren, i neka su R i R egov levi i desni sin. Sumu svih listova podstabla zvaemo sumom tog podstabla. Najjednostavnije je rexiti problem nezavisno za levo i desno podstablo, a zatim preko korena poslati sumu levog podstabla svim listovima u desnom podstablu. Svaki list desnog podstabla prosto dodaje sumu levog podstabla izraqunatom prefiksu. Problem sa ovim rexeem je u tome, xto mu je vreme izvrxavaa O(h ), zbog diferencne jednaqine T (h + 1) = T (h) + h (ako je T (h) vreme izvrxavaa na stablu visine h). Ovo rexee moe se popraviti, ako zapazimo da nema potrebe qekati da levo stablo zavrxi izraqunavae. Desno podstablo treba da dobije sumu levog podstabla, a ta suma moe biti raspoloiva u korenu u koraku h + 1. Prema tome, zahtev koji R treba da ispuni je da primi sumu svog podstabla i poxa e je navixe ka korenu. Zahtev za R je da tu sumu primi od korena i poxa e je nanie svojim potomcima. Zak uqujemo da treba da vae sledea pravila: • svaki list poqie slaem svog broja navixe (treba dakle promeniti prosto rexee za stablo visine 2, jer koren treba da zna sumu); • unutraxi qvor, kad dobije vrednosti od sinova, sabira ih i xa e navixe; • unutraxi qvor, kad dobije vrednost od oca, xa e tu vrednost i levom i desnom sinu; • unutraxi qvorovi takoe igraju ulogu korena svojih podstabala, i vrednost dobijenu od levog sina xa u desnom sinu. Prepuxtamo qitaocu dokaz da je ovaj algoritam korektan, i da mu je vreme izvrxavaa 2h. 12.16. Jedna iteracija procesa selekcije, kao i u osnovnoj verziji, sastoji se od qetiri faze, tj. qetiri prolaska stabla (gore,dole,gore,dole). U prvoj fazi se bira pivot, koji dospeva u koren stabla. U drugoj fazi se pivot dostav a nanie svim (aktivnim) listovima, isto kao i u osnovnoj verziji. U treoj fazi svaki list uporeuje svoj broj sa pivotom i xa e navixe rezultat poreea, ali ovog puta precizniji | da li je vei od pivota, odnosno da li je jednak pivotu. Na putu do korena stabla se tako dobija broj v listova veih od pivota i broj j listova jednakih pivotu. U qetvrtoj fazi se ova dva broja dostav aju svim aktivnim listovima. Tada svaki aktivni list uporeuje k sa v i v + j, pa ako je i
N [i]
2
L
2
L
D
D
13.12. PARALELNI ALGORITMI
383
, onda se list isk uquje, ako je egov broj mai ili jednak od pivota, a meu neisk uqenim listovima u narednoj iteraciji trai se k-ti najvei, • v < k ≤ v + j , onda se list isk uquje, ako je egov broj mai ili vei od pivota, a meu neisk uqenim listovima u narednoj iteraciji trai se (k − v)-ti najvei, • k > v + j , onda se list isk uquje, ako je egov broj vei ili jednak od pivota, a meu neisk uqenim listovima u narednoj iteraciji trai se (k − v − j)-ti najvei. 12.17. U prvom koraku procesor P izraqunava proizvod a b i quva rezultat; zatim xa e b procesoru P , 1 ≤ i ≤ n. Uopxte, u koraku k, 1 ≤ k ≤ n, procesor P izraqunava proizvod a b i dodaje ga prethodno izraqunatom zbiru, a zatim xa e b procesoru P , a od procesora P prima b (svi indeksi raqunaju se po modulu n). Posle n-tog koraka procesor P sadri e enu sumu x = P a b , 0 ≤ i ≤ n − 1. 12.18. Poxto se b mnoi sa elementima i-te kolone matrice, procesor P moe da izraquna za n koraka sve proizvode a b , 0 ≤ j < n. Ostaje da se u narednih n koraka paralelno izraqunaju zbirovi vrsta matrice. Pretpostavimo najpre da treba izraqunati samo x . Procesor P izraqunava a b , xto je egov doprinos vrednosti x , i xa e to procesoru P ; procesor P toj vrednosti dodaje a b i prosleuje to procesoru P , itd. Posle n − 1 koraka P dobija od P vrednost x − a b , pa je u stau da zavrxi izraqunavae. Da bi se istovremeno izraqunavali svi x , potrebno je obezbediti preklapae izraqunavaa (u toku opisanog izraqunavaa x u svakom koraku je aktivan samo jedan procesor!). U prvom koraku svaki procesor P izraqunava proizvod a b (indeksi sePraqunaju po modulu n), i xa e ga procesoru P . U koraku j procesor P prima vrednost a b , dodaje joj a b , i xa e je procesoru P . 12.19. Dovo no je rexiti problem za procesore • k ≤ v
i
i
ii i
i−1
i
i,i+k−1 i+k−1
i+k−1
i−1
i+1
i+k
i
i
n−1 k=0
ik k
i
i
ji i
0
0
02 2
3
0
1
2
01 1
2
0
n−1
00 0
i
0
i
i−1,i i
i
j−2 k=0
i+1
i−j+1,i−k−1 i−k−1
i−j,i i
i+1
P [n, i], P [n − 1, i], . . . , P [i + 1, i], P [i, i], P [i, i + 1], . . . , P [i, n − 1], P [i, n].
U ovom nizu od 2(n − i) + 1 procesora povezana su svaka dva susedna, a potrebno je da razmene svoje elemente j-ti procesori sa leve i desne strane od sredeg (P [i, i]), 1 ≤ j ≤ n − i. Ovaj posao moe se podeliti na dva simetriqna, koji se izvrxavaju jedan za drugim: najpre levi procesori xa u svoje elemente desnim, a onda (na isti naqin) | desni procesori levim. Pretpostav a se da svaki procesor ima dovo nu memoriju veliqine O(1) (koja ne zavisi od n). Da bi levi procesori poslali svoje elemente desnim, svi procesori u gore navedenom nizu u 2(n − i) paralelnih koraka elemenat, dobijen od levog suseda u prethodnom koraku, prosleuju desnom susedu. Usput, procesor P [i, i + j] trajno pamti ("zaustav a") elemenat dobijen u koraku 2j, 1 ≤ j ≤ n − i, jer je upravo to elemenat koji je krenuo (u "karavanu") iz procesora P [i + j, i]. 12.20. Za proizvo nu komponentu povezanosti posmatrajmo graf G qiji su qvorovi ene taqke, a grane povezuju svaka dva qvora koji odgovaraju susednim (horizontalno ili vertikalno) taqkama. Neka je v qvor G sa najmaom oznakom, i neka je ta oznaka k. Indukcijom se dokazuje da posle d koraka svaki qvor na rastojau od v maem ili jednakom od d, dobija oznaku k (u koraku d + 1 qvor na rastojau d + 1 od v , poxto je susedan nekom qvoru na rastojau d od v, dobija mau oznaku k). Prema tome, posle najvixe n koraka sve taqke komponente povezanosti dobie oznaku k. Nije texko konstruisati primer komponente povezanosti za koju oznaqavae traje bar cn koraka (za neku konstantu c): to je npr. "zmijasta" traka sastav ena od neparnih vrsta povezanih naizmeniqno levom, odnosno desnom crnom taqkom u parnim vrstama. Postupak se moe zaustaviti u trenutku kad se posle izvrxea nekog koraka zbir svih oznaka ne smai. Meutim, izraqunavae sume svih smaea oznaka moe se izvesti za 2n = O(n) paralelnih koraka. Jedno mogue rexee je zaustaviti postupak posle n iteracija; tada je proces oznaqavaa sigurno zavrxen. Takoe je mogue da se npr. posle svakih n iteracija proveri da li se od iteracije do iteracije promenila suma oznaka. Tada, 2
2
2
384
13. UPUTSTVA I REXE A ZADATAKA
ako su komponente povezanosti maeg dijametra, izvrxavae postupka moe da traje znatno krae. 12.21. Problem se moe rexiti direktno, ali je lakxe svesti ga na mnoee matrica. Najpre se koristi permutacija σ za formirae permutacione matrice S, takve da u koloni i jedino elemenat u vrsti σ(i) ima vrednost 1, a svi ostali elementi jednaki su nuli. Ova matrica se moe lako formirati, odnosno eni elementi se mogu distribuirati odgovarajuim procesorima za n koraka. Permutovae vrsta u skladu sa permutacijom σ ekvivalentno je izraqunavau proizvoda SA, za koji znamo da se na ovakvom raqunaru moe izraqunati za O(n) koraka. Permutovae kolona izvodi se na isti naqin mnoeem zdesna permutacionom matricom Q. 12.22. U prvom koraku se uporeuju elementi u 2 parova procesora (0, a , a , . . . , a ), (1, a , a , . . . , a ), a vei od ih smexta se u procesor (0, a , a , . . . , a ). Posle toga se procesori sa prvom koordinatom 1 isk uquju. Da e se nastav a na isti naqin sa 2 podataka i (n − 1)dimenzionalnom hiperkockom. Uopxte, u k-tom koraku se uporeuju elementi u procesorima (0, 0, . . . , 0, a ,...,a ), (0, 0, . . . , 1, a ,...,a ), a vei se smexta u procesor (0, 0, . . . , 0, a , . . . , a ). Posle n koraka se najvei elemenat nalazi u procesoru (0, 0, . . . , 0). Posle k-tog koraka rade samo procesori kod kojih je prvih k koordinata jednako nuli, 1 ≤ k ≤ n. 12.23. Indukcijom se problemu moe pristupiti tako da se paralelni prefiks rexava istovremeno u obe polovine hiperkocke (koje su (n−1)-dimenzionalne hiperkocke), a onda se najvei prefiks nie polovine distribuira (sa usputnim sabiraem) paralelno svim procesorima vixe polovine. Bazni sluqaj je trivijalan. Distribucija se u d-dimenzionalnoj hiperkocki moe izvesti u d paralelnih koraka, pa vreme izvrxavaa algoritma zadovoljava diferencnu jednaqinu T (d + 1) = T (d) + d, odnosno T (d) = O(d ). Algoritam se moe pobo xati pojaqavaem induktivne hipoteze. Pretpostavimo da svaki procesor izraqunava ne samo svoj prefiks, nego i sumu svih elemenata hiperkocke. Bazni sluqaj d = 1 je i da e jednostavan. Datu (d + 1)-dimenzionalnu hiperkocku delimo na dve d-dimenzionalne hiperkocke i indukcijom rexavamo problem na ima obema. Sada se, meutim, ne mora distribuirati suma nie polovine hiperkocke | tu sumu znaju svi eni elementi, pa je odgovarajuim elementima (susedima) u vixoj polovini hiperkocke mogu dostaviti u jednom paralelnom koraku. Svi prefiksi se mogu izraqunati u samo jednom dopunskom paralelnom koraku. U narednom paralelnom koraku se suma svih elemenata izraqunava istovremeno u svim procesorima vixe polovine hiperkocke, a onda paralelno xa e u sve susedne procesore u nioj hiperkocki. Nova diferencna jednaqina je prema tome T (d + 1) = T (d) + 2, odakle je T (d) = O(d). Pridruivae brojeva procesorima jasno je iz ovog opisa. 12.24. Potrebno je elemenat (i, j), 0 ≤ i < 2 , 0 ≤ j < 2 , preslikati u neki elemenat hiperkocke tako da mu susedi budu elementi (i ± 1, j) i (i, j ± 1) (prva koordinata se raquna po modulu 2 , a druga po modulu 2 ). Ovo se moe postii pomou Grejovih kodova a ,a ,...,a (reqi sa k bita, takvih da se a i a razlikuju na taqno jednoj bitskoj poziciji, videti ode ak 1.7), odnosno b , b , . . . , b (m-bitnih reqi sa analognom osobinom). Elemenat (i, j) smexta se u teme hiperkocke sa koordinatama (a , b ), pri qemu je a prvi blok od k koordinata, a b drugi blok od m koordinata temena. Time se postie da su slike susednih elemenata u mrei uvek susedne u hiperkocki. 12.25. Redosled komuiciraa moe se konstruisati indukcijom. Za k = 1 rexee je trivijalno. Ako se zna rexee za n = 2 osoba, onda se 2n = 2 osoba dele u dve grupe {1, 2, . . . , n} i {n + 1, n + 2, . . . , 2n}, u okviru kojih se po induktivnoj hipotezi za k koraka mogu razmeniti svi traqevi. Zatim u (k + 1)-om koraku razmeuju traqeve osoba i sa osobom i + n, 1 ≤ i ≤ n, posle qega svih 2n osoba znaju sve traqeve. n−1
1
2
n−1 1
k+1
1
2
2
n−1
n−1
n−1
n−1
n−1
k+1
n−1
k+1
2
k
k
0
1
m
m
i
2k −1
0
1
i+1
2m −1
i
j
k
k+1
j
i
Srpsko-engleski i englesko-srpski terminoloxki reqnik Srpsko-engleski reqnik
algoritam javnimnak uqem - public key- algorithm algoritam sazasnovan dekompoziciji divide-and-conquer algorithm alternirajui put - alternating path baza qvorova vertex basis bazen - pool binarno stablo pretrage - binary search tree bipartitni graf bipartite graph blokovska xifra - block cipher brat (dete istog oca) sibling ciklus - circuit qvor node, vertex datoteka - potpis file digitalni - digital signature dinamiqko programirae - dynamic programming direktna grana forward edge dobrotvorni problem - philantropist problem dolazna DFS numeracija - preorder DFS numbering dominirajui skup- reachable - dominating set dostian (qvor) drvo - treealgoritam - efficient algorithm efikasan efikasnost (paralelnog algoritma) - efficiency elektronska kodna kiga electronic codebook fajl - fileravnotee - balance factor faktor FIFO lista - FIFO list glava povezane liste - head of linked list edge grana grana - tree edge - branch-and-bound granaestabla sa odsecaem 385
386
SRPSKO-ENGLESKI I ENGLESKO-SRPSKI TERMINOLOXKI REQNIK
Grejov kod - put Gray code Hamiltonov - Hamiltonian path hex funkcija hash function heuristika - heuristic hip heap hipsort - heappodgraf sort indukovani - vertex-induced subgraph intervalni graf interval graph izlazna obrada - outdegree postWORK izlazni stepen izvor - source- public key javni k uq jednodimenzionalna pretraga opsega - one-dimensional range query klika - keyclique k uq kolizija - collision kolo circuit kompajler - povezanosti compiler komponente - connected components kopija rekurzivne procedure instance korak nazad - backtrack korensko stablo - rooted tree kraj grane head kritiqna teina - bottleneck weight quicksort kviksort lanqana xifra - -stream cipher lavinski efekat avalanche efect linearno popuavae - broadcast linear probbing linija za prostirae line list leaf lista -povezanosti queue lista - adjacency list lista sa prioritetom priority queue maksimalno uparivae- adjacency - maximalmatrix matching matrica povezanosti maxina sasauniformnim pristupom - -random access machine memorija ravnomernim pristupom random access memory minimalno povezujuememorijom stablo - minimum-cost spanning tree model sa zajedniqkom shared memory model mrea -raqunara network mrea - interconnection network najkrai put shorthest path najmai zajedniqki nadniz - smallest common supersequence
SRPSKO-ENGLESKI REQNIK
387
najvei zajedniqki podniz - largest common subsequence napadaq attaker neupareni qvor - unmatched vertex neusmereni (graf) undirected neusmereni oblik- independent (grafa) - setundirected form nezavisan skup nivo - level- traversing obilazak objediavae-razdvajae - merge-split odlazna DFS numeracija - postorder DFS numbering odravati - to maintain odvojeno nizae - separate chaining opadajui prvi odgovarajui - decreasing first fit optimalno uparivae maximum matching otac - parent otvoreni tekst - cleartext, plaintext pet a loop pivot - ipivot podeli smrvi - divide and crush podgraf subgraph pohlepni metod - greedy method pokazivaq pointer pokrivae skupova - set-cover pokrivaq grana vertex cover pokrivaq grana minimalne teine - minimum-weight vertex cover ponor - sinkgrana - cross edges popreqna poruka - -message potomak descendant povezana lista - -linked list povezani (graf) connected povezujua stablo xuma - -spanning forest povezujue spanning tree poveavajui put- backward - augmenting path povratna grana edge, back edge poqetak grane- sender - tail poxi alac prava oslonca - supporting line prazan pokazivaq nil prazan slog - dummy record ancestor predak preklapae - pipelining prepoznavaeizraqunavaa prostih brojeva - primality testing
388
SRPSKO-ENGLESKI I ENGLESKO-SRPSKI TERMINOLOXKI REQNIK
presek - cut - predecessor prethodnik pretraga -sabacktracking pretraga prioritetom - priority search pretraga u dubinu depth-first-search, DFS pretraga u xirinu - breadth-first-search, BFS prevodilac compiler priblian algoritam - approximation algorithm primalac receiver primer ulaza za problem - instance - parallelism folding principle princip imitiraa paralelizma problem pakovaa - bin packing problem problem pridruivaa assignment problem problem ranca - knapsack problem problem traqeva gossip problem problem trgovaqkog putnika - traveling salesman problem prosti ciklus simple circuit prosti put -grexaka simple path prostirae -- error extension prostorna sloenost space complexity prvi odgovarajui - first fit put path rang - rank grafika - computational geometry raqunarska red qekaa - queue record rekord retki graf -graf sparse graph rezidualni - residual graph rexiv problem tractable problem savrxeno uparivae - perfect matching simetriqan algoritam public key algorithm sin - child raqunae - systolic computation sistoliqko skinuti sa stekagrana - pop - feedback-edge set skup povratnih sledbenika - successor slek slack slobodno stablo - free tree slog record sloenostxifra izraqunavaa - computational complexity sluqajna one-time pad sortirae direktnim vixestrukim razvrstavaem - straight radix sort sortirae izborom - selection sort
SRPSKO-ENGLESKI REQNIK
389
sortirae objediavaem - mergesortrazvrstavaem - radix exchange sortirae obratnim vixestrukim sort sortirae parno-neparnim objediavaem - odd-even mergesort sortirae parno-neparnim transpozicijama - odd-even transposition sort sortirae razvrstavaem razdvajaem - quicksort sortirae - bucket sort sortirae u mestu in-place sorting sortirae umetaem - insertion sort sortirae vixestrukim razvrstavaem - radix sort stablo tree stablo najkraih puteva - shortest path tree stablo odluqivaa decision tree stek - stack stepen -- degree string string svi najkrai putevi - all-pairs shortest-paths xifra sa jednokratnim k uqem - one-time pad xifra zamene substitution cipher xifrat - ciphertext xifrovae - encryption xuma forest tajni k uq - secret linije key tehnika pokretne - line-sweep techique teina weight teinski graf - weighted graph tok flow topoloxko sortirae - -topological sort tranzitivno zatvoree transitive closure ubrzae - speedup ulanqavae blokova xifrata - cipher block chaining ulazna obrada preWORK ulazni stepenqvor- indegree unutraxi - internal node uparivae matching upisati na stekstablo - push- balanced tree uravnoteeno ureenohipabinarno stablo - binary search tree uslov heap property directed usmereni (graf) -algoritam uvijae poklona, - gift wrapping uzorak - pattern
390
SRPSKO-ENGLESKI I ENGLESKO-SRPSKI TERMINOLOXKI REQNIK
vektor -- array visina height vraae xifrata u xifrovae - cipher feeback vremenska sloenost time complexity vrea - pool - satisfiability zadovo ivost zamena "zavadi- paswapvladaj" algoritam - divide-and-conquer algorithm
Englesko-srpski reqnik
- lista povezanosti - matrica povezanosti svi najkrai putevi put - predak- alternirajui - priblian algoritam - vektor - problem - napadaq - poveavajuipridruivaa put lavinski efekat povratna grane -- korak nazad - pretraga povratna grana -- -uravnoteeno faktor ravnotee - pretraga u xirinu- problemstablo pakovaa binarno stablo pretrage, ureeno binarno stablo bipartite graph - bipartitni graf block cipher blokovska xifra bottleneck weight -- kritiqna teina branch-and-bound granae sa odsecaem breadth-first-search - pretraga u xirinu broadcast line linija za prostirae bucket sort - sortirae razvrstavaem child sin cipher block chaining - ulanqavae blokova xifrata cipher feeback vraae xifrata u xifrovae ciphertext - xifrat ciklus, kolo circuit cleartext - otvoreni tekst adjacency list adjacency matrix all-pairs shortest-paths alternating path ancestor approximation algorithm array assignment problem attaker augmenting path avalanche efect back edge backtrack backtracking backward edge balance factor balanced tree BFS bin packing problem binary search tree
ENGLESKO-SRPSKI REQNIK
391
- klika -- kolizija kompajler, prevodilac -raqunarska sloenost izraqunavaa grafika - povezani (graf) - komponente povezanosti popreqna grana - presek - stablo odluqivaa opadajui prvi odgovarajui - stepen -- pretraga u dubinu potomak - pretraga u dubinu potpis - usmereni-- digitalni (graf) podeli i smrvi - algoritam zasnovan na dekompoziciji, "zavadi pa vladaj" algoritam dobrotvorni problem - philantropist problem dominating set dominirajui skup dummy record - prazan-slog dynamic programming dinamiqko programirae edge grana (paralelnog algoritma) efficiency - efikasnost efficient algorithm efikasan algoritam electronic codebook - elektronska kodna kiga encryption xifrovae error extension - prostirae grexaka feedback-edge set skup povratnih grana FIFO list - FIFO lista file datoteka, fajl first fit - prvi odgovarajui flow tok forest - xuma - direktna grana forward edge free tree - slobodno stablo gift wrapping uvijae poklona, algoritam gossip problem - problem traqeva Gray code Grejov kod metod greedy method - pohlepni Hamiltonian path Hamiltonov put hash function - hex funkcija clique collision compiler computational complexity computational geometry connected connected components cross edges cut decision tree decreasing first fit degree depth-first-search descendant DFS digital signature directed divide and crush divide-and-conquer algorithm
392
SRPSKO-ENGLESKI I ENGLESKO-SRPSKI TERMINOLOXKI REQNIK
- kraj grane - glava povezane liste - hip - uslov hipa - hipsort - visina - heuristika sortirae u mestu - ulazni-- stepen nezavisan skup sortirae umetaem - primer ulaza za problem, kopija rekurzivne procedure interconnection network - mrea raqunara internal node unutraxi qvor interval graph - intervalni graf key k uq knapsack problem - problem ranca largest common subsequence - najvei zajedniqki podniz leaf list level - nivo line-sweep techique - tehnika pokretne linije linear probbing linearno popuavae linked list - povezana lista loop pet a matching - uparivae- maksimalno uparivae maximal matching maximum matching - optimalno uparivae merge-split objediavae-razdvajae mergesort - sortirae objediavaem message poruku minimum-cost spanning tree - -minimalno povezujue stablo minimum-weight vertex cover pokrivaq grana minimalne teine network - mrea nil prazan pokazivaq node - qvor odd-even mergesort - sortirae parno-neparnim objediavanjem odd-even transposition sort - sortirae parno-neparnim transpozicijama one-dimensional range query - jednodimenzionalna pretraga opsega sa jednokratnim k uqem, sluqajna xifra one-time pad - xifrastepen outdegree - izlazni head head of linked list heap heap property heap sort height heuristic in-place sorting indegree independent set insertion sort instance
ENGLESKO-SRPSKI REQNIK
ma
parallelism folding principle
393
- princip imitiraa paraleliz-
- otac - put - uzorak - savrxeno uparivae - preklapae izraqunavaa - pivot -pokazivaq otvoreni tekst bazen, vrea -- skinuti sa steka - odlazna DFS numeracija -- prethodnik izlazna obrada - dolazna DFS numeracija - ulazna- prepoznavae obrada prostih brojeva -- lista sa prioritetom sa prioritetom - javnipretraga k uq - simetriqan algoritam, algoritam sa javnim k uqem push - -upisati na stek queue red qekaa, lista kviksort quicksort - sortirae- razdvajaem, radix exchange sort sortirae obratnim vixestrukim razvrstavaem radix sort - sortirae vixestrukim razvrstavaem random access machine maxina sa uniformnim pristupom random access memory - memorija sa ravnomernim pristupom rank rang reachable -primalac dostian (qvor) receiver record - rekord,- slog residual graph rezidualni graf rooted tree korensko stablo satisfiability - zadovo ivost secret key tajni k uq selection sort - sortirae izborom sender poxi alac separate chaining - odvojeno nizae set-cover pokrivae skupova shared memory model - model sa zajedniqkom memorijom parent path pattern perfect matching pipelining pivot plaintext pointer pool pop postorder DFS numbering postWORK predecessor preorder DFS numbering preWORK primality testing priority queue priority search public key public key algorithm
394
SRPSKO-ENGLESKI I ENGLESKO-SRPSKI TERMINOLOXKI REQNIK
- stablo najkraih puteva najkrai put - brat (dete istog oca) prosti ciklus - prosti put
shortest path tree shorthest path sibling simple circuit simple path sink slack smallest common supersequence
niz
-- ponor slek
- najmai zajedniqki nad-
- izvor - prostorna sloenost -povezujue povezujua xuma -- retki stablo graf - ubrzae - stek - sortirae direktnim vixestrukim razvrstavaem stream cipher - lanqana xifra string string subgraph - podgraf - xifra zamene substitution cipher successor - sledbenika supporting line - prava oslonca swap zamena systolic computation - sistoliqko raqunae tail poqetak grane time complexity - vremenska sloenost to maintain odravati topological sort - topoloxko sortirae tractable problem rexiv problem transitive closure - tranzitivno zatvoree traveling salesman problem problem trgovaqkog putnika traversing - obilazak tree drvo, stablo tree edge - -grana stabla undirected neusmereni (graf) undirected form - neusmereni oblik (grafa) unmatched vertex neupareni qvor vertex - qvor- baza qvorova vertex basis vertex cover - pokrivaq grana vertex-induced subgraph - indukovani podgraf weight - teina source space complexity spanning forest spanning tree sparse graph speedup stack straight radix sort
ENGLESKO-SRPSKI REQNIK weighted graph
- teinski graf
395
Literatura [1] U. Manber, Introduction to algorithms, A creative approach, Addison–Wesley, Reading, 1989. [2] M. R. Garey, D. S. Johnson, Computers and Intractability, A Guide to the Theory of NP-Completeness, W. H. Freeman, San Francisco, 1979. [3] D. E. Knuth, The Art of Computer Programming, 1–3, Addison-Wesley, Reading, 1973. [4] J. Van Leeuwen, Handbook of Theoretical Computer Computer Science. Vol A, Algorithms and Complexity, Elsevier, Amsterdam, 1990. [5] A. V. Aho, J. D. Ullman, Computers Science, C Edition, Computer Science Press, W. H. Freeman, New York, 1995. [6] B. Schneier, Applied Cryptography, Protocols, Algorithms and Source Code in C, John Wiley & Sons, New York, 1994. [7] R. L. Graham, D. E. Knuth, O. Patashnik, Concrete Mathematics, Addison-Wesley, Reading, 1994. [8] T. H. Cormen, C. E. Leiserson, R. L. Rivest, Introduction to Algorithms The MIT Press, Cambridge, 1991. [9] N. Christofides, Graph Theory, An Algorithmic Approach, Academic Press, New York, 1975. [10] E. M. Reingold, J. Nievergelt, N. Deo, Combinatorial Algorithms, Theory and Practice, Prentice-Hall, Englewood Cliffs, 1977. [11] A. V. Aho, J. E. Hopcroft, J. D. Ullman, The Design and Analysis of Computer Algorithms, Addison-Wesley, Reading, 1976. [12] S. E. Goodman, S. T. Hedetniemi, Introduction to the Design and Analysis of Algorithms, McGraw-Hill, New York, 1977. [13] E. Horowitz, S. Sahni, Fundamentals of Computer ALgorithms, Computer Science Press, Fall River Lane, 1978. [14] S. G. Akl, The Design and Analysis of Paralel Algorithms, Prentice Hall, Englewood Cliffs, 1989. [15] T. H. Cormen, C. E. Leiserson, R. L. Rivest, Introduction to Algorithms, McGraw-Hill, New York, 1991.
[16] . Pauni, Strukture podataka i algoritmi, Univerzitet u Novom Sadu, Novi Sad, 1997.
397