67
Konstrukcija i analiza algoritama – odgovori na pitanja Anja Bukurov Nikola Ajzenhamer Vojislav Stankovi´ c 11. juni 2015. 1

Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

  • Upload
    others

  • View
    42

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Konstrukcija i analiza algoritama – odgovori na pitanja

Anja BukurovNikola AjzenhamerVojislav Stankovic

11. juni 2015.

1

Page 2: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Sadrzaj

1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa kvantifikatorima. 4

2 Metodi dokazivanja teorema; teoreme sa kvantifikatorima — primeri. 42.1 Metodi dokazivanja teorema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Dokazivanje teorema sa kvantifikatorima . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Primeri dokaza matematickom indukcijom; Ojlerova formula V + F = E + 2 63.1 Ojlerova formula: V + F = E + 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

4 Nalazenje binarnih cifara celog broja, dokaz korektnosti. 8

5 Analiza algoritama, O–notacija, vremenska i prostorna slozenost 8

6 Asimptotsko ponasanje resenja rekurentne relacije T (n) = aT (n/b) + cnk. 9

7 Resenje rekurentne relacije T (n) = 2n

n∑i=1

T (i) + n− 1, n ≥ 2,

T (1) = 0 (prosecna slozenost algoritma kvik sort) 10

8 Pohlepni (greedy) algoritmi; primer: nalazenje Hofmanovog koda 12

9 Izracunavanje vrednosti polinoma 14

10 Nalazenje maksimalnog indukovanog podgrafa grafa sa stepenovima cvorova ne ma-njim od zadatog broja 14

11 Nalazenje maksimalnog podskupa S ⊆ A datog skupa A na kome je zadata funkcijaf : A −→ A sa osobinom 1− 1 15

12 Algoritam za nalazenje takvog i da su u kvadratnoj 0 − 1 matrici svi elementi i–tevrste (sem i–tog) 1, i svi elementi i–te kolone (sem i–tog) 0 16

13 Racunanje svih faktora ravnoteze binarnog stabla 17

14 Nalazenje maksimalnog (uzastopnog) podniza datog niza realnih brojeva 18

15 Binarna pretraga, primeri primene; interpolaciona pretraga 1815.1 Binarna pretraga, primeri primene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1815.2 Interpolaciona pretraga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

16 Istovremeno nalazenje najmanjeg i najveceg elementa u nizu 22

17 Nalazenje k-tog najmanjeg od n zadatih brojeva 22

18 Nalazenje dve najblize tacke u datom skupu od n tacaka u ravni 23

19 Dinamicko programiranje, problem ranca. 26

20 Algoritam za nalazenje edit–rastojanja dva niza i priblizno trazenje reci u tekstu. 27

21 KMP algoritam za nalazenje jednog stringa u drugom. 2921.1 Izracunavanje pomocnog niza za algoritam KMP . . . . . . . . . . . . . . . . . . . . . . . 31

22 Hes tablice. 31

23 Struktura podataka pogodna za problem nalazenja unije. 32

24 Predstavljanje grafova: matrica povezanosti, lista povezanosti. 34

25 Nalazenje Ojlerovog ciklusa u povezanom neusmerenom grafu. 35

2

Page 3: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

26 Pretraga u dubinu neusmerenog grafa. 35

27 Pretraga grafa u sirinu. 37

28 Topolosko sortiranje aciklickog grafa 38

29 Nalazenje svih najkracih puteva iz zadatog cvora grafa — aciklicki slucaj. 39

30 Nalazenje svih najkracih puteva iz zadatog cvora grafa 41

31 Minimalno povezujuce stablo grafa. 43

32 Nalazenje svih najkracih puteva u grafu. 44

33 Tranzitivno zatvorenje grafa. 45

34 Stepenovanje prirodnim brojem. 46

35 Euklidov algoritam 48

36 Vinogradov i Strasenov algoritam za mnozenje matrica 49

37 Brza Fruijeova transformacija i mnozenje polinoma 5037.1 Direktna Furijeova transformacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5137.2 Inverzna Furijeova transformacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

38 Algoritam za nalazenje trouglova u neusmerenom grafu, dobijen svodenjem na mnozenjematrica. 54

39 Redukcije polinomijalne vremenske slozenosti, tranzitivnost. 55

40 Nedeterministicki algoritmi, Kukova teorema. 5540.1 Kukova teorema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

41 Dokaz NP–kompletnosti problema nalazenje pokrivaca cvorova grafa. 56

42 Dokaz NP–kompletnosti problema nalazenje dominirajuceg skupa grafa. 57

43 Dokaz NP–kompletnosti problema 3–SAT. 58

44 Dokaz NP–kompletnosti problema klika. 59

45 Dokaz NP-kompletnosti problema 3-obojivosti grafa 60

46 Moguci kompromisi prilikom resavanja teskih (NP kompletnih) problema; pretragasa vracanjem, 3–bojenje grafa. 61

47 Grananje sa odsecanjem, primena na bojenje grafa. 62

48 Priblizni algoritam za nalazenje pokrivaca grana na osnovu maksimalnog uparivanja. 64

49 Priblizni algoritmi za resavanje 1–D problema pakovanja. 64

50 Priblizni algoritmi za resavanje Euklidskog problema trgovackog putnika. 65

3

Page 4: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenjasa kvantifikatorima.

Pravila izvođenja predstavljaju osnovu ispravnog zakljucivanja. Neka od pravila izvođenja su:

Ime Pravilo Pravilo zadato tautologijom

1 Modus ponensp

p =⇒ qq

(p ∧ (p =⇒ q)) =⇒ q

2 Dodavanjep

p ∨ q p =⇒ (p ∨ q)

3 Uproscavanjep ∧ qp

(p ∧ q) =⇒ p

4 Konjunkcijapq

p ∧ q(p ∧ q) =⇒ (p ∧ q)

5 Modus tolens¬q

p =⇒ q¬p

(¬q ∧ (p =⇒ q)) =⇒ ¬p

6 Hipoteticki silogizamp =⇒ qq =⇒ rp =⇒ r

((p =⇒ q) ∧ (q =⇒ r)) =⇒ (p =⇒ r)

7 Disjunktivni silogizamp ∨ q¬pq

((p ∨ q) ∧ ¬p) =⇒ q

8 Rezolucijap ∨ q¬p ∨ rq ∨ r

((p ∨ q) ∧ (¬p ∨ r)) =⇒ (q ∨ r)

Pravila izvodenja sa kvantifikatorima:

Ime Pravilo

1 Univerzalna specijalizacija∀xP (x)P (c)

2 Univerzalna generalizacijaP (c)∀xP (x)

3 Egzistencijalna specijalizacija∃xP (x)P (c)

4 Egzistencijalna generalizacijaP (c)∃xP (x)

2 Metodi dokazivanja teorema; teoreme sa kvantifikatorima —primeri.

2.1 Metodi dokazivanja teorema

Dokazi se odnose na teoreme oblika p =⇒ q.

Direktni dokaz (najjednostavnije) – Krece se od pretpostavke da je p tacno i pokazuje se da je i qtacno.Primer: ,,Ako je n neparan, onda je i n2 neparan broj”.Dokaz: Posto je n neparan, moze se zapisati u obliku n = 2 · k + 1.Onda je n2 = (2 · k+ 1)2 = 4 · k2 + 4 · k + 1 = 2 · (2 · k2 + 2 · k) + 1, i to je takode neparan broj.

4

Page 5: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Indirektni dokaz – Umesto implikacije p =⇒ q dokazujemo njenu kontrapoziciju, odnosno ¬q =⇒ ¬p.Primer: ,,Ako je 3 · n+ 2 neparan, ona je i n neparan broj”.Dokaz: Pretpostavimo suprotno, n je paran broj i mozemo ga zapisati u obliku n = 2 · k.Onda je 3 · n + 2 = 3 · (2 · k) + 2 = 2 · (3dotk + 1). To je paran broj, sto znaci da je ¬q =⇒ ¬ptacno, pa je tacno i p =⇒ q.

Prazan dokaz – Ako je p netacno, implikacija p =⇒ q ce uvek biti tacna.Primer: P (n): ,,Ako je n > 1, onda n2 > n”. Dokazati P (0).

Trivijalan dokaz – Ako je q tacno, implikacija p =⇒ q ce uvek biti tacna.Primer: P (n): ,,Ako je a, b ∈N, a ≥ b, onda an ≥ bn”. Dokazati P (0).

Dokaz izvodenjem kontradikcije – Tvrdenje p dokazujemo tako sto pretpostavimo suprotno, tj. daje tacno ¬p i iz toga izvedemo kontradikciju.Primer: ,,

√2 je iracionalan broj.”

Dokaz: Pretpostavimo suprotno,√

2 je racionalan broj. To znaci da se moze napisati kao skracen(nesvodljiv) razlomak.√2 =

a

b/ · b

b ·√

2 = a/2

2 · b2 = a2 =⇒ a2 je paran broj, pa je i a paran i mozemo ga zapisati u obliku a = 2 · k!2 · b2 = (2 · k)2

2 · b2 = 4 · k2 / : 2b2 = 2 · k2 =⇒ b2 je paran broj, pa je i b paran broj.

Ako su i a i b parni brojevi znaci da razlomaka

bnije skracen. Dakle, pretpostavka je pogresna!

Dokaz razmatranjem slucajeva – Tvrdenje oblika (p1 ∨ . . .∨ pn) =⇒ q dokazujemo tako sto pokazu-jemo da vazi: p1 =⇒ q ∧ . . . ∧ pn =⇒ q.Primer: ,,Dokazati da vazi nejednakost trougla: |x+ y| ≤ |x|+ |y|”.Dokaz:

1. x ≥ 0 ∧ y ≥ 0: |x+ y| = x+ y, |x|+ |y| = x+ y

2. x < 0 ∧ y < 0: |x+ y| = −(x+ y), |x|+ |y| = −x− y = −(x+ y)

3. x ≥ 0 ∧ y < 0: |x|+ |y| = x− y(a) |x| < |y|: |x+ y| = −(x+ y) =⇒ x− y ≤ −x− y ⇐⇒ x ≥ 0

(b) |x| > |y|: |x+ y| = x+ y =⇒ x+ y ≤ x− y ⇐⇒ y ≤ 0√

4. x < 0 ∧ y ≥ 0: |x|+ |y| = −x+ y

(a) |x| < |y|: |x+ y| = x+ y =⇒ x+ y ≤ −x+ y ⇐⇒ x ≤ 0√

(b) |x| > |y|: |x+ y| = −(x+ y) =⇒ −x− y ≤ −x+ y ⇐⇒ y ≥ 0√

Dokaz ekvivalentnosti – Tvrdenje oblika p⇐⇒ q dokazujemo tako sto dokazujemo p =⇒ q i q =⇒ p.Primer: ,,Sledeca tri tvrđenja su ekvivalentna:”

P1 : ,,n je paran.”

P2 : ,,n− 1 je neparan.”

P3 : ,,n2 je paran.”

2.2 Dokazivanje teorema sa kvantifikatorima

Prva tri dokaza odnose se na teoreme sa kvatifikatorom ∃, a cetvrta na teoreme sa kvantifikatorom ∀.

Konstruktivni dokaz – Treba pronaci neko a, tako da je P (a) tacno.Primer: ,,Dokazati da postoji n ∈ N koji se moze napisati na 2 nacina kao zbir 2 kuba.”Dokaz: 1729 = 103 + 93 = 123 + 13

5

Page 6: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Nekonstruktivni dokaz – Treba pokazati da postoji a, tako da je P (a) tacno, ali se a ne pronađekonkretno.Primer: ,,Dokazati da postoje x, y ∈ I takvi da je xy racionalan broj.”

Dokaz: Neka je x =√

2, y =√

2, i a = xy =√

2√2. Ako je a racionalan, onda je to kraj dokaza. Ako

je a iracionalan, onda uzmemo da je x =√

2√2, a y =

√2.

Onda je a =

(√2√2)√2

= (√

2)√2·√2 = (√

2)2 = 2 ∈ Q.

U oba slucaja dobijamo da je a racionalan broj, ali ne znamo koji od ta dva slucaja imamo, nismokonkretno odredili i zato je to nekonstruktivan dokaz.

Dokaz jedinstvenosti – ∃xP (x) ∧ ∀y((y 6= x) =⇒ ¬P (x)).Primer: ,,Svaki celi broj ima jedinstveni aditivni inverz.”Dokaz: x ima inverz x′ i x”. Onda vazi:x′ + x = 0 i x” + x = 0x′ = x′ + 0 = x′ + (x+ x”) = (x′ + x) + x” = 0 + x” = x”

Kontraprimeri – Dovoljno je pronaci jedno a takvo da P (a) bude netacno.Primer: ,,Svaki prirodan broj je zbir 3 kvadrata.”Dokaz: 7 = x2 + y2 + z2, x ≤ y ≤ z. Najveci vrednost koju mogu da uzmu ovi brojevi je 2,jer je 32 = 9. Moramo imati bar jednu 2, jer 12 + 12 + 12 = 3. Ne mozemo imati dve 2, jerje 1+22 + 22 = 9 > 7. Preostaje nam da napravimo kombinaciju od dve 1 i jedne 2, a to je12 + 12 + 23 = 6.

3 Primeri dokaza matematickom indukcijom; Ojlerova formulaV + F = E + 2

Primer: Formirajmo trougao

Slika 1: Trougao neparnih brojeva.

Koliki je zbir brojeva u i-tom redu?U 1. redu je 1, u 2. redu je 8, u 3. redu je 27, u 4.redu je 64...Pretpostavimo da je zbir elemenata u i-tom redu, Si jednak: Si = i3

Slika 2: Slikoviti prikaz ideje resenja.

Si+1 = Si + i ∗ 2i+ ai+1

(i+ 1)3 = i3 + 2i2 + ai+1

6

Page 7: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Ostaje da se dokaze da je

ai+1 = i3 + 3i2 + 3i+ 1− i3 − 2i2

= i2 + 3i+ 1

= (i+ 1)2 + (i+ 1)− 1

odnosno

ai = i2 + i− 1

Dokaz (indukcijom po i)

Baza Indukcije: i = 1; ai = 1 12 + 1− 1 = 1 XI.H. : Pretpostavimo da je tacno ai = i2 + i− 1

I.K. : Iz konstrukcije se vidi ai = 2(i+ 1) +aiI.H.= 2i+ 2 + i2 + i− 1 = i2 + 3i+ 1 = (i+ 2)2 + (i+ 1)− 1

Primer: Dokazati da je1

2+

1

22+ · · ·+ 1

2n< 1

Dokaz (indukcijom po n)

Baza Indukcije: n = 11

2< 1 X

I.H. : vazi za n

I.K. :1

2+

1

22+ · · ·+ 1

2n+

1

2n+1=

1

2+

1

2(1

2+

1

22+ · · ·+ 1

2n)I.H.

<1

2+

1

2· 1 = 1

3.1 Ojlerova formula: V + F = E + 2

Povezana planarna mapa

V -broj cvorova

E -broj grana

F -broj oblasti (racuna se i spoljasnja/beskonacna oblast)

Dokaz (indukcijom po F)B.I. : F = 1 - beskonacna oblastV = E + 1

Poddokaz: (indukcijom po V)B.I. : V = 1 E = 0 1 = 0 + 1 XI.H. : Pretpostavimo da je tacno za V = nI.K. : Dokazati da je tacno za V = n+ 1 U stablu sa n+ 1 cvrova mora da postoji bar jedan viseci cvor.Za to stablo vazi: V = n+ 1 ENakon skidanja jednog viseceg cvora i grane, dobijamo stablo sa V ′ = V − 1, E′ = E − 1To stablo zadovoljava V ′ = E′ + 1 po induktivnoj hipotezi. Zamenom dobijamo:

V ′ = E′ + 1

V − 1 = E − 1 + 1

V = E + 1 X

I.H. : Za povezanu planarnu mapu, ako je F = m onda je V + F = E + 2I.K. : Posmatramo povezanu planarnu mapu sa F = m+ 1 oblascu, V cvorova i E grana.Uklanjanjem grane koja je susedna sa beskonacnom oblasti dobijamo mapu sa brojem oblasti F ′ = F−1;takode, vazi V ′ = V , E′ = E − 1 i za nju vazi induktivna hipoteza

V ′ + F ′ = E′ + 2

V + F − 1 = E − 1 + 2

V + F = E + 2

7

Page 8: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

4 Nalazenje binarnih cifara celog broja, dokaz korektnosti.

Algoritam koji predstavlja binarnu reprezentaciju broja n

Binarne cifre broja n

Begin

t = n

k = 0

while (t>0) do

k = k+1

b[k] = t mod 2

t = t/2

end

Invarijanta petlje: t · 2k + b[1] + b[2] · 2 + · · ·+ b[k] · 2k−1 = n

Dokaz korektnosti: (indukcijom po n)

B.I. : k = 0 n+ nista = nI.H. : t · 2k + b[1] + b[2] · 2 + · · ·+ b[k] · 2k − 1 = nI.K. : U narednom prolasku kroz petlju

k’ = k+1

t’ = t/2

b[k+1] = t mod 2

Zbir je sada

(t/2) · 2k+1 + b[1] + b[2] · 2 + · · ·+ b[k] · 2k−1 + (tmod2) · 2k

= 2k · (2(t2) + tmod2) + b[1] + b[2] · 2 + · · ·+ b[k] · 2k−1

= t · 2k + b[1] + b[2] · 2 + · · ·+ b[k] · 2k−1 = n X

Pri izlazu iz petlje, za t = 0, dobija seb[1] + b[2] · 2 + · · ·+ b[l] · 2l = nDobija se ispravan izlaz.

5 Analiza algoritama, O–notacija, vremenska i prostorna slozenost

Cilj analize algoritama je da proceni brzinu izvrsavanja algoritma bez obzira na to koji racunar ga koristi.Ideja je da se proceni brzina rada bez realizacije. Tacno ponasanje algoritma je nemoguce predvidetisem u najjednostavnijim slucajevima. Analiza algoritma mora biti priblizna. Ona omogucava poređenjealgoritama koji resavaju isti problem.

Zanemaruju se konstantni faktori zato sto se i izvrsavanja na razlicitim racunarima razlikuju za kon-stantu. Najinteresantnija je asimptotska analiza algoritama, odnosno kada velicina ulaza tezi jako veli-kim vrednostima. Obicno se velicina ulaza opisuje kao memorijski prostor koji je neophodan za koriscenjealgoritma. Najcesce se koristi analiza najgoreg slucaja. Trajanje algoritma predstavlja funkciju u zavi-snosti od ulazne velicine.

Analiza asimptotskog ponasanja slozenosti algoritma, i to u najgorem slucaju među ulazima određenevelicine – to je dakle aproksimacija vremena rada određenog algoritma na određenom ulazu, koja ipaknajcesce dobro karakterise osobine algoritma.

Definicija 1: Neka su f i g pozitivne funkcije od argumenta n iz skupa N prirodnih brojeva. Kazese da je g(n) = O(f(n)) ako postoje pozitivne konstante c iN , takve da za svako n > N vazi g(n) ≤ cf(n).

Oznaka O(f(n)) se ustvari odnosi na klasu funkcija, a jednakost g(n) = O(f(n)) je uobicajena oznakaza inkluziju g(n) ∈ O(f(n)). Jasno je da je funkcija f samo neka vrsta gornje granice za funkciju g.Na primer, pored jednakosti 5n2 + 15 = O(n2) (jer je 5n2 + 15 ≤ 6n2 za n ≥ 4) vazi i jednakost

8

Page 9: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

5n2 + 15 = O(n3) (jer je 5n2 + 15 ≤ n3 za n ≥ 6). Ova notacija omogucuje ignorisanje multiplikativnihi aditivnih konstanti: umesto O(5n+ 4) moze se pisati O(n). Slicno, u izrazu O(log n) osnova logaritmanije bitna, jer se logaritmi za razlicite osnove razlikuju za multiplikativnu konstantu:

loga n = loga(blogb n) = logb n · loga b.

Specijalno, O(1) je oznaka za klasu ogranicenih funkcija. Lako se pokazuje da se O-izrazi mogu sabiratii mnoziti:

O(f(n)) +O(g(n)) = O(f(n) + g(n)),

O(f(n))O(g(n)) = O(f(n)g(n)).

Drugi problem u vezi sa slozenoscu algoritma je pitanje donje granice za potreban broj racunskih ope-racija. Dok se gornja granica odnosi na konkretan algoritam, donja granica slozenosti odnosi se naproizvoljan algoritam iz neke određene klase. Zbog toga ocena donje granice zahteva posebne postupkeanalize.

Definicija 2: Za funkciju g(n) kaze se da je asimptotska donja granica funkcije T (n) i pise se T (n) =Ω(g(n)), ako postoje pozitivni c i N , takvi da za svako n > N vazi T (n) > cg(n).

Tako je na primer n2 = Ω(n2 − 100), i n = Ω(n0,9). Vidi se da simbol Ω odgovara relaciji ≥.

Definicija 3: Ako za dve funkcije f(n) i g(n) istovremeno vazi i f(n) = O(g(n)) i f(n) = Ω(g(n)),onda one imaju iste asimptotske brzine rasta, sto se oznacava sa f(n) = Θ(g(n)).

Tako je na primer 5n log2 n−10 = Θ(n log n), pri cemu je u poslednjem izrazu osnova logaritma nebitna.

Definicija 4: Cinjenica da je limn→∞

f(n)

g(n)= 0 oznacava se sa f(n) = o(g(n)).

Ocena (vremenske) slozenosti algoritma sastoji se u brojanju racunskih koraka koje treba izvrsiti.Međutim, termin racunski korak moze da podrazumeva razlicite operacije, na primer sabiranje i mnozenje,cije izvrsavanje traje razlicito vreme. Zato se obicno u okviru algoritma izdvaja neki osnovni korak, onajkoji se najcesce ponavlja. Tako, ako se radi o sortiranju, osnovni korak je upoređivanje. Ako je brojupoređivanja O(f(n)), a broj ostalih operacija je proporcionalan broju upoređivanja, onda je O(f(n))granica vremenske slozenosti algoritma.

Pod prostornom slozenoscu algoritma podrazumeva se velicina memorije potrebne za izvrsavanjealgoritma, pri cemu se prostor za smestanje ulaznih podataka najcesce ne racuna. Kao i kod vremenskeslozenosti, i za prostornu slozenost se najcesce trazi njeno asimptotsko ponasanje u najgorem slucaju,za velike velicine problema. Prostorna slozenost O(n) znaci da je za izvrsavanje algoritma potrebnamemorija proporcionalna onoj za smestanje ulaznih podataka. Ako je pak prostorna slozenost algoritmaO(1), onda to znaci da je potreban memorijski prostor za njegovo izvrsavanje ogranicen konstantom, bezobzira na velicinu ulaza.

6 Asimptotsko ponasanje resenja rekurentne relacije T (n) =aT (n/b) + cnk.

Pretpostavimo da nam je cilj analiza algoritma A, pri cemu broj operacija T (n) pri primeni algoritmaA na ulaz velicine n (vremenska slozenost) zadovoljava diferencnu jednacinu tipa

T (n) = aT(nb

)+ cnk (1)

pri cemu je a, b, c, k ≥ 0, b 6= 0, i zadata je vrednost T (1). Ovakva jednacina dobija se za algoritam kodkoga se obrada ulaza velicine n svodi na obradu a ulaza velicine n/b, posle cega je potrebno izvrsiti joscnk koraka da bi se od parcijalnih resenja konstruisalo resenje kompletnog ulaza velicine n. Jasno jezasto se za ovakve algoritme kaze da su tipa ”zavadi pa vladaj ”, (divide-and-conquer), kako se jos zovualgoritmi zasnovani na dekompoziciji. Obicno je u ovakvim diferencnim jednacinama b prirodan broj.

9

Page 10: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Master teorema: Asimptotsko ponasanje niza T (n), resenja diferencne jednacine (7) dato je jed-nakoscu

T (n) =

O(nlogb a) za a > bk

O(nk log n) za a = bk

O(nk) za a < bk(2)

4: Dokaz teoreme bice sproveden samo za podniz n = bm, gde je m celi nenegativni broj. Pomnozivsiobe strane jednakosti (7) sa a−m/c, dobijamo diferencnu jednacinu tipa (5)

tm = tm−1 + qm, t0 =1

cT (1),

gde su uvedene oznake tm = 1ca−mT (bm) i q = bk/a. Njeno resenje je:

tm = t0 +

m∑i=1

qi

Za q 6= 1 jem∑i=1

= (1 − qm+1)/(1 − q) − 1, pa se asimptotsko ponasanje niza tm opisuje sledecim

jednakostima

tm =

O(m) za q = 1O(1) za 0 < q < 1O(qm) za q > 1

(3)

Posto je T (bm) = camtm, n = bm, odnosno m = logbn, redom se za 0 < q < 1 (bk < a), q = 1 (bk = a,odnosno logb a = k) i q > 1 (bk > a) dobija

T (n) =

O(am) = O(bm logb a) = O(nlogb a) za a > bk

O(mam) = O(logb n · nlogb a) = O(nk log n) za a = bk

O((aq)m) = O(bmk) = O(nk) za a < bk(4)

cime je tvrđenje teoreme dokazano. 2

7 Resenje rekurentne relacije T (n) = 2n

n∑i=1

T (i) + n− 1, n ≥ 2,

T (1) = 0 (prosecna slozenost algoritma kvik sort)

Diferencna jednacina najopstijeg oblika Fn = f(Fn−1, Fn−2, ..., F1, n) zove se potpuna rekurzija ili dife-rencna jednacina sa potpunom istorijom. Razmotriemo jedan primer ovakvih diferencnih jednacina.

Diferencna jednacina

T (n) = n− 1 +2

n

n−1∑i=1

T (i), n ≥ 2, T (1) = 0 (5)

vazna je, jer se do nje dolazi pri analizi prosecne slozenosti sortiranja razdvajanjem, algoritma zauređivanje zadatog skupa brojeva po velicini (sortiranje, videti u knjizi pod 5.3.4). Ideja o ,,elimina-ciji istorije” moze se i ovde primeniti – zbog toga je zgodno prepisati zadatu jednacinu tako da se u njoj

uz sumun−1∑i=1

T (i) ne pojavljuje promenljivi cinilac n:

nT (n) = n(n− 1) + 2

n−1∑i=1

T (i).

Zatim ovu jednakost treba oduzeti od one koja se od nje dobija zamenom n sa n+ 1:

(n+ 1)T (n+ 1)− nT (n) = (n+ 1)n+ 2

n∑i=1

T (i)− n(n− 1)− 2

n−1∑i=1

T (i) = 2n+ 2T (n),

10

Page 11: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

odnosno

T (n+ 1) =2n

n+ 1+n+ 2

n+ 1T (n), n ≥ 2

Ovim je prvi cilj postignut: dobijena diferencna jednacina povezuje samo dva uzastopna clana niza.Resavanje ove diferencne jednacine moze se svesti na poznat problem resavanja F (n+ 1)− F (n) = f(n)deljenjem sa n+ 2 i smenom tn = T (n)/(n+ 1):

T (n+ 1)

n+ 2− T (n)

n+ 1=

2n

(n+ 1)(n+ 2),

odnosno

tn+1 − t(n) =2n

(n+ 1)(n+ 2).

Zamenom n sa i i sumiranjem po i u granicama od 1 do n dobija se (t1 = 0)

tn+1 − tn =

n∑i=1

2i

(i+ 1)(i+ 2). (6)

Da bi se izracunala suma sa desne strane ove jednakosti, moze se njen opsti clan razloziti na parcijalnerazlomke

2i

(i+ 1)(i+ 2)=

A

i+ 1+

B

i+ 2,

gde se nepoznati koeficijenti A i B dobijaju tako sto se u identitetu 2i = A(i+ 2) +B(i+ 1) stavi najprei = −1 (dobija se A = −2), a onda i = −2 (odakle je B = 4). Sada je trazena suma jednaka

n∑i=1

= −2

n∑i=1

1

i+ 1+ 4

n∑i=1

1

i+ 2= −2

n+1∑i=2

1

i+ 4

n+2∑i=3

1

i=

= 2∑i=3

1

i− 2 · 1

2+

4

n+ 2= 2H(n+ 1)− 4 +

4

n+ 2,

gde je sa

H(n) =

n∑i=1

1

i= lnn+ γ +O

(1

n

), (7)

oznacena parcijalna suma harmonijskog reda; γ ≈ 0, 577 je Ojlerova konstanta. Zamenom vrednostisume u (6) dobija se resenje diferencne jednacine (5)

T (n+ 1) =

(2H(n+ 1)− 4 +

4

n+ 2

)(n+ 2) = 2(n+ 1)H(n+ 1)− 4(n+ 1),

odnosno

T (n) = 2nH(n)− 4n = 2n lnn+ (2γ − 4)n+O(1) = O(n log n). (8)

U toku izvođenja koriscen je poznati asimptotski razvoj (7). Cesto je korisno znati i asimptotski razvojza n!, Stirlingovu formulu

n! =2√

2πn(ne

)n(1 +O

(1

n

)),

odnosno

log(n!) = O(n log n). (9)

11

Page 12: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

8 Pohlepni (greedy) algoritmi; primer: nalazenje Hofmanovogkoda

Zadat je tekst sa n razlicitih znakova, tako da su ucestanosti znakova zadate nizom F = f1, f2, ..., fn.Odrediti prefiksni kod E koji minimizira broj bita L(E,F ) upotrebljenih za kodiranje.

Slika 3: Predstavljanje prefiksnog koda stablom.

Za prefiksni kod koji minimizira vrednost L(E,F ) kaze se da je optimalni kod; on ocigledno zavisiod niza ucestanosti znakova F . Cilj je za dati niz F odrediti optimalni prefiksni kod (bilo koji; uopstem slucaju postoji vise razlicitih optimalnih kodova). Razmotrimo zbog toga malo detaljnije osobineoptimalnih kodova:

1. Ako je f1 > f2, onda je l1 ≤ l2 (jer bi u protivnom, za l1 > l2 vazilo da je (f1 − f2)(l1 − l2) > 0,odnosno f1l1 + f2l2 > f1l2 + f2l1 sto znaci da bi broj bitova za prva dva slova bio veci od brojabitova ako zamenimo kodove, sto je suprotno pretpostavci da se radi o optimalnom kodu)

2. U kodnom stablu, svaki unutrasnji cvor mora da ima oba sina, u protivnom bi se kod mogaopojednostaviti skracivanjem kodnih reci u listovima podstabla ispod cvora sa samo jednim sinom(pogledati sliku 4)

3. Postoji optimalni kod u kojem su dva najređa slova u poslednjem nivou i sinovi istog oca (pogledatisliku 5)

Slika 4: Kodno stablo u kome neki cvor ima samo jednog sina sto nije kodno stablo optimalnog koda.

12

Page 13: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slika 5: Transformacija kodnog stabla, posle koje dva znaka sa najmanjim frekvencijama fi i fj postajusinovi istog oca.

Realizacija. Operacije koje se izvrsavaju prilikom formiranja Hofmanovog koda su

• umetanje u strukturu podataka,

• brisanje dva znaka sa najmanjim frekvencijama iz strukture, i

• konstrukcija kodnog stabla.

Hip je pogodna struktura podataka za prve dve operacije, jer se tada te operacije u najgorem slucajuizvrsavaju za O(log n) koraka. Algoritam za formiranje Hofmanovog koda glasi:

Algoritam Hofman(S, F);

Ulaz: S (string znakova koji se pojavljuju u tekstu) i F (frekvencije).

Izlaz: T (kodno stablo Hofmanovog koda za S).

begin

ubaciti sve znake u hip H prema njihovim frekvencijama;

while H neprazan do

if H sadrzi samo jedan znak X then

formiraj stablo T koje ima samo koren, cvor X

else

skini sa hipa H znakove X, Y sa najmanjim frekvencijama fX, fY;

zameni X i Y novim znakom Z sa frekvencijom fZ = fX + fY;

ubaci Z u hip H;

povezi X i Y tako da budu sinovi Z u T; Z jos nema oca

end

Primer: Neka je dat fajl u kome se pojavljuju znaci A, B, C, D, E i F sa frekvencijama redom 5, 2,3, 4, 10 i 1. Dva znaka sa najmanjim frekvencijama su F i B; oni se zamenjuju novim znakom BF safrekvencijom 1 + 2 = 3. Dalja zamenjivanja prikazana su u sledecoj tabeli.

Slika 6: Dobijeno kodno stablo.

13

Page 14: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slika 7: Stablo Hofmanovog koda iz primera.

Slozenost. Slozenost dodavanja novog cvora stablu ogranicena je konstantom. Umetanja i brisanja izhipa izvrsavaju se u O(log n) koraka. Slozenost algoritma je dakle O(n log n).

9 Izracunavanje vrednosti polinoma

Napomena: U nastavku ce biti prikazan najoptimalniji algoritam za izracunavanje vrednosti polinoma.Konsultovati se sa profesorovom knjigom za ostale (manje efikasne) algoritme.

Problem. Dati su realni brojevi an, an−1, ..., a1, a0 i realni broj x. Izracunati vrednost polinoma

Pn(x) =n∑

i=0

aixi.

Induktivna hipoteza. Umemo da izracunamo vrednost polinoma P ′n−1(x) sa koeficijentima an, an−1, ..., a1u tacki x.

Ovakva induktivna hipoteza je pogodna jer se lako prosiruje. Posto je Pn(x) = x · P ′n−1(x) + a0, zaizracunavanje Pn(x) polazeci od P ′n−1(x) dovoljno je jedno mnozenje i jedno sabiranje. Izracunavanje semoze opisati sledecim izrazom:

anxn + an−1x

n−1 + ...+ a1x+ a0 = ((...((anx+ an−1)x+ an−2)...)x+ a1)x+ a0,

poznatim kao Hornerova sema.

Algoritam Vrednost_polinoma(a, x);

Ulaz: a (niz koeficijenata polinoma) i x (realni broj);

Izlaz: P (vrednost polinoma u tacki x);

begin

P = a[n];

for i = 1 to n do

P = x * P + a[n-i];

end

Slozenost. Telo for petlje izvrsava se n puta za vreme O(1), pa je stoga slozenost O(n).

10 Nalazenje maksimalnog indukovanog podgrafa grafa sa ste-penovima cvorova ne manjim od zadatog broja

Neka je G = (V,E) neusmereni graf. Graf H = (U,F ) je indukovani podgraf grafa G ako U ⊆ V i Fsadrzi sve grane iz E kojima su oba kraja u U , videti primer na slici 8. Stepen cvora je broj njemususednih cvorova.

14

Page 15: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slika 8: Primer indukovanog podgrafa. Grane su neuređeni parovi cvorova.

Problem. Za zadati neusmereni graf G = (V,E) i zadati prirodni broj k pronaci maksimalni indukovanipodgraf H = (U,F ) grafa G (tj. indukovani podgraf sa maksimalnim brojem cvorova) uz uslov da svicvorovi podgrafa H imaju stepen bar k, ili ustanoviti da takav indukovani podgraf ne postoji.

Umesto da algoritam posmatramo kao niz koraka koje treba izvrsiti da bi se doslo do rezultata, mozemoda sebi postavimo za cilj dokazivanje teoreme da algoritam postoji. Potrebno je pronaci maksimalniindukovani podgraf koji zadovoljava zadate uslove.

4 : (indukcijom po broju cvorova n)

(B.I.) Prvi netrivijalni slucaj pojavljuje se za n = k + 1, jer ako je n ≤ k, onda su stepeni svih cvorovamanji od k. Ako je n = k + 1, onda samo u jednom slucaju postoji indukovani podgraf sa stepenimacvorova ≥ k: to je slucaj potpunog grafa (grafa sa svim mogucim granama).(I.H.) Pretpostavimo da umemo da resimo problem sa |v| = n cvorova.(I.K.) Posmatramo graf G = (V,E), gde je sada |V | = n + 1. Ako su stepeni svih cvorova u G veciili jednaki od k, onda graf H = G zadovoljava uslove i dokaz je zavrsen. U protivnom, postoji cvor vstepena < k. Cvor v se moze ukloniti iz G zajedno sa svim njemu susednim granama, ne menjajuciuslove teoreme. Posle uklanjanja v, graf ima n cvorova, pa prema induktivnoj hipotezi mi umemo daresimo problem do kraja.

11 Nalazenje maksimalnog podskupa S ⊆ A datog skupa A nakome je zadata funkcija f : A −→ A sa osobinom 1− 1

Problem. Neka je zadat konacan skup A i preslikavanje f : A −→ A. Odrediti podskup S ⊆ A sanajvecim mogucim brojem elemenata tako da bude f(S) ⊆ S i da restrikcija f na S bude bijekcija.

Ako je f bijekcija, onda kompletan skup A zadovoljava uslove problema, pa je maksimalni podskupS = A. Ako je pak f(a) = f(b) za neke a 6= b, onda S ne moze da sadrzi i a i b. Na primer, skup S uproblemu sa slike 9 ne moze da sadrzi oba elementa 2 i 3, jer je f(2) = f(3) = 1.

Slika 9: Primer preslikavanja skupa u samog sebe.

15

Page 16: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Međutim, nije svejedno koji ce elemenat od ova dva biti eliminisan. Ako na primer eliminisemo 3, ondase zbog f(1) = 3 mora eliminisati i 1. Zatim se na isti nacin zbog f(2) = 1 mora eliminisati i 2. Dobijenipodskup sigurno nije maksimalan, jer je moguce eliminisati samo elemenat 2 umesto 1, 2 i 3. Resenjeproblema na slici 8 je podskup 1, 3, 5, sto se moze ustanoviti npr. proverom svih mogucih podskupovaS ⊂ A. Postavlja se pitanje nalazenja opsteg metoda za odlucivanje koje elemente treba ukljuciti u S.

Algoritam. U svakom koraku pronalazimo elemenat u koga se ni jedan drugi ne preslikava, ukla-njamo ga i nastavljamo rekurzivno. Realizacija algoritma ipak ne mora da bude rekurzivna. Svakomelementu i, 1 ≤ i ≤ n pridruzuje se brojac c[i], cija je pocetna vrednost jednaka broju elemenata kojise preslikavaju u i. Vrednosti c[i] mogu se izracunati u n koraka prolazeci kroz vektor f i pri tomepovecavajuci za jedan odgovarajuce brojace. Zatim se u listu stavljaju svi elementi kojima je vrednostbrojaca dobila vrednost 0.U svakom koraku se prvi elemenat j iz liste uklanja iz liste i iz skupa, dekrementira se c[f [j]], a akoc[f [j]] dobije vrednost 0, f [j] se stavlja u listu. Resavanje je zavrseno u trenutku kad je lista prazna.

Slozenost. Za uvodni deo (inicijalizaciju) treba izvrsiti O(n) koraka. Svaki elemenat se u listu moze sta-viti najvise jednom, a operacije potrebne da se elemenat ukloni iz liste izvrsavaju se za vreme ogranicenokonstantom. Prema tome, ukupan broj koraka je O(n).

12 Algoritam za nalazenje takvog i da su u kvadratnoj 0 − 1matrici svi elementi i–te vrste (sem i–tog) 1, i svi elementii–te kolone (sem i–tog) 0

Ovaj problem je poznatiji pod imenom ,,Problem nalazenja zvezde”. Među n osoba zvezda je osobakoja nikoga ne poznaje, a koju svi ostali poznaju. Problem je identifikovati zvezdu (ako ona postoji)postavljajuci pitanja oblika ,,Izvinite, da li poznajete onu osobu?” Pretpostavlja se da su svi odgovoritacni, a da ce cak i zvezda odgovarati na pitanja.

Problem se moze preformulisati u grafovski. Formiramo usmereni graf sa cvorovima koji odgovarajuosobama, u kome grana od osobe A ka osobi B postoji ako A poznaje B. Zvezda odgovara ponoru grafa,cvoru u koji ulazi n − 1 grana, a iz koga ne izlazi ni jedna grana. Jasno je da graf moze imati najvisejedan ponor. Ulaz problema se opisuje n x n matricom povezanosti M , ciji elemenat Mij je jednak 1ako osoba i poznaje osobu j, odnosno 0 u protivnom; dijagonalni elementi su jednaki nuli.

Bazni slucaj sa dve osobe je jednostavan. Posmatrajmo razliku između problema sa n − 1 osobom iproblema sa n osoba. Pretpostavljamo da znamo da pronađemo zvezdu među prvih n− 1 osoba induk-cijom. Posto moze da postoji najvise jedna zvezda, postoje tri mogucnosti:

1. zvezda je jedna od prvih n− 1 osoba;

2. zvezda je n-ta osoba;

3. zvezda ne postoji.

Pretpostavimo da osobu A pitamo da li poznaje osobu B. Ako A poznaje B, onda A nije zvezda, a akopak A ne poznaje B, onda B nije zvezda. U oba slucaja se jedna osoba eliminise postavljanjem samojednog pitanja.

Algoritam. Algoritam se deli u dve faze. U prvoj fazi se eliminisu sve osobe sem jednog kandidata zazvezdu, a druga faza je neophodna da se ustanovi da li kandidat jeste zvezda.

Algoritam Zvezda(Poznaje);

Ulaz: Poznaje (n × n Bulova matrica sa nulama na dijagonali).

Izlaz: Zvezda.

begin

i := 1; osoba A

j := 2; osoba B

Naredni := 3; sledeci koji ce se proveravati

16

Page 17: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

prva faza: eliminisu se svi kandidati sem jednog

while Naredni <= n + 1 do

if Poznaje[i, j] then i := Naredni eliminacija i

else j := Naredni; eliminacija j

Naredni := Naredni + 1

po izlasku iz petlje je ili i = n + 1 ili j = n + 1

if i = n + 1 then Kandidat := j

else Kandidat := i

druga faza: provera da li je Kandidat zvezda

Jeste := true; true ako Kandidat jeste zvezda

k := 1;

while Jeste and k <= n do

if Poznaje[Kandidat, k] then Jeste := false;

if not Poznaje[k, Kandidat] then

if Kandidat != k then Jeste := false;

k := k + 1;

if Jeste then Zvezda := Kandidat

else Zvezda := 0 nema zvezde

end

Slozenost. Postavlja se najvise 3(n − 1) pitanja: n − 1 pitanja u prvoj fazi da bi se eliminisala n − 1osoba, i najvise 2(n − 1) pitanja za proveru da li je preostali kandidat zvezda. Primetimo da velicinaulaza nije n, nego n(n − 1), broj elemenata matrice. Prikazano rexee pokazuje da je moguce odreditizvezdu pregledajuci najvise O(n) elemenata matrice povezanosti, iako je jasno da resenje mora bitno dazavisi od svih n(n− 1) elemenata matrice.

13 Racunanje svih faktora ravnoteze binarnog stabla

Neka je T binarno stablo sa korenom r. Visina cvora v je rastojanje od v do najdaljeg potomka.Visina stabla je visina njegovog korena. Faktor ravnoteze cvora v definise se kao razlika visina njegovoglevog i desnog podstabla. Na slici 10 prikazano je binarno stablo kod koga je uz svaki cvor upisan parh/b, gde je h visina cvora, a b njegov faktor ravnoteze.

Slika 10: Binarno stablo sa oznakama h/b uz unutrasnje cvorove.

Problem. Za zadato stablo T sa n cvorova izracunati faktore ravnoteze svih cvorova.

Pojacana induktivna hipoteza. Znamo da izracunamo faktore ravnoteze i visine svih cvorova ustablima koja imaju < n cvorova.

Bazni slucaj je trivijalan. Kad posmatramo koren proizvoljnog stabla, njegov faktor ravnoteze mozemolako da odredimo kao razliku visina njegovih sinova. Mozemo da odredimo i visinu korena: to je veca odvisina njegovih sinova, uvecana za jedan.

17

Page 18: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Lako je proveriti da se slucaj kad nema levog ili desnog podstabla, moze resiti tako da se visina nepo-stojeceg sina zameni sa −1.Karakteristika ovog algoritma je da on resava nesto opstiji problem. Umesto da racunamo samo faktoreravnoteze, mi izracunavamo i visine cvorova. Ispostavlja se da je opstiji problem laksi, jer se visine lakoracunaju. Ako je resenje opstije (jer je problem prosiren), onda induktivni korak moze biti jednostavniji,jer posedujemo snaznija sredstva. Uobicajena greska pri resavanju sireg problema je da se zaboravi napostojanje dva parametra, i da se svaki od ih mora posebno izracunati.

14 Nalazenje maksimalnog (uzastopnog) podniza datog niza re-alnih brojeva

Problem. Zadat je niz x1, x2, ..., xn realnih brojeva (ne obavezno pozitivnih). Odrediti podniz xi, xi+1, ..., xjuzastopnih elemenata sa najvecom mogucom sumom.

Za ovakav podniz reci cemo 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. Moze da postoji vise maksimalnih podnizova datog niza.Ako su svi clanovi niza negativni, onda je maksimalni podniz prazan (po definiciji, suma praznog nizaje 0).

Induktivna hipoteza. Znamo da nađemo maksimalni podniz u nizovima duzine < n.Za n = 1 maksimalni podniz je broj x1 ako je x1 ≥ 0, odnosno prazan podniz ako je x1 < 0. Problem sarazmotrenom induktivnom hipotezom je u tome sto xn moze da produzi podniz koji nije maksimalan uS′ i tako formira novi maksimalni podniz u S. Prema tome, nije dovoljno samo poznavanje maksimalnogpodniza u S′. Međutim, xn moze da produzi samo podniz koji se zavrsava sa xn−1, odnosno sufiks nizaS′.

Pojacana induktivna hipoteza. U nizovima duzine < n umemo da pronađemo maksimalni pod-niz, i maksimalni sufiks.Ako za podniz S′ znamo oba ova podniza, algoritam postaje jasan. Maksimalni sufiks prosirujemobrojem xn. Ako je dobijena suma veca od sume (globalno) maksimalnog podniza, onda imamo novimaksimalni podniz (takođe i novi maksimalni sufiks). U protivnom, zadrzavamo prethodni maksimalnipodniz. Posao time nije zavrsen: potrebno je odrediti i novi maksimalni sufiks. U opstem slucaju novimaksimalni sufiks se ne dobija uvek prosirivanjem starog brojem xn. Moze se dogoditi da je maksimalnisufiks koji se zavrsava sabirkom xn negativan. Tada je novi maksimalni sufiks ustvari prazan podniz, sasumom 0.

Algoritam Max_uzast_podniz(X, n);

Ulaz: X (niz duzine n).

Izlaz: Glob_max (suma maksimalnog podniza).

begin

Glob_max := 0; pocetna vrednost globalno maks. sume

Suf_max := 0; pocetna vrednost sume maks. sufiksa

for i := 1 to n do

if x[i] + Suf_max > Glob_max then

Suf_max := Suf_max + x[i];

Glob_max := Suf_max;

else if x[i] + Suf_max > 0 then

Suf_max := Suf_max + x[i];

else Suf_max := 0;

end

15 Binarna pretraga, primeri primene; interpolaciona pretraga

15.1 Binarna pretraga, primeri primene

Osnovna ideja binarne pretrage je podela prostora na dva priblizno jednaka dela postavljanjem samojednog pitanja.

18

Page 19: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Problem (cista binarna pretraga). Neka je x1, x2, ..., xn niz realnih brojeva takav da je x1 ≤ x2 ≤... ≤ xn. Za zadati realni broj z treba ustanoviti da li se z pojavljuje u nizu, a ako je odgovor ,,da”,potrebno je pronaci indeks i takav da je xi = z.

Ideja je prepoloviti prostor koji se pretrazuje tako sto se najpre proveri srednji clan niza. Pretpo-stavimo zbog jednostavnosti da je n paran broj. Ako je z manje od xn/2+1, onda z moze biti samo uprvoj polovini niza; u protivnom, z moze biti samo u drugoj polovini niza. Pronalazenje z u prvoj ilidrugoj polovini niza je problem velicine n/2, koji se resava rekurzivno. Bazni slucaj n = 1 resava seneposrednim upoređivanjem z sa elementom.

Algoritam Binarna_Pretraga(X, n, z);

Ulaz: X (niz od n brojeva, uredenih neopadajuce) i z (broj koji se trazi).

Izlaz: Poz (indeks i takav da je X[i] = z, ili 0 ako takav indeks ne postoji).

begin

Poz = Nadji(z, 1, n);

end

function Nadji(z; Levi;Desni)

begin

if Levi = Desni then

if X[Levi] = z then Nadji = Levi;

else Nadji = 0;

else

Srednji = (Levi + Desni)/2;

if z < X[Srednji] then

Nadji = Nadji(z, Levi, Srednji - 1)

else

Nadji = Nadji(z, Srednji, Desni)

end

Slozenost. Slozenost binarne pretrage niza od n elemenata moze se opisati rekurentnom relacijomT (n) = T (n/2) + 1, odakle se dobija da je slozenost O(log n) na osnovu Master teoreme.

Problem. Za zadati rastuce uređeni niz celih brojeva a1, a2, ..., an utvrditi da li postoji indeks i, takavda je ai = i.

Ovaj problem je moguci svesti na binarnu pretragu. Zaista, niz xi = ai − i je neopadajuci (jer jexi+1−xi = ai+1−ai−1 ≥ 0), a uslov ai = i je ekvivalentan uslovu xi = 0. Prema tome, zadati problemresava se binarnom pretragom niza xi, u kome se trazi broj z = 0.

Problem (binarna pretraga ciklicki uređenog niza). Za zadati cikliqcki uređeni niz pronaci po-ziciju minimalnog elementa niza (zbog jednostavnosti moze se pretpostaviti da je ta pozicija jedinstvena).

Za niz x1, x2, ..., xn kaze se da je ciklicki uređen ako vaze nejednakosti

xi < xi+1 < ... < xn < x1 < ... < xi−1,

gde je xi najmanji elemenat niza.Da bismo pronasli minimalni elemenat xi u nizu, koristimo ideju binarne pretrage da jednim upoređivanjemeliminisemo polovinu niza. Uzmimo proizvoljna dva broja xk i xm takva da je k < m. Ako je xk < xm,onda i ne moze biti u intervalu k < i ≤ m, jer je xi najmanji elemenat niza (u tom slucaju bilo bixi < xm < xk – suprotno pretpostavci da je xk < xm). U protivnom, ako je xk > xm, onda i mora bitiu intervalu k < i ≤ m, jer je tada monotonost niza prekinuta negde u intervalu indeksa [k,m]. Prematome, jednim upoređivanjem moze se eliminisati mnogo elemenata.Odgovarajucim izborom k i m, i se moze odrediti pomocu O(log n) upoređivanja. Invarijanta glavnepetlje algoritma je uslov da se i uvek nalazi u intervalu [Levi,Desni].

Algoritam Cikl_Binarna_Pretraga(X, n);

19

Page 20: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Ulaz: X (vektor sa ciklicki uredenim nizom od n razlicitih brojeva);

Izlaz: poz (indeks minimalnog elementa u X);

begin

poz = c_Nadji(1, n);

end

function c_Nadji(Levi, Desni)

begin

if Levi = Desni then

c_Nadji = Levi;

else

Srednji = (Levi + Desni)/2;

if X[Srednji] < X[Desni] then

c_Nadji = c_Nadji(Levi, Srednji);

else

c_Nadji = c_Nadji(Srednji + 1, Desni);

end

Problem (Binarna pretraga niza nepoznate duzine). Posmatrajmo varijantu problema pretragekad se zadati broj z trazi u uređenom nizu nepoznate duzine. Da bi se problem sveo na vec resen,potrebno je pronaci bar jedan indeks i takav da je xi > z: tada se moze preci na binarnu pretragu opsegaindeksa od 1 do i.

Moze se postupiti na sledeci nacin. Najpre se z upoređuje sa x1. Ako je z ≤ x1, onda z moze bitijednako samo broju x1. Pretpostavimo da znamo indeks j takav da je z > xj . Posle upoređivanja zsa x2j postoje dve mogucnosti. Ako je z ≤ x2j , onda znamo da je xj < z ≤ x2j , pa se z moze pronacipomocu O(log2 j) upoređivanja. Ako je pak z > x2j , onda je prostor za pretrazivanje udvostrucen, itreba nastaviti (indukcijom) tako sto se j zameni sa 2j.Pretpostavimo da je i najmanji indeks takav da je z ≤ xi. Tada je dovoljno O(log2 i) upoređivanja dase (udvostrucavanjem) pronađe takvo xj koje je vece ili jednako od z, i novih O(log2 i) upoređivanja dase pronađe z.Isti algoritam moze se upotrebiti i ako je duzina niza poznata, ali ocekujemo da je indeks i vrlo mali.Da bi ovaj algoritam bio bolji od obicne binarne pretrage, potrebno je da bude priblino 2 log2 i < log2 n,odnosno i <

√n.

Problem (Utvrđivanje da li zadata tacka pripada mnogouglu). Zadat je prost mnogougaoP i tacka q. Ustanoviti da li je tacka u ili van mnogougla P .

Posmatrajmo proizvoljnu polupravu sa temenom q. Vidi se da je dovoljno prebrojati preseke sa strani-cama mnogougla, sve do dostizanja spoljasnje oblasti. Uopste (specijalne slucajeve na trenutak zane-marujemo) tacka je u mnogouglu ako i samo ako je presek poluprave sa temenom q neparan. Specijalnislucajevi mogu biti nesto kompleksniji (npr. odabrana poluprava prolazi kroz teme mnogougla), paautori preporucuju konsultovanje knjigom profesora. Potpun algoritam je dat sa:

Algoritam Tacka_u_mnogouglu_2(P, q); drugi pokusaj

Ulaz: P (prosti mnogougao sa temenima p1, p2,... , pn i stranicama e1, e2,... , en),

i q (tacka sa koordinatama (x0, y0)).

Izlaz: Pripada (bulova promenljiva, true akko q pripada P).

begin

Broj := 0;

for sve grane ei mnogougla do

if prava x = x0 sece ei then

Pretpostavljamo da presek nije ni teme ni stranica mnogougla

Neka je yi y-koordinata preseka prave x = x0 sa ei;

if yi < y0 then presek je ispod q

Broj := Broj + 1;

if Broj je neparan then Pripada := true;

else Pripada := false;

end

20

Page 21: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

15.2 Interpolaciona pretraga

Problem (Interpolaciona pretraga) U okviru binarne pretrage prostor pretrage se svaki put polovi,sto garantuje logaritamsku vremensku slozenost. Međutim, ako se u toku pretrage naiđe na vrednost vrloblisku trazenom broju z, izgleda razumno da se pretraga usredsredi na ,,okolinu” tog indeksa umestoda se nastavi sa polovljenjem naslepo. Specijalno, ako je vrednost z vrlo mala, moze se zapoceti sapretragom negde na pocetku niza umesto od srednjeg indeksa.

Slika 11: Interpolaciona pretraga – ilustracija.

Umesto da polovimo prostor pretrage, mi ga delimo tako da bude najveca ,,verovatnoca” uspeha. Odnosu kome se opseg indeksa deli određuje se interpolacijom, sto je ilustrovano na slici 11. Recimo da je z = 7.Prvom interpolacijom dobija se indeks 6; ispostavlja se da je X[6] < z. Sledeca interpolacija u intervaluindeksa [6, 17] dovodi do resenja X[7]. Algoritam, zajedno sa izrazom po kome se vrsi interpolacija, datje sa:

21

Page 22: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slozenost. Efikasnost interpolacione pretrage ne zavisi samo od duzine niza, nego i od svih njego-vih elemenata, odnosno od kompletnog ulaza. Postoje ulazi za koje interpolaciona pretraga proveravaprakticno svaki clan niza (videti zadatak 5.5 u profesorovoj knjizi). S druge strane, interpolaciona pre-traga je vrlo efikasna za ulaze sa priblizno uniformno raspodeđenim elementima (odnosno ako su tacke(i, xi) grupisane u okolini prave). Pokazuje se da je srednji broj upoređivanja u toku interpolacionepretrage (usrednjavanje po svim mogucim nizovima) jednak O(log log n).Ipak, interpolaciona pretraga nije mnogo bolja od obicne binarne pretrage iz dva razloga. Najpre, semza jako velike vrednosti n, vec je log2 n mala vrednost, pa njen logaritam nije mnogo manji. Drugo,kod izbora narednog indeksa u toku interpolacione pretrage potrebno je izvrsiti nesto komplikovanijearitmeticke operacije.

16 Istovremeno nalazenje najmanjeg i najveceg elementa u nizu

Podelimo skup na dva podskupa sa jednakim brojem elemenata. Resivsi rekurzivno oba potproblemadobijamo dva minimalna (a1 i a2) i dva maksimalna elementa (b1 i b2), pri cemu su a1 i b1 iz prvog, a a2i b2 iz drugog podniza. Potrebno je videti koliko upoređivanja je potrebno da je odrede maksimum i mi-nimum od ova cetiri broja. Lako je videti da ce biti dovoljna 2 pitanja: Prvo pitanje je a2 ≥ a1? Ukolikoje odgovor ,,da”, onda se postavlja pitanje b2 ≥ a1? Ukoliko je odgovor ,,da”, onda se u rekurzivnompozivu vraca par (a2, b2), a ukoliko je odgovor ,,ne”, onda se vraca par (a2, a1). Ukoliko je odgovor naprvo pitanje bio ,,ne”, onda se postavlja pitanje a2 ≥ b1? Ukoliko je odgovor ,,da”, onda se vraca par(a1, a2), a inace se vraca par (a1, b1).

Dakle, rekurentna relacija izgleda

T (n) = 2T (n/2) + 2, T (2) = 1,

odakle se dobija (n = 2k)

T (2k) = 2T (2k−1) + 2

= 2(2T (2k−1) + 2) + 2 =

= 22T (2k−2) + 22 + 2 =

= 23T (2k−3) + 23 + 22 + 2 =

= ... =

= 2k−1T (2) + 2k−1 + ...+ 22 + 2︸ ︷︷ ︸2k−2

=

= 2k−1 + 2k − 2

T (n) =n

2+ n− 2 =

=3n

2− 2

17 Nalazenje k-tog najmanjeg od n zadatih brojeva

Problem. Za zadati niz elemenata S = x1, x2, ..., xn i prirodni broj k, 1 ≤ k ≤ n, odrediti k-ti najmanjielemenat u S.

Ideja je primeniti dekompoziciju na isti nacin kao i kod algoritma sortiranje razdvajanjem, sem stoje ovog puta dovoljno resiti samo jedan od dva potproblema. Kod sortiranja razdvajanjem niz se raz-dvaja pomocu pivota na dva podniza. Dva podniza se zatim sortiraju rekurzivno. Ovde je dovoljnoodrediti koji od podnizova sadri k-ti najmanji elemenat, a onda algoritam primeniti rekurzivno samo nataj podniz. Ostali elementi mogu se ignorisati.

22

Page 23: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Algoritam Selekcija(X, n, k);

Ulaz: X (niz od n brojeva) i k (prirodni broj);

Izlaz: S (k-ti najmanji elemenat; niz X je promenjen);

begin

if (k < 1) or (k > n) then print "greska";

else

S = Sel(1, n, k);

end

function Sel(Levi, Desni, k);

begin

if Levi = Desni then

Sel = Levi;

else

S = Razdvajanje(X, Levi, Desni); videti sliku *

if S - Levi + 1 >= k then

Sel = Sel(Levi, S, k);

else

Sel = Sel(S + 1, Desni, k - (S - Levi + 1));

end

Slozenost. Kao i kod sortiranja razdvajanjem, los izbor pivota vodi kvadratnom algoritmu. Srednjaslozenost ovog algoritma moze se oceniti na slican nacin kao kod sortiranja razdvajanjem. Rekurentnarelacija koja opisuje prosecnu slozenost ovog algoritam je T (n) = T (n/2) + cn, odakle se iz Masterteoreme dobije slozenost O(n).

18 Nalazenje dve najblize tacke u datom skupu od n tacaka uravni

Umesto da razmatramo tacke jednu po jednu, mozemo da skup tacaka podelimo na dva jednaka dela.Induktivna hipoteza je takva da problem svodimo na dva problema sa n/2 tacaka. Zbog jednostavnostipretpostavimo da je n stepen dvojke, tako da je skup uvek moguce podeliti na dva jednaka dela.Postoji vise nacina da se skup podeli na dva jednaka dela. Biramo nacin koji najvise odgovara nasimciljevima. Voleli bismo da dobijemo sto vise korisnih informacija iz resea manjih problema, odnosno dasto veci deo tih informacija vazi i za kompletan problem. Izgleda razumno da se skup podeli na dva delapodelom ravni na dva disjunktna dela, tako da svaki od njih sadrzi polovinu tacaka.Posto se pronađe najmanje rastojanje u svakom delu, treba razmotriti samo rastojanja između tacaka bli-skih granici skupova. Najjednostavniji nacin podele je sortirati tacke prema (na primer) x-koordinatamai podeliti ravan pravom paralelnom sa y-osom, koja deli skup na dva jednaka dela, videti sliku 12 (ako visetacaka lezi na pravoj podele, tacke se mogu na proizvoljan nacin razdeliti između skupova). Nacin podeleizabran je tako da se maksimalno pojednostavi objedinjavanje resenja manjih problema. Sortiranje trebaizvrsiti samo jednom.

23

Page 24: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slika 12: Problem nalazenja dve najblize tacke.

Zbog jednostavnosti ogranicicemo se na nalazenje vrednosti najmanjeg rastojanja između tacaka (a ne ipara tacaka za koje se ono dostize). Pronalazenje dve najblize tacke izvodi se na sledeci nacin.Neka je P skup tacaka i neka je n stepen dvojke. Najpre se skup P deli na dva istobrojna podskupaP1 i P2 na opisani nacin. Najmanje rastojanje u svakom podskupu pronalazi se na osnovu induktivnehipoteze. Neka je d1 minimalno rastojanje u P1, a d2 minimalno rastojanje u P2. Bez smanjenja opstostimoze se pretpostaviti da je d1 ≤ d2. Potrebno je pronaci najmanje rastojanje u celom skupu, odnosnoustanoviti da li u P1 postoji tacka na rastojanju manjem od d1 od neke tacke u P2.Primetimo najpre da je dovoljno razmatrati tacke u traci sirine 2d1, simetricnoj u odnosu na pravupodele (videti sliku 13). Ostale tacke ne mogu biti na rastojanju manjem od d1 od neke tacke iz drugogpodskupa. Na osnovu ovog zapazanja obicno se iz razmatranja eliminise veliki broj tacaka. Međutim,u najgorem slucaju sve tacke mogu biti u traci, pa ne mozemo da sebi priustimo primenu trivijalnogalgoritma na njih.

Drugo manje ocigledno zapazanje je da za proizvoljnu tacku p u traci postoji samo mali broj tacakau suprotnoj traci cije rastojanje od p moze biti manje od d1. Iskoristicemo cinjenicu da je

√2/2 > 0, 7.

Neka je sa yp oznacena y-koordinata tacke p. Konstruisimo pravougaonik visine 2, 1d1 <32

√2d1 i sirine

1, 4d1 <√

2d1 u suprotnoj traci (videti sliku 11), tako da naloze na pravu podele i da mu je y-koordinatapreseka dijagonala jednaka yp. Podelimo ga jednom vertikalnom pravom i sa dve horizontalne prave nasest jednakih kvadrata stranice 0, 7d1 (kojima je dijagonala manja od d1!!! ). U svakom od malih kvadratamoze se naci najvise jedna tacka, jer je rastojanje bilo koje dve tacke u kvadratu manje od d1. Sve tackeu drugom podskupu, sa rastojanjem od p manjim od d1, ocigledno se moraju nalaziti u pravougaoniku.Dakle, u drugom podskupu se moze nalaziti najvise sest tacaka na rastojanju od p manjem od d1: tackakandidat sa y-koordinatom yq mora da zadovolji i uslov |yp − yq| < d1, pa se mora nalaziti u jednomod 6 kvadrata. Prema tome, ako sve tacke u traci sortiramo prema y-koordinatama i pregledamo ih timredom, dovoljno je da za svaku tacku proverimo rastojanje osam suseda u suprotnoj traci, cetiri ispod icetiri iznad (a ne od svih n− 1 tacaka u najgorem slucaju).

24

Page 25: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slika 13: Ocena maksimalnog broja tacaka iz suprotnog podskupa, bliskih fiksiranoj tacki.

Slozenost. Sortiranje slozenosti O(n log n) izvrsava se samo jednom. Zatim se resavaju dva potproblemavelicine n/2. Eliminacija tacaka van centralne trake moze se izvesti za O(n) koraka. Za sortiranje tacakau traci po y-koordinatama u najgorem sluqaju potrebno je O(n log n) koraka. Konacno, potrebno jeO(n) koraka da se pregledaju tacke u traci, i da se provere rastojanja svake od njih od konstantnog brojasuseda u sortiranom redosledu.Ukupno, da bi se resio problem velicine n, treba resiti dva potproblema velicine n/2 i izvrsiti O(n log n)koraka za kombinovanje njihovih resenja (plus O(n log n) koraka za jednokratno sortiranje tacaka pox-koordinatama na pocetku).Dobijamo diferencnu jednacinu

T (n) < 2T (n/2) + cn log2 n, T (2) = 1,

pri cemu u T(n) nije ukljuceno pocetno sortiranje po x-koordinatama. Indukcijom se pokazuje da jenjeno resenje T (n) = O(n log2 n). Ovo je bolje od kvadratne slozenosti, ali se moze poboljsati.

Algoritam slozenosti O(n log n). Osnovna ideja je pojacati induktivnu hipotezu. U toku objedinja-vanja resenja potproblema izvodi se O(n log n) koraka zbog sortiranja tacaka po y-koordinatama. Mozeli se sortiranje izvesti usput u toku nalazenja dveju najblizih tacaka? Drugim reqima, cilj je pojacatiinduktivnu hipotezu za problem dve najblize tacke tako da obuhvati i sortiranje.

Pojacana induktivna hipoteza. Za zadati skup od < n tacaka u ravni umemo da pronađemo najma-nje rastojanje i da skup tacaka sortiramo po y-koordinatama.

Vec smo videli kako se moze pronaci minimalno rastojanje ako se tacke u svakom koraku sortiraju poy-koordinatama. Dakle, potrebno je jos samo prosiriti induktivnu hipotezu tako da obuhvati sortiranjen tacaka kad su dva podskupa velicine n/2 vec sortirana. Međutim, to je upravo sortiranje objedinja-vanjem. Osnovna prednost ovog pristupa je u tome sto se pri objedinjavanju re senja ne mora izvestikompletno sortiranje, nego samo objedinjavanje dva vec sortirana podniza. Posto se objedinjavanje sor-tiranih podnizova izvodi za O(n) koraka, diferencna jednacina za slozenost (bez pocetnog sortiranja pox-koordinatama) postaje

T (n) < 2T (n/2) + cn, T (2) = 1.

Njeno resenje je T (n) = O(n log n), sto je asimptotski jednako slozenosti pocetnog sortiranja tacaka pox-koordinatama.

25

Page 26: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Algoritam Najblizi_par(p1, p2, ..., pn); Poboljsana verzija

Ulaz: p1, p2, ..., pn (skup tacaka u ravni);

Izlaz: d (rastojanje izmedu dve najblize tacke skupa);

begin

Sortirati tacke prema x-koordinatama;

ovo sortiranje izvrsava se samo jednom, na pocetku

Podeliti skup na dva istobrojna podskupa;

Rekurzivno izvrsiti sledece:

izracunati minimalno rastojanje u oba podskupa;

sortirati tacke u svakom delu prema y-koordinatama;

Objediniti dva sortirana niza u jedan;

Objedinjavanje se mora izvrsiti pre eliminacije:

sledecem nivou rekurzije mora se isporuciti sortiran kompletan skup

Neka je d manje od dva minimalna rastojanja;

Eliminisati tacke koje su na rastojanju vecem od d od prave podele;

Za preostale tacke proveriti njihova rastojanja od 4 prethodne i 4 naredne taqke iz

suprotne trake;

dovoljno je proveriti i samo 4 prethodne tacke!

if neko od ovih rastojanja je manje od d then

popraviti d;

end

19 Dinamicko programiranje, problem ranca.

Pretpostavimo da ranac treba napuniti stvarima. Stvari mogu da budu razlicitog oblika i velicine, acilj je da se u ranac upakuje sto je moguce vise stvari.

Problem. Dat je prirodan broj K i n predmeta razlicitih velicina (tezina), tako da i-ti predmet imavelicinu ki, 1 ≤ i ≤ n. Pronaci podskup predmeta cija je suma velicina jednaka tacno K, ili ustanovitida takav podskup ne postoji.

Oznacimo problem sa P (n,K), gde n oznacava broj predmeta, a K velicinu (nosivost) ranca. Velicinepredmeta podrazumevaju se implicitno, odnosno njihove velicine nisu deo eksplicitne oznake problema.Na taj nacin P (i, k) oznacava problem sa prvih i predmeta i rancem velicine k. Zbog jednostavnostiogranicavamo se na problem odlucivanja da li resenje postoji.

Induktivna hipoteza. Umemo da resimo P (n− 1, k) za sve k, 0 ≤ k ≤ K.

Ova induktivna hipoteza omogucuje nam da resimo P (n, k) za 0 ≤ k ≤ K. Bazni slucaj P (1, k) selako resava: za k = 0 uvek postoji resenje (trivijalno, nula sabiraka), a u protivnom resenje postoji akkoje k1 = k. Problem P (n, k) svodi se na dva problema P (n−1, k) i P (n−1, k−kn) (drugi problem otpadaako je k−kn < 0). Oba ova problema se mogu resiti indukcijom. Posto je svođenje kompletno, algoritamje konstruisan. Međutim, ovaj algoritam je neefikasan. Problem velicine n sveden je na dva problemavelicine n−1 (istina, u jednom od potproblema smanjena je vrednost k). Svaki od novih problema svodise na po dva naredna problema, itd, sto dovodi do eksponencijalnog algoritma.Na srecu, u mnogo slucajeva moguce je poboljsati efikasnost prilikom resavanja ovakvih problema. Zapazase da ukupan broj razlicitih problema ne mora biti preveliki: prvi parametar moze da ima najvise n, adrugi najvice K razlicitih vrednosti. Ukupno je broj razlicitih problema najvise nK. Eksponencijalnovreme izvrsavanja algoritma je posledica dupliranja broja problema posle svakog svođenja. Posto ukupnoima nK razlicitih problema, jasno je da su neki od njih (ako je 2n > nK) vise puta resavani. Korisnaideja je pamtiti sva nađena resenja da bi se izbeglo ponavljanje resavanja istih problema. Ovaj pristup jekombinacija pojacavanja induktivne hipoteze i koriscenja potpune indukcije. Razmotricemo sada kakose ovaj pristup moze prakticno realizovati.

Za smestanje svih izracunatih rezultata koristi se posebna matrica dimenzije n×K. Elemenat (i, k)matrice sadrzi informacije o resenju P (i, k): Svođenje po drugoj varijanti induktivne hipoteze ekviva-lentno je izracunavanju jedne vrste na osnovu prethodne vrste matrice. Svaki elemenat se izracunava naosnovu dva elementa iz prethodne vrste.

26

Page 27: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Ako je potrebno odrediti i podskup sa zadatim zbirom, onda uz svaki elemenat matrice treba sacuvatii informaciju o tome da li je odgovarajuci elemenat skupa ukljucen u zbir u tom koraku. Prateci oveinformacije unazad od elementa (n,K), moze se rekonstruisati podskup sa zbirom K. Algoritam je pri-kazan ispod. Matrica P je zbog udobnosti dimenzije (n+ 1)×(k+ 1) i sadrzi elemente P [i, k], 0 ≤ i ≤ n,0 ≤ k ≤ K.

Algoritam Ranac(S, K);

Ulaz: S (vektor duzine n sa velicinama predmeta) i K (velicina ranca).

Izlaz: P (matrica, tako da je P[i, k].Postoji = true akko postoji resenje problema

ranca sa prvih i predmeta, za velicinu ranca k; P[i, k].Pripada = true akko i-ti

predmet pripada tom resenju).

begin

P[0, 0].Postoji := true;

for k := 1 to K do

P[0, k].Postoji := false;

elementi P[i, 0] za i >= 1 bice izracunati na osnovu P[0, 0]

for i := 1 to n do

for k := 0 to K do izracunavanje elementa P[i, k]

P[i, k].Postoji := false; polazna vrednost

if P[i - 1, k].Postoji then

P[i, k].Postoji := true;

P[i, k].Pripada := false;

else if k - S[i] >= 0 then

if P[i - 1, k - S[i]].Postoji then

P[i, k].Postoji := true;

P[i, k].Pripada := true;

end

Slozenost. U tabeli ima nK elemenata. Svaki od njih izracunava se za konstantno vreme na osnovudruga dva elementa, pa je ukupna vremenska slozenost algoritma O(nK). Ako predmeti nisu preveliki,onda K ne moze biti preveliko, pa je nK << 2n.Ako je potrebno samo ustanoviti da li resenje postoji, onda je odgovor sadrzan u elementu P [n,K]. Akopak treba odrediti podskup sa zbirom K, onda treba preci put unazad, polazeci od pozicije (n,K),koristeci polje Postoji elemenata matrice iz programa. Predmet tezine kn pripada skupu akko jeP [n,K].P ripada tacno; ako je P [n,K].P ripada tacno, odnosno netacno, onda se dalje na isti nacinposmatra elemenat P [n−1,K−kn], odnosno P [n−1,K] iz (n−1)-e vrste, itd. Podskup se rekonstruiseza O(n) koraka.Prostorna slozenost ovog algoritma je O(nK). Ako se zahteva samo odgovor na pitanje da li postojipodskup sa zbirom K, lako je modifikovati algoritam tako da mu prostorna slozenost bude O(K): na-redna vrsta se izracunava na osnovu prethodne, pa je za izracunavanje elementa P [n,K] dovoljno imatiprostor za smestanje dve uzastopne vrste matrice.

20 Algoritam za nalazenje edit–rastojanja dva niza i pribliznotrazenje reci u tekstu.

Ovde cemo se baviti samo jednim problemom - nalazenjem minimalnog broja edit operacija koje pre-vode jedan string u drugi. Osnovna tehnika koja se u vezi sa tim koristi je dinamicko programiranje.

Neka su A = a1a2 . . . an i B = b1b2 . . . bm dva stringa, niza ciji su elementi znakovi iz konacnog al-fabeta. Cilj je transformisati A u B, znak po znak. Dozvoljene su tri vrste elementarnih transformacija(ili edit operacija), koje imaju cenu 1:

• umetanje - umetanje znaka

• brisanje - brisanje znaka

• zamena - zamena jednog znaka drugim znakom

27

Page 28: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Problem: Za zadate stringove A = a1a2 . . . an i B = b1b2 . . . bm pronaci niz edit operacija najmaecene koji A transformise u B.

Na primer, da se string abbc transformise u string babb, moze se prvo obrisati a (dobija se bbc), umetnutia izmedu dva b (dobija se babc), i na kraju zameniti c sa b - ukupno tri promene. Isti rezultat moze sepostici sa samo dve promene: umetanjem novog b na pocetku (dobija se babbc) i brisanjem poslednjeg c.Cilj je pronaci transformaciju koja se sastoji od minimalnog broja edit operacija (takva transformacijau opstem slucaju nije jedinstvena).Najmanji broj edit operacija koji transformise string A u string B zvacemo edit rastojanjem d(A,B)stringova A i B. Funkcija d(A,B) je metrika: ocigledno je d(A,A) = 0 i d(A,B) = d(B,A) , za proi-zvoljne stringove A i B (ako postoji niz edit operacija duzine k koji transformise A u B, onda inverznih koperacija, primenjenih obrnutim redosledom, transformisu B u A). Ako su A, B i C proizvoljni stringovi,tada vazi nejednakost trougla: d(A,B)+d(B,C) > d(A,C). Zaista, postoji niz od d(A,B) edit operacijakoje 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; iz cinjenice da je d(A,C) najmanji broj edit ope-racija koje A prevode u C sledi trazena nejednakost. Rastojanje d(A,B) poznato je kao Levenstajnovorastojanje (eng: Levenstein).

Mogucih nizova edit operacija koje A prevode u B, ima mnogo, pa je na prvi pogled tesko medu njimanaci najbolji. Za pocetak, ogranicicemo se na nalazenje edit rastojanja d(A,B), odnosno najmanjegbroja edit operacija koje prevode A u B (a ne i samog niza edit operacija). Kao i obicno, pokusacemoda problem resimo indukcijom. Za zadati string A oznacimo sa A(i) njegov prefiks duzine i. Problemje odrediti rastojanje d(A(n), B(m)). Za n = 0 potrebno je prazan prefiks A(0) transformisati u stringB(m) duzine m. Ocigledno je za to potrebno najmanje m operacija umetanja znakova; prema tome,d(A(0), B(m)) = m za m > 0. Slicno, d(A(n), B(0)) = n za n > 0, jer se najkraci niz edit opera-cija koje string A(n) duzine n prevodi u prazan string B(0) sastoji od n brisanja. Da bismo problemresili indukcijom, potrebno je da izracunavae rastojanja d(A(i), B(j)) izmedu nekih prefiksa svedemo naizracunavanje rastojanja izmedu nekih ”kracih” prefiksa. Ovaj cilj moze se postici ako razmotrimo kojaedit operacija moze biti poslednja u nizu edit operacija koje prevode A(i) u B(j).Postoje tri mogucnosti:

(a) zamena znaka ai (istim ili razlicitim) znakom bj , posto je prethod- no prefiks A(i−1) transformisanu B(j − 1),

(b) umetanje znaka bj , posto je prethodno prefiks A(i) transformisan u B(j − 1);

(c) brisanje znaka ai, posto je prethodno prefiks A(i− 1) transformisan u B(j).

Neka je

c(i, j) =

0 za ai = bj1 za ai 6= bj

(10)

Najmanji broj edit operacija koje A(i) prevode u B(j) jednak najmanjem 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 ciji su elementi rastojanjasvih podstringova A od svih podstringova B, tj. C[i, j] = d(A(i), B(j)), 0 < i < n, 0 < j < m. Elementiove matrice zadovoljavaju diferencnu jednacinu

C[i, j] = minC[i− 1, j − 1] + c(i, j);C[i, j − 1] + 1;C[i− 1, j] + 1; (11)

koja njen proizvoljan elemenat izrazava preko tri druga: iznad, levo i gore levo:

28

Page 29: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Ova jednakost omogucuje izracunavae svih elemenata matrice C, posto se znaju njena 0− ta kolonai 0− ta vrsta. Time je resen problem izracunavanja edit rastojanja stringova A i B : d(A,B) = C[n,m].Opisani algoritam je primer dinamickog programiranja.

Realizacija: Za izracunavanja se koristi matrica C dimenzije (n + 1) × (m + 1), pri cemu prvi, od-nosno drugi indeks uzimaju vrednosti iz opsega [0, n], odnosno [0,m]. Neka M [i, j] oznacava poslednjuedit operaciju koja dovodi do minimalne vrednosti C[i, j]. Dovoljno je zapamtiti samo tu poslednju editoperaciju (brisanje A[i], umetanje B[j] ili zamena A[i] sa B[j]), jer se do kompletnog niza edit operacijadolazi prolazeci elemente matrice ”unazad”, polazeci od M [n,m]. Za izracunavanje C[i, j], potrebno jeznati C[i − 1, j], C[i, j − 1] i C[i − 1, j − 1]. Poslednja promena M [i, j] odredena je time koja od trimogucnosti daje minimalnu vrednost za C[i, j]; izbor nije uvek jednoznacan!

Algoritam Edit_rastojanje(A,n,B,m);

Ulaz: A (string duzine n), i B (string duzine m).

Izlaz: C (matrica rastojanja podstringova A i 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 (a[i]=b[j]) 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

Slozenost: Svaki elemenat matrice C izracunava se za konstantno vreme, pa je vremenska slozenostalgoritma O(n ·m). Problem sa ovom verzijom algoritma je u tome sto je i njegova prostorna slozenostO(n · m). Ako se matrica C popunjava vrstu po vrstu, posto vrsta zavisi samo od prethodne, ovajalgoritam moze se preraditi tako da mu prostorna slozenost bude O(m).

21 KMP algoritam za nalazenje jednog stringa u drugom.

Preporucuje se ucenje kodova.

Neka su S = s1s2...sn i P = p1p2...pm dva stringa (niza znakova iz konacnog alfabeta). Za prvi od njihreci cemo da je tekst, a za drugi da je uzorak. Podstring stringa S je string sisi+1...sj od uzastopnihznakova S.

Problem. Za dati tekst S = s1s2...sn i uzorak P = p1p2...pm ustanoviti da li postoji podstring Sjednak P , a ako postoji, pronaci prvu pojavu uzorka u tekstu, odnosno najmanji indeks k takav da jesk+i−1 = pi za i = 1, 2, ...,m.

Naivni algoritam. Na prvi pogled problem izgleda jednostavno. Dovoljno je uporediti uzorak Psa svim mogucim podstringovima S oblika sksk+1...sk+m−1 duzine m, pri cemu k uzima vrednosti redom1, 2, ..., n − m + 1. Upoređivanje uzorka sa podstringom vrsi se znak po znak sleva udesno, sve dokse ne ustanovi da su svi znaci uzorka jednaki odgovarajucim znacima podstringa (u tom trenutku pre-kida se dalje pregledanje podstringova), ili dok se ne naiđe na neslaganje pi 6= sk+i−1 za neko i, 1 ≤ i ≤ m.

Slozenost. Broj upoređivanja znakova manji je od mn, pa je slozenost ovog algoritma O(mn) u najgo-rem slucaju.

29

Page 30: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Algoritam Nadji_uzorak(S, n, P, m);

Ulaz: S (string duzine n) i P (uzorak duzine m).

Izlaz: Start (indeks pocetka prvog podstringa S jednakog P, ako takav postoji,

odnosno 0 u protivnom).

begin

Start = 0;

i = 1; pokazivac na uzorak

j = 1; pokazivac na string

while i <= m and j <= n do dok ima nade da se nade podstring jednak uzorku

if P[i] = S[j] then

i = i + 1; j = j + 1 poklapanje: napredovanje i u stringu i u uzorku

else

j = j - i + 2; i = 1 neslaganje: uzorak klizi za jedno mesto udesno

if i > m then

Start = j - i + 1 pronaden je podstring jednak uzorku

end

KMP algoritam. Pretpostavimo da je do neslaganja doslo na poziciji i u uzorku, tj. za neki indeksj u tekstu je pi 6= sj i p1p2...pi−1 = sj−i+1sj−i+2...sj−1. Postavlja se pitanje: koliko uzorak najmanjetreba pomeriti udesno, odnosno koji znak pl uzorka treba postaviti ispod znaka sj teksta, tako da se(manji) deo uzorka p1p2...pl−1, l < i, i dalje slaze sa delom teksta sj−l+1sj−l+2...sj−1, i da pri tome budepl 6= pi?

Slika 14: Ilustracija ideje na kojoj se zasniva algoritam KMP.

Pretpostavimo da imamo tabelu pomeraja h, za koju vazi da ako do neslaganja dođe na mestu l, ondatreba zameniti l sa h[i] (postoji algoritam za nalazenje ove tabele). Tada ce algoritam poznat podimenom KMP (Knutt−Morris− Pratt) izgledati:

Algoritam KMP(S, n, P, m);

Ulaz: S (tekst - string duzine n) i P (uzorak duzine m).

Pretpostavlja se da je niz h izracunat

Izlaz: Start (indeks pocetka prvog podstringa S jednakog P, ako takav postoji,

odnosno 0 u protivnom).

begin

Start = 0;

i = 1; pokazivac na uzorak

j = 1; pokazivac na tekst

while i <= m and j <= n do dok ima nade da se nade podstring jednak uzorku

while i > 0 cand P[i] != S[j] do

i = h[i]; pomeranje uzorka udesno za i - h[i]

i = i + 1; j = j + 1; napredovanje u tekstu i u uzorku

if i > m then

Start = j - i + 1 pronaden je podstring jednak uzorku

end

Slozenost. Broj izvrsavanja i = h[i]; manji je od i = i + 1;, pa se i = h[i]; izvrsava manje odn puta (jer se i = i + 1; izvrsava kao i j = j + 1;, odnosno n puta). Dakle, slozenost je O(n) (nezavisi od duzine uzorka).

30

Page 31: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

21.1 Izracunavanje pomocnog niza za algoritam KMP

Razmotrimo sada kako se efektivno mogu izracunati elementi vektora h. Kao sto je receno, ako je pi 6= sj, onda je l = h[i] indeks znaka uzorka koga sledeceg treba uporediti sa znakom teksta sj . Drugim recima,l je najveci indeks za koji je p1p2...pl−1 = pi−l+1p + i− l + 2pi−1 i pl 6= pi. Uz uslov h[1] = 0 ovim suodređeni svi clanovi vektora h.

Slika 15: Ilustracija ideje na kojoj se zasniva algoritam za trazenje tabele h.

Ukoliko je A najduzi prefiks p1p2...pk jednak sufiksu pupu+1...pi−1, onda ce h[i] biti jednak duzini togprefiksa + 1, odnosno h[i] = |A| + 1. Ukoliko imamo izracunat h[i], i vazi jednakost j = |A| + 1, tadacemo h[i+ 1] potraziti na sledeci nacin:

• Ako je pi = pj , onda je h[i+ 1] = j + 1

• Ako je pi 6= pj , onda je j = h[j] i vracamo se nazad.

Algoritam Pomaci(P, m);

Ulaz: P (uzorak, string duzine m);

Izlaz: h (niz duzine m);

begin

i = 1; indeks elementa h koji se izracunava

j = 0; pokazivac na smaknuti uzorak; uskakae u petlju

h[1] = 0; g[1] = 0; neslagae na prvom znaku u KMP: pomeranje udesno

while i < m do

na ovom mestu je P[i - j + k] = P[k] za k = 1, 2, ..., j - 1] invarijanta petlje

while j > 0 cand P[i] != P[j] do

j = h[j]; smanjivanje indeksa j; moze i j = g[j];, ali je ovako bolje!

i = i + 1; j = j + 1; paralelno napredovanje pokazivaca

g[i] = j;

neka je s simbol u tekstu, sa kojim se P[i] uporeduje u algoritmu KMP

if P[i] = P[j] then

h[i] = h[j] ako P[i] != s, onda je i P[j] != s; udesno na h[j]

else

h[i] = j ako P[i] != s, onda proveriti da li je P[j] != s; udesno na j

end

22 Hes tablice.

Hes tabele spadaju među najkorisnije strukture podataka. Ideja je da, ako imamo vektor duzine n ivrednosti od 1 do n da stavimo u tabelu, onda cemo vrednost i da stavimo na i-tu poziciju. Ova idejafunkcionise samo za manje vrednosti n-a. Ukoliko je opseg iz koga su vrednosti od 1 do M , gde je M nekijako veliki broj, onda ne mozemo da koristimo vektor duzine M . Primer je upis na osnovu maticnog broja.

Pretpostavimo da nam je dato n kljuceva iz skupa U velicine |U | = M >> m. Potrebno je nacifunkciju koja bi vrsila preslikavanja 0, 1, 2, ...,M − 1 −→ 0, 1, 2, ...,m− 1 koja se naziva hes funkcijai koja određuje odgovarajucu poziciju elementa na osnovu njegovog kljuca. Ako velicina m nije dovoljnovelika, onda moze doci do deljenja odgovarajucih pozicija razlicitih podataka i to se naziva kolizija.Uniformnost i slucajnost su bitne osobine hes funkcija.

31

Page 32: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Postoje dva problema:

• Nalazenje hes funkcija koje minimiziraju verovatnocu da dođe do kolizija i

• Nalazenje nacina da se obrade kolizije ako do njih ipak dođe

Hes funkcije: Ako je velicina tabele m prost broj, onda je dobra hes funkcija:

h(x) = x mod m

Ukoliko m nije prost broj, onda se moze koristiti hes funkcija tipa:

h(x) = (x mod p) mod m,

gde je p prost broj takav da je m << p << M .Problem se javlja ako su sve vrednosti koje ubacujemo oblika r+ kp, za neki celi broj r zato sto ce uvekda idu na poziciju r. Ovaj problem se moze resiti time sto necemo uvek koristiti isto p vec ce se onomenjati po unapred određenom redosledu. Drugo resenje je da koristimo hes funkciju oblika:

h(x) = (ax+ b mod p),

gde je a 6= 0 i a, b su slucajni brojevi. Ova funkcija u proseku daje dobro resenje.

Obrada kolizija: Razlikujemo odvojeno nizanje, linearno popunjavanje i dvostruko hesiranje kao mogucaresenja za kolizije.

Odvojeno nizanje je najjednostavniji nacin i tu je svaki element tabele u stvari pokazivac na po-vezanu listu koja cuva kljuceve kojima je hes funkcija dodelila tu poziciju. Kod trazenja kljuca se mora,u najgorem slucaju, proci cela lista kako bi se videlo da li sadrzi dati kljuc. Ovaj metod je neefikasanukoliko su liste na odgovarajucim pozicijama dugacke, a dodatno otezavanje predstavlja memorijska lo-kacija, ali s druge strane radi bez greske i ukoliko je dimenzija tabele pogresne velicine.

Linearno popunjavanje funkcionise po modelu h1(x) = (h(x) + i) mod m, gde je i ≥ 0. U slucajutrazenja zadatog elementa potrebno je pretraziti tabelu od pozicije h(x) sve do prve nepopunjene pozi-cije. Ovo resenje je efikasno ukoliko nam je tabela retka, u suprotnom bi dolazilo do mnogo sekundarnihkolizija (kolizija kljuceva kojima su vrednosti hes funkcija razlicite). Veliki broj mogucnosti za sekun-darne kolizije se naziva i efekat grupisanja.

Dvostruko hesiranje: Kada dođe do kolizije na poziciji h(x) = i, izracunava se vrednost druge hesfunkcije h2(x) i onda se kljuc x stavlja na poziciju g(x) = (h(x) + i · h2(x)) mod m, za i ≥ 0. Trebavoditi racuna da vrednosti h2(x) budu uzajamno proste sa m.

23 Struktura podataka pogodna za problem nalazenja unije.

Problem formiranja unija moze da posluzi kao primer kako dobro izabrana struktura podatakamoze da poboljsa efikasnost algoritma. Neka je dato n elemenata x1, x2, . . . , xn, koji su podeljeni udisjunktne podskupove. Na pocetku su podskupovi jednoclani. Nad elementima i podskupovima moguse proizvoljnim redosledom izvrsavati sledece dve operacije.

• podskup(i): daje ime podskupa koja sadrzi xi;

• unija(A,B): formira uniju podskupova A i B, podskup sa jedinstvenim imenom.

Cilj je naci strukturu podataka koja omogucuje sto efikasnije izvrsavanje obe ove operacije.Prvi kandidat za zeljenu strukturu podataka je vektor. Posto su svi elementi poznati, mogu se smestitiu vektor X duzine n. Najjednostavnijeresenje postavljenog problema je smestiti u X[i] ime podskupakoji sadrzi elemenat xi. Nalazenje podskupa kome pripada xi je trivijalno. Medutim, formiranje unijedva podskupa je slozenije. Pretpostavimo da je unija(A,B) novi podskup sa imenom A. Tada svimelementima vektora X iz podskupa B treba promeniti ime u A.

32

Page 33: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Moguc je i drugi pristup ovom problemu, zasnovan na indirektnom adresiranju, pri cemu je nalazenjeunije jednostavno. Svaki elemenat vektora X je dvoclani slog. Prvi elemenat sloga je ime podskupakome elemenat pripada, a drugi - pokazivac ka nekom drugom slogu. U svakom podskupu treba dapostoji tacno jedan elemenat, ciji slog sadrzi prazan pokazivac nil; ime tog elementa je po definiciji imepodskupa; za pokazivac tog elementa kazemo da je pokazivac podskupa. Ako je pokazivac elementaX[i] usmeren ka elementu X[j], onda je ime podskupa koji sadrzi X[i] jednako imenu podskupa kojisadrzi X[j]. Prethodni uslov obezbeduje da ova definicija bude ispravna: nemoguce je da se podskupsastoji od elemenata sa indeksima i1, i2, . . . , ik,i da pored toga pokazivac X[ij ] bude usmeren ka X[ij+1],j = 1, 2, . . . , k − 1, a da je pokazivac X[ik] usmeren ka X[i1] - tada ni jedan elemenat podskupa ne biimao pokazivac nil. Na pocetku su svi pokazivaci nil, tj. vektor X zadaje n jednoclanih podskupova.Operacija unija(A,B) izvodi se tako sto se pokazivac podskupa A usmeri ka elementu, ciji je pokazivacistovremeno i pokazivac podskupa B (ili obrnuto). Posle nekoliko formiranja unija, vektor X zadajenekoliko stabala. Svako stablo odgovara podskupu, a svaki cvor elementu. Elemenat u korenu stablasluzi kao ime podskupa. Da bi se pronaslo ime podskupa kome pripada elemenat G, treba pratiti lanacpokazivaca do korena stabla, sloga sa pokazivacem nil. Ovo podseca na situaciju kad neko promeniadresu: umesto da svima javlja da je promenio adresu, on na staroj adresi ostavlja svoju novu adresu(sa molbom da mu dostavljaju prispelu postu) - sto je jednostavnije. Naravno, nalazenje prave adreseje sada nesto slozenije, odnosno operacija nalazenja podskupa kome elemenat pripada je manje efikasna(narocito ako su izduzena stabla koja predstavljaju podskupove).

Slika 16: Struktura podataka za formiranje unija skupova

Ideja na kojoj se zasniva efikasna struktura za nalazenje unija je da se stabla uravnoteze, odnosnoskrate. Unija podskupova A i B na slici moze se formirati usmeravanjem pokazivaca A ka B, ili usmera-vanjem pokazivaca B ka A. Ocigledno je da se u drugom slucaju dobija uravnotezenije stablo. Zakljucakse lako uopstava: pokazivac korena stabla sa manje elemenata (odnosno proizvoljnog od dva stabla akoim je broj elemenata jednak) treba usmeriti ka korenu stabla sa vecim brojem elemenata. Jasno je da priformiranju svake nove unije usput treba izracunavati i broj elemenata novog podskupa. Taj podatak sesmesta kao deo sloga u korenu stabla. Primenom ovog pravila se pri formirau unija postize da je visinastabla sa m elemenata uvek manja ili jednaka od log2m, sto pokazuje sledeca teorema.

Teorema: Ako se pri formiranju unija koristi uravnotezavanje, svako stablo visine h sadrzi bar 2h

elemenata.

Dokaz: Dokaz se izvodi indukcijom po broju formiranja unija. Tvrdenje je ocigledno tacno za prvuuniju: dobija se stablo visine jedan sa dva elementa. Posmatrajmo uniju podskupova A i B. Neka suvisine odgovarajucih stabala h(A),h(B), i neka je broj elemenata u A veci ili jednak od broja elemenatau B. Visina kombinovanog stabla jednaka je vecem od brojeva h(A) i h(B) + 1. Ako je veci h(A), ondanovo stablo ima visinu kao A, i vise elmenata nego stablo A, pa je tvrdenje teoreme tacno. U protivnom,novo stablo ima bar dva puta vise elemenata od stabla B (jer A ima bar toliko elemenata koliko B), avisina mu je za jedan veca od visine B, pa je tvrdenje teoreme takode tacno.

33

Page 34: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

24 Predstavljanje grafova: matrica povezanosti, lista povezano-sti.

Graf G = (V,E) sastoji se od skupa V cvorova i skupa E grana. Grana odgovara paru cvorova. Drugimrecima, grane predstavljaju relaciju između cvorova. Na primer, graf moze da predstavlja skup ljudi, ada grana povezuje dva coveka ako se oni poznaju.

Graf je usmeren, odnosno neusmeren ako su mu grane uređeni, odnosno neuređeni parovi. Ako seusmereni graf predstavlja crtezom, granama se dodaju strelice koje vode ka drugom cvoru iz uređenogpara. Jednostavan primer grafa je stablo.

Uobicajena su dva nacina predstavljanja grafova:

Prvi je matrica povezanosti grafa. Neka je |V | = n i V = v1, v2, ..., vn. Matrica povezanostigrafa G je kvadratna matrica A = (aij) reda n, sa elementima aij = 1 akko (vi, vj) ∈ E, a ostali elementimatrice A su nule. Ako je graf neusmeren, matrica A je simetricna. Vrsta i ove matrice je dakle vektorduzine n cija je j-ta koordinata jednaka 1 ako iz cvora vi vodi grana u cvor vj , odnosno 0 u protivnom.Nedostatak matrice povezanosti je to sto ona uvek zauzima prostor velicine n2, nezavisno od toga kolikograna ima graf. Svakom cvoru grafa pridruzuje se vektor duzine n. Ako je broj grana u grafu mali,vecina elemenata matrice povezanosti bice nule.

Umesto da se i sve nepostojece grane eksplicitno predstavljaju u matrici povezanosti, mogu se formiratipovezane liste od jedinica iz i-te vrste, i = 1, 2, ..., n. Ovaj drugi nacin predstavljanja grafa zove se listapovezanosti. Svakom cvoru pridruzuje se povezana lista, koja sadrzi sve grane susedne cvoru (odnosnograne ka susednim cvorovima). Lista moze biti uređena prema rednim brojevima cvorova na krajevimanjenih grana. Graf je predstavljen vektorom lista. Svaki elemenat vektora sadrzi ime (indeks) cvora ipokazivac na njegovu listu cvorova. Ako je graf staticki, odnosno nisu dozvoljena umetanja i brisanja,onda se liste mogu predstaviti vektorima na sledeci nacin. Koristi se vektor duizne |V | + |E|. Prvih|V | clanova vektora su pridruzeni cvorovima. Komponenta vektora pridruzena cvoru vi sadrzi indekspocetka spiska cvorova susednih cvoru vi, i = 1, 2, ..., n. Na slici 17 prikazana su na jednom primeru obanacina predstavljanja grafa.

Slika 17: Predstavljanje grafa matricom povezanosti (a), odnosno listom povezanosti (b)

Sa matricama povezanosti je jednostavnije raditi. S druge strane, liste povezanosti su efikasnije zagrafove sa malim brojem grana. U praksi se cesto radi sa grafovima koji imaju znatno manje grana odmaksimalnog moguceg broja (n(n − 1)/2 neusmerenih, odnosno n(n − 1) usmerenih grana), i tada jeobicno bolje koristiti liste povezanosti.

34

Page 35: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

25 Nalazenje Ojlerovog ciklusa u povezanom neusmerenom grafu.

Da li je moguce u povezanom grafu pronaci ciklus, koji svaku granu sadzri tacno jednom. Ili: da lije moguce nacrtati graf ne dizuci olovku sa papira, tako da olovka svoj put zavrsi na mestu sa koga je ikrenula.Ovakav obilazak je moguc ako i samo ako je graf povezan i svi njegovi cvorovi imaju paran stepen. Takvigrafovi zovu se Ojlerovi grafovi.Dokaz teoreme indukcijom, koji sledi, daje efikasan algoritam za nalazenje Ojlerovog ciklusa u grafu.

Problem: U zadatom neusmerenom povezanom grafu G = (V,E) ciji svi cvorovi imaju paran ste-pen, pronaci zatvoreni put P, takav da se u njemu svaka grana iz E pojavljuje tacno jednom.

Dokaz: Lako je pokazati da ako u grafu postoji Ojlerov ciklus, onda svi cvorovi grafa moraju imatiparan stepen. Za vreme obilaska zatvorenog ciklusa, u svaki cvor se ulazi isto toliko puta koliko puta seiz njega izlazi. Posto se svaka grana prolazi tacno jednom, broj grana susednih proizvoljnom cvoru morabiti paran. Da bismo indukcijom dokazali da je uslov dovoljan, moramo najpre da izaberemo parametarpo kome ce biti izvedena indukcija. Taj izbor treba da omoguci smanjivanje problema, bez njegovepromene. Ako uklonimo cvor iz grafa, stepeni cvorova u dobijenom grafu nisu vise svi parni. Trebalo bida uklonimo takav skup grana S, da za svaki cvor v, broj grana iz S susednih sa v bude paran (makar i0). Proizvoljan ciklus zadovoljava ovaj uslov, pa se postavlja pitanje da li Ojlerov graf uvek sadrzi ciklus.Pretpostavimo da smo zapoceli obilazak grafa iz proizvoljnog cvora v proizvoljnim redosledom. Sigurnoje da ce se obilazak ranije ili kasnije zavrsiti u cvoru v, jer kad god udemo u neki cvor, smanjujemonjegov stepen za jedan, cinimo ga neparnim, pa ga uvek mozemo i napustiti. Naravno, ovakav obilazakne mora da sadrzi sve grane grafa.Sada mozemo da formulisemo induktivnu hipotezu.

Induktivna hipoteza: Povezani graf sa < m grana ciji svi cvorovi imaju paran stepen, sadrzi Oj-lerov ciklus, koji se moze pronaci.

Posmatrajmo graf G = (V,E) sa m grana. Neka je P neki ciklus u G, i neka je G′ graf dobijenuklanjanjem grana koje cine P iz grafa G. Stepeni svih cvorova u G′ su parni, jer je broj uklonjenihgrana susednih bilo kom cvoru paran. Ipak se induktivna hipoteza ne moze primeniti na graf G′, jer onne mora biti povezan. Neka su G′1, G′2, ..., G′k komponente povezanosti grafa G′. U svakoj komponentistepeni svih cvorova su parni. Pored toga, broj grana u svakoj komponenti je manji od m (njihov ukupanbroj grana manji je od m). Prema tome, induktivna hipoteza moze se primeniti na sve komponente: usvakoj komponenti G′i postoji Ojlerov ciklus P ′i , i mi znamo da ga pronademo. Potrebno je sada sve ovecikluse objediniti u jedan Ojlerov ciklus za graf G. Polazimo iz bilo kog cvora ciklusa P (”magistralnogputa”) sve dok ne dodemo do nekog cvora vj koji pripada komponenti G′j . Tada obilazimo komponentuG′j ciklusom Pj (”lokalnim putem”) i vracamo se u cvor vj . Nastavljajuci na taj nacin, obilazeci ciklusekomponenti u trenutku nailaska na njih, na kraju cemo se vratiti u polaznu tacku.U tom trenuku sve grane grafa G prodene su tacno jednom, sto znaci da je konstruisan Ojlerov ci-klus. Algoritam ipak nije sasvim kompletan: potreban nam je efikasan metod za izdvajanje komponentipovezanosti grafa, odnosno za obilazak grafa. Oba ova problema bie razmatrana u sledecem odeljku

26 Pretraga u dubinu neusmerenog grafa.

Preporucuje se ucenje kodova.

Neusmereni grafovi: Opis pretrage grafa u dubinu (DFS) odgovara polasku kroz galeriju. Uvek se tru-dimo da prođemo kroz neposeceni hodnik i kada se nađemo na raskrsnici, ostavimo kamencic. Kadanaiđemo na hodnik koji ne vodi nikud, ili na vec posecenu raskrsnicu, mi se vracamo nazad do prethodneraskrsnice i pokusavamo da uđemo u novi hodnik. Ako nema neposecenog, idemo nazad itd. Osnovnirazlog upotrebljivosti DFS pretrage je jednostavna implementacija koriscenjem rekurzije.

Za neusmereni graf predstavljen listom povezanosti algoritam pocinje od zadatog cvora v koji predstavljakoren pretrage u dubinu. On se oznacava kao posecen i onda se vrsi rekurzivni poziv za proizvoljan cvorw koji je sused cvora v. Iz rekurzivnog poziva nekog cvora se izlazi tek ako ne postoji susedan cvor zakoji se moze pozvati dalja pretraga u dubinu.

35

Page 36: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Kako bi imao sto vecu upotrebljivost, DFS algoritam razlikuje ulaznu i izlaznu obradu pri poseti cvora.Ulazna obrada se vrsi u trenutku ulaska u novi rekurzivni poziv, dok se izlazna vrsi kada se rekurzivnipoziv zavrsava. Oni zavise od same primene DFS algoritma.

Pseudo kod uopstenog algoritma DFS:

DFS(G, v)

begin

oznaciti v;

preWork na v;

for sve grane (v, w) do

if w nije oznacen then DFS(G, w);

postWork na (v, w);

end

Sledecom lemom je obezbeđena ispravnost DFS algoritma:

Lema: Ako je graf G povezan, onda ce algoritmom pretrage u dubinu svi njegovi cvorovi biti oznaceni, asve njegove grane bice u toku izvrsavanja algoritma pregledane bar po jednom.4: Pretpostavimo suprotno, i oznacimo sa U skup neoznacenih cvorova zaostalih posle izvrsavanja algo-ritma. Posto je G povezan, bar jedan cvor iz U mora biti povezan granom sa nekim oznacenim cvorom.Međutim, ovako nesto je nemoguce, jer kad god se poseti cvor, moraju biti poseceni (pa dakle i oznaceni)svi njegovi neoznaceni susedi. Posto su svi cvorovi poseceni, a kad se cvor poseti, onda se pregledaju svegrane koje vode iz njega, zakljucujemo da su i sve grane grafa pregledane. 2

Pseudo kod za pravljenje DFS stabla:

T = prazan_graf();

DFS_stablo(G, v)

begin

oznaciti v;

for sve grane (v, w) do

if w nije oznacen then

dodati (v, w) u T;

DFS(G, w);

end

Numeracija i DFS stablo imaju bitnu ulogu u mnogim algoritmima cak iako graf nije eksplicitno zadat.

DFS Numeracija moze biti dolazna ili odlazna koje odgovaraju ulaznoj i izlaznoj obradi. Pretposta-vimo da cvorovi imaju polja num1 i num2 koji treba da oznacavaju njihovu dolaznu, odnosno odlaznunumeraciju. Za preorder (dolaznu) numeraciju, potrebno je u preWork delu DFS algoritma staviti kodc1 = c1 + 1; v.Pre = c1, dok je za postorder (odlaznu) numeraciju potrebno u postWork delu sta-viti kod if w je poslednji u petlji then c2 = c2 + 1; v.Post = c2, pri cemu su c1 i c2

inicijalizovani na 0 pre prvog poziva.

36

Page 37: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slika 18: Primer pretrage u dubinu. Dva broja uz cvor jednaka su njegovim rednim brojevima pridolaznoj, odnosno odlaznoj DFS numeraciji.

Algoritam za nalazenje komponenti grafa:

Algoritam Komponente_povezanosti(G);

Ulaz: G = (V, E) (neusmereni graf);

Izlaz: v.Komp za svaki cvor v dobija vrednost jednaku rednom broju komponente povezanosti

koja sadrzi v;

begin

Rb.komp := 1;

while postoji neoznacen cvor v do

DFS(G, v);

u preWork DFS algoritma treba staviti: v.Komp := Rb.komp;

Rb.komp := Rb.komp + 1;

end

27 Pretraga grafa u sirinu.

Preporucuje se ucenje kodova.

Pretraga u sirinu (BFS) obilazak je grafa na sistematican nacin, nivo po nivo. Ako polazimo od cvorav, onda se najpre posecuju svi susedi v (deca u stablu pretrage, nivo jedan). Zatim se dolazi do svih”unuka” (nivo dva), i tako dalje. Obilazak se realizuje listom FIFO.

Prilikom obilaska cvorovi se mogu numerisati BFS brojevima, slicno kao pri DFS. Preciznije, cvor w imaBFS broj k ako je on k-ti cvor oznacen u toku BFS. BFS stablo grafa moze se formirati ukljucivanjemsamo grana ka novooznacenim cvorovima. Izlazna obrada ovde nema smisla.

Pseudo kod algoritma BFS (i pravljenja stabla T)

BFS(G, v);

begin

oznaci v;

upisi v u red; red = FIFO lista

while red je neprazan do

skini prvi cvor w sa reda;

preWork na w; ulazna obrada zavisi od primene BFS

for sve grane (w, x) za koje x nije oznacen do

oznaci x;

dodaj (w, x) u stablo T;

upisi x u red;

end

37

Page 38: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Lema: Ako grana (u,w) pripada BFS stablu i cvor u je otac cvora w, onda cvor u ima minimalni BFSbroj među cvorovima iz kojih postoji grana ka w.4 : Ako bi u grafu postojala grana (v, w), pri cemu v ima manji BFS broj od u, onda bi u trenutkuobrade v na listu morao biti stavljen cvor w, pa bi grana (v, w) morala biti ukljucena u stablo, suprotnopretpostavci. 2

Lema: Put od korena r BFS stabla do proizvoljnog cvora w kroz BFS stablo najkraci je put od r dow u grafu G.4 : Indukcijom po d dokazacemo da do svakog cvora w na rastojanju d od korena r (jedinstveni) putkroz stablo od r do v ima duzinu d. Za d = 1 tvrđenje je tacno: grana (r, w) je obavezno deo stabla,pa između r i w postoji put kroz stablo duzine 1. Pretpostavimo da je tvrđenje tacno za cvorove kojisu na rastojanju manjem od d od korena, i neka je w neki cvor na rastojanju d od korena, tj. postojiniz cvorova w0 = r, w1, w2, ..., wd = w koji cine put duzine d od r do w. Prema induktivnoj hipoteziput od r do wd−1 kroz stablo ima duzinu d− 1. U trenutku obrade cvora wd1

, posto u G postoji grana(wd−1, wd), ta grana se ukljucuje u BFS stablo, pa do cvora wd postoji put duzine d kroz stablo. 2

Nivo cvora w je duzina puta u stablu od korena do w. Pretraga u sirinu obilazi graf nivo po nivo.

Lema: Ako je (v, w) grana iz E koja ne pripada T , onda ona spaja dva cvora ciji se nivoi razlikujunajvise za jedan.4 : Neka je npr. cvor v prvi dostignut pretragom i neka je njegov nivo d. Tada je nivo cvora w veci ilijednak od d. Taj nivo jednak je rastojanju w od korena, pa je manji ili jednak od d+ 1, jer do w postojiput duzine d+ 1 (put od korena do v produzen granom (v, w)). 2

28 Topolosko sortiranje aciklickog grafa

Pretpostavimo da je zadat skup poslova na ciji redosled izvrsavanja su zadata neka ogranicenja. Nekiposlovi zavise od drugih, odnosno ne mogu se zapoceti pre nego sto se ti drugi poslovi zavrse. Svezavisnosti su poznate, a cilj je napraviti takav redosled izvrsavanja poslova koji zadovoljava sva zadataogranicenja; drugim recima, trazi se takav raspored, da se po njemu svaki posao zapocie tek kad buduzavrseni svi poslovi od kojih on zavisi. Potrebno je konstruisati efikasni algoritam za formiranje takvograsporeda. Problem se zove topolosko sortiranje. Zadatim poslovima i njihovim meduzavisnostima mozese na prirodan nacin pridruziti graf. Svakom poslu pridruzuje se cvor, a usmerena grana od posla xdo posla y postoji ako se posao y ne moze zapoceti pre zavrsetka posla x. Jasno je da graf mora bitiaciklicki, (bez usmerenih ciklusa), jer se u protivnom neki poslovi nikada ne bi mogli zapoceti.

Problem: U zadatom usmerenom acikliqkom grafu G = (V;E) sa n cvorova numerisati cvorove od1 do n, tako da ako je proizvoljan cvor v numerisan sa k, onda svi cvorovi do kojih postoji usmereni putiz v imaju broj veci od k.

Induktivna hipoteza: Umemo da numerisemo na zahtevani nacin cvorove svih usmerenih aciklickihgrafova sa manje od n cvorova. Bazni slucaj jednog cvora, odnosno posla, je trivijalan. Kao i obicno,posmatrajmo proizvojni graf sa n cvorova, uklonimo jedan cvor, primenimo induktivnu hipotezu ipokusajmo da prosirimo numeraciju na polazni graf. Imamo slobodu izbora n-tog cvora. Trebalo biga izabrati tako da ostatak posla bude sto jednostavniji. Potrebno je numerisati cvorove. Najlakse jenumerisati cvor koji ne zavisi od drugih poslova, odnosno cvor sa ulaznim stepenom nula; njemu se mozedodeliti broj 1. Uvek moze pronaci cvor sa ulaznim stepenom nula jer se sa oznacavanjem negde morazapoceti. Sledeca lema potvrduje ovu cinjenicu.

Lema: Usmereni aciklicki graf uvek ima cvor sa ulaznim stepenom nula.

4 :Ako bi svi cvorovi grafa imali pozitivne ulazne stepene, mogli bismo da krenemo iz nekog cvora ”una-zad”prolazeci grane u suprotnom smeru. Medutim, broj cvorova u grafu je konacan, pa se u tom obilaskumora u nekom trenutku naici na neki cvor po drugi put, sto znaci da u grafu postoji ciklus. Ovo jemedutim suprotno pretpostavci da se radi o aciklickom grafu.Na slican nacin zakljucuje se da u grafu mora postojati i cvor sa izlaznim stepenom nula.

38

Page 39: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Pretpostavimo da smo pronasli cvor sa ulaznim stepenom nula. Numerisimo ga sa 1, uklonimo svegrane koje vode iz njega, i numerisimo ostatak grafa (koji je takode aciklicki) brojevima od 2 do n(prema induktivnoj hipotezi oni se mogu numerisati od 1 do n-1, a zatim se svaki redni broj moze pove-zati za jedan). Vidi se da je posle izbora cvora sa ulaznim stepenom nula, ostatak posla jednostavan.

Realizacija: Jedini problem pri realizaciji je kako pronaci cvor sa ulaznim stepenom nula i kako popra-viti ulazne stepene cvorova posle uklanjanja grane. Svakom cvoru moze se pridruziti promenljiva (polje)UlStepen, tako da je na pocetku v:UlStepen jednako ulaznom stepenu cvora v. Pocetne vrednosti pro-menljivih UlStepen mogu se dobiti prolaskom kroz skup svih grana proizvoljnim redosledom (korisecemDFS, na primer) i povecavanjem za jedan w:UlStepen svaki put kad se naide na granu (v;w). Cvorovi saulaznim stepenom nula stavljaju se u listu (ili stek, sto je jednako dobro). Prema lemi u grafu postojibar jedan cvor v sa ulaznim stepenom nula. Cvor v se kao prvi u listi lako pronalazi; on se uklanja izliste. Zatim se za svaku granu (v;w) koja izlazi iz v brojac w:UlStepen smanjuje za jedan. Ako brojacpri tome dobije vrednost nula, cvor w stavlja se u listu. Posle uklanjanja cvora v graf ostaje aciklicki, pau njemu prema lemi ponovo postoji cvor sa ulaznim stepenom nula. Algoritam zavrsava sa radom kadlista sa cvorovima stepena nula postane prazna, jer su u tom trenutku svi cvorovi numerisani.

Algoritam Top sort(G);

Ulaz: G = (V;E) (usmereni aciklicki graf).

Izlaz: v:Rb za svaki qvor v dobija vrednost u skladu sa topoloskim sortiranjem G.

begin

Inicijalizovati v:UlStepen za sve cvorove; npr. pomocu DFS

G rb := 0;

for i := 1 to n do

if v_i:UlStepen = 0 then stavi v_i u listu;

while lista nije prazna

skini cvor v iz liste;

G rb := G rb + 1;

v:Rb := G rb;

for sve grane (v;w) do

w:UlStepen := w:UlStepen - 1;

if w:UlStepen = 0 then stavi w u listu;

end

Slozenost: Slozenost zracunavanja pocetnih vrednosti promenljivih UlStepen je O(‖V ‖ + ‖E‖). Zanalazenje cvora sa ulaznim stepenom nula potrebno je konstantno vreme (pristup listi). Svaka grana(v;w) razmatra se tacno jednom, u trenutku kad se v uklanja iz liste. Prema tome, broj promena vrednostiUlStepen jednak je broju grana u grafu. Vremenska slozenost algoritma je dakle O(‖V ‖+‖E‖), odnosnolinearna je funkcija od velicine ulaza.

29 Nalazenje svih najkracih puteva iz zadatog cvora grafa —aciklicki slucaj.

Pokusacemo indukcijom po broju cvorova.Bazni slucaj je trivijalan. Neka je |V | = n. Mozemo da iskoristimo topolosko sortiranje grafa iz pret-hodnog pitanja. Ako je redni broj cvora v jednak k, onda se cvorovi sa rednim brojevima manjim od kne moraju razmatrati: ne postoji nacin da se do ih dode iz v. Pored toga, redosled dobijen topoloskimsortiranjem je pogodan za primenu indukcije. Posmatrajmo poslednji cvor, odnosno cvor z sa rednimbrojem n.

Pretpostavimo (induktivna hipoteza) da znamo najkrace puteve od v do svih ostalih cvorova, sem do z.Oznacimo duzinu najkraceg puta od v do w sa w.SP . Da bismo odredili z.SP , dovoljno je da proverimosamo one cvorove w iz kojih postoji grana do z. Posto se najkraci putevi do ostalih cvorova vec znaju,z.SP jednako je minimumu zbira w.SP + duzina(w, z), po svim cvorovima w iz kojih vodi grana do z.

Da li je time problem resen? Pitanje je da li dodavanje cvora z moze da skrati put do nekog dru-gog cvora. Medutim, posto je z poslednji cvor u topoloskom redosledu, ni jedan drugi cvor nije dostizan

39

Page 40: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

iz z, pa se duzine ostalih najkracih puteva ne menjaju. Dakle, uklanjanje z, nalazenje najkracih putevabez njega, i vracanje z nazad su osnovni delovi algoritma. Drugim recima, sledeca induktivna hipotezaresava problem.

Induktivna hipoteza: Ako se zna topoloski redosled cvorova, umemo da izracunamo duzine naj-kracih puteva od v do prvih n− 1 cvorova. Kad je dat aciklicki graf sa n cvorova (topoloski uredenih),uklanjamo n-ti cvor, indukcijom resavamo smanjeni problem, nalazimo najmanju medu vrednostimaw.SP + duzina(w, z), za sve cvorove w takve da (w, z) 2|E|.

Algoritam Acikl najkr putevi(G, v, n)Ulaz: G = (V,E) (tezinski aciklicki graf), v (cvor) i n (broj cvorova).Izlaz: za svaki cvor w ∈ V , w.SP je duzina najkraceg puta od v do w.Pretpostavljamo da je vec izvrseno topolosko sortiranje.Pre poziva ove procedure stavlja se z.SP :=∞ za sve cvorove z 6= v.

begin

neka je z cvor sa rednim brojem n u topoloskom redosledu;

if z != v then

Acikl_najkr_putevi(G-z, v, n-1);

G-z dobija se uklanjanjem z sa svim susednim granama iz G

for sve cvorove w takve da je (w, z) iz E do

if w.SP + duzina(w, z) < z:SP then

z.SP := w.SP + duzina(w, z);

else

v.SP := 0;

end

Sada cemo pokusati da usavrsimo algoritam tako da se topolosko sortiranje obavlja istovremeno sanalazenjem najkracih puteva. Drugim recima, cilj je objediniti dva prolaza (za topolosko sortiranje inalazenje najkracih puteva) u jedan.

Razmotrimo nacin na koji se algoritam rekurzivno izvrsava (posle nalazenja topoloskog redosleda). Pret-postavimo, zbog jednostavnosti, da je redni broj cvora v u topoloskom redosledu 1 (cvorovi sa rednimbrojem manjim od rednog broja v ionako nisu dostizni iz v).Prvi korak je poziv rekurzivne procedure. Procedura zatim poziva rekurzivno samu sebe, sve dok se nedode do cvora v. U tom trenutku se duzina najkraceg puta do v postavnja na 0, i rekurzija pocinje da se”razmotava”. Zatim se razmatra cvor u sa rednim brojem 2; duzina najkraceg puta do njega izjednacujese sa duzinom grane (v, u), ako ona postoji; u protivnom, ne postoji put od v do u.Sledeci korak je provera cvora x sa rednim brojem 3. U ovom slucaju u x ulaze najvise dve grane (od vili u), pa se uporeduju duzine odgovarajucih puteva.

Umesto ovakvog izvrsavanja rekurzije unazad, pokusacemo da iste korake izvrsimo preko niza cvorovasa rastucim rednim brojevima. Indukcija se primenjuje prema rastucim rednim brojevima pocevsi odv. Ovaj redosled oslobada nas potrebe da redne brojeve unapred znamo, pa cemo biti u stanju daizvrsavamo istovremeno oba algoritma. Pretpostavimo da su duzine najkracih puteva do cvorova sarednim brojevima od 1 do m poznati, i razmotrimo cvor sa rednim brojem m+ 1, koji cemo oznacavatisa z. Da bismo pronasli najkraci put do z, moramo da proverimo sve grane koje vode u z. Topoloskiredosled garantuje da sve takve grane polaze iz cvorova sa manjim rednim brojevima.Prema induktivnoj hipotezi ti cvorovi su vec razmatrani, pa se duzine najkracih puteva do ih znaju. Zasvaku granu (w, z) znamo duzinu w.SP najkraceg puta do w, pa je duzina najkraceg puta do z prekow jednaka w.SP + duzina(w, z). Pored toga, kao i ranije, ne moramo da vodimo racuna o eventualnimpromenama najkracih puteva ka cvorovima sa manjim rednim brojevima, jer se do njih ne moze doci iz z.

Algoritam Acikl najkr putevi2(G, v)Ulaz: G = (V;E) (tezinski aciklicki graf), v (cvor G).Izlaz: za svaki cvor w ∈ V , w.SP je duina najkraceg puta od v do w.Nerekurzivna verzija prethodnog algoritma koja obavlja i topolosko sortiranje.

begin

for sve cvorove w do

40

Page 41: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

w.SP := 1;

Inicijalizuj v.UlStepen za sve cvorove; ulazni stepeni qvorova; npr. DFS

for i := 1 to n do

if v_i.UlStepen = 0 then stavi v_i u listu;

v.SP := 0;

while lista nije prazna

skini cvor w iz liste;

for sve grane (w, z) do

if w.SP + duzina(w, z) < z.SP then

z.SP := w.SP + duzina(w, z);

z.UlStepen := z.UlStepen - 1;

if z.UlStepen = 0 then

stavi z u listu;

end

Slozenost: Svaka grana se po jednom razmatra u toku inicijalizacije ulaznih stepenova, i po jednom utrenutku kad se njen polazni cvor uklanja iz liste. Pristup listi zahteva konstantno vreme. Svaki cvor serazmatra tacno jednom. Prema tome, vremenska slozenost algoritma u najgorem slucaju je O(|V |+ |E|).

30 Nalazenje svih najkracih puteva iz zadatog cvora grafa

Kad graf nije aciklicki, ne postoji topoloski redosled, pa se razmatrani algoritmi ne mogu direktnoprimeniti. Jednostavnost razmotrenih algoritama posledica je sledece osobine topoloskog redosleda:

Ako je z cvor sa rednim brojem k, onda (1) ne postoje putevi od z do cvorova sa rednim brojevimamanjim od k, i (2) ne postoje putevi od cvorova sa rednim brojevima vecim od k do z.

Ova osobina omogucuje nam da nacemo najkraci put od v do z, ne vodeci racuna o cvorovima kojisu posle z u topoloskom redosledu. Moze li se nekako definisati redosled cvorova proizvoljnog grafa kojibi omogucio nesto slicno? Ideja je razmatrati cvorove grafa redom prema duzinama najkracih puteva donjih od v. Te duzine se na pocetku, naravno, ne znaju; one se izracunavaju u toku izvrsavanja algoritma.

Najpre proveravamo sve grane koje izlaze iz v. Neka je (v, x) najkraca medu njima. Posto su popretpostavci sve duzine grana pozitivne, najkraci put od v do x je grana (v, x). Duzine svih drugihputeva do x su vece ili jednake od duzine ove grane. Prema tome, znamo najkraci put do x, i to mozeda posluzi kao baza indukcije. Pokusajmo da napravimo sledeci korak. Kako mozemo da pronademonajkraci put do nekog drugog cvora? Biramo cvor koji je drugi najblizi do v (x je prvi najblizi). Jediniputevi 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 cvora x. Neka je sa duzina(u, w) oznacena duzina grane (u, w). Biramo najmanji odizraza duzina(v, y) (y 6= x) ili duzina(v, x) + duzina(x, z) (z 6= v). Jos jednom zakljucujemo da se drugiputevi ne moraju razmatrati, jer je ovo najkraci put za odlazak iz v (izuzev do x). Moze se formulisatisledeca induktivna hipoteza.

Induktivna hipoteza: Za zadati graf i njegov cvor v, umemo da pronademo k cvorova najblizih cvoruv, kao i duzine najkracih puteva do njih. Zapazimo da je indukcija po broju cvorova do kojih su duzinenajkracih puteva vec izracunate, a ne po velicini grafa. Pored toga, pretpostavlja se da su to cvorovinajblizi cvoru v, i da umemo da ih pronademo. Mi umemo da pronademo prvi najblizi cvor, pa je baza(slucaj k = 1) resena. Kad k dobije vrednost |V | − 1, resen je kompletan problem. Oznacimo sa Vk skupkoji se sastoji od v i k njemu najblizih cvorova.

Problem je pronaci cvor w koji je najblizi cvoru v medu cvorovima van Vk, i pronadi najkraci putod v do w. Najkraci put od v do w moze da sadrzi samo cvorove iz Vk. On ne moze da sadrzi neki cvor yvan Vk, jer bi y bio blizi cvoru v od w. Prema tome, da bismo pronasli cvor w, dovoljno je da proverimograne koje spajaju cvorove iz Vk sa cvorovima koji nisu u Vk; sve druge grane se za sada mogu ignorisati.Neka je (u, z) grana takva da je u ∈ Vk i z /∈ Vk. Takva grana odreduje put od v do z koji se sastoji odnajkraceg puta od v do u (prema induktivnoj hipotezi vec poznat) i grane (u, z). Dovoljno je uporeditisve takve puteve i izabrati najkraci medu njima.

41

Page 42: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Algoritam odreden ovom induktivnom hipotezom izvrsava se na sledeci nacin. U svakoj iteraciji do-daje se novi cvor. To je cvor w za koji je najmanja duzina

minu.SP + duzina(u,w)|u ∈ Vk (6.1)

medu svim cvorovima w /∈ Vk. Iz vec iznetih razloga, w je zaista (k + 1)-vi (sledeci) najblizi cvor cvoruv. Prema tome, njegovo dodavanje produzuje induktivnu hipotezu.

Algoritam je sada kompletno specificiran, ali mu se efikasnost moze poboljsati. Osnovni korak algo-ritma je pronalazenje sledeceg najblizeg cvora. To se ostvaruje izracunavanjem najkraceg puta prema(6.1). Medutim, nije neophodno u svakom koraku proveravati sve vrednosti u.SP + duzina(u,w).

Vecina tih vrednosti ne menja se pri dodavanju novog cvora: mogu se promeniti samo one vrednostikoje odgovaraju putevima kroz novododati cvor. Mi mozemo da pamtimo duzine poznatih najkracihputeva do svih cvorova van Vk, i da im popravljamo vrednosti samo pri prosirivanju Vk. Jedini nacinda se dobije novi najkraci put posle dodavanja w u Vk je da taj put prolazi kroz w. Prema tome,treba proveriti sve grane od w ka cvorovima van Vk. Za svaku takvu granu (w, z) uporedujemo duzinuw.SP + duzina(w, z) sa vrednoscu z.SP , i po potrebi popravljamo z.SP . Svaka iteracija obuhvatanalazenje cvora sa najmanjom vrednoscu SP, i popravku vrednosti SP za neke od preostalih cvorova.Ovaj algoritam poznat je kao Dijkstrin algoritam (Dijkstra ).

Realizacija: Potrebno je da pronalazimo najmanju vrednost u skupu duzina puteva i da cesto po-pravljamo duzine puteva. Dobra struktura podataka za nalazenje minimalnih elemenata i za popravkeduzina elemenata je hip. Posto je potrebno da pronademo cvor sa najmaom duzinom puta do njega, svecvorove van skupa Vk cuvamo u hipu, sa kljucevima jednakim duzinama trenutno najkracih puteva od vdo ih. Na pocetku su sve duzine puteva sem jedne jednake 1, pa redosled elemenata u hipu nije bitan, semsto v mora biti na vrhu. Nalazenje cvora w je jednostavno: on se uzima sa vrha hipa. Mogu se proveritisve grane (w, u), i zatim bez teckoca popraviti duzine puteva. Medutim, kad se promeni duzina putado nekog cvora z, moze se promeniti polozaj z u hipu. Prema tome, potrebno je na odgovarajuci nacinpopravljati hip (problem je u tome sto hip kao struktura podataka ne omogucuje efikasno pronalazenjezadatog elementa). Lociranje cvora z u hipu moze se izvesti pomocu druge strukture podataka povezanesa hipom. Podaci o svim cvorovima mogu se smestiti u vektor sa pokazivacima na njihove pozicije u hipu.Nalazenje cvora u hipu je zbog toga ekvivalentno pristupanju elementu vektora. Posto su elementi hipacvorovi grafa, prostorna slozenost je O(|V |), sto je prihvatljivo. Duzine puteva mogu samo da opadaju.Ako neki elemenat hipa postane manji od oca, on se moze zamenjivanjem pomerati navise dok mu sene pronade odgovarajuci polozaj. To je isti postupak kao i pri obicnom postupku popravke hipa (priumetanju elementa u hip, na primer).

Algoritam Najkr putevi(G, v)Ulaz: G = (V, E) (teinski usmereni graf), v (polazni cvor).Izlaz: za svaki cvor w, w.SP je duzina najkraceg puta od v do w.Pretpostavka je da su sve duzina grana nenegativne.

begin

for sve cvorove w do

w.Oznaka := false; oznaceni cvorovi su u V_k

w.SP := ∞;

v.SP := 0;

while postoji neoznacen cvor do

neka je w neoznaceni cvor sa najmanjom vrednoscu w.SP;

w.Oznaka := true; ukljucivanje w u V_k

for sve grane (w, z) takve da je z neoznacen do

if w.SP + duzina(w, z) < z.SP then

z.SP := w.SP + duzina(w, z);

end

Slozenost: Popravka duzine puta zahteva O(logm) uporedivanja, gde je m velicina hipa. Ukupno ima|V | iteracija, i zbog toga |V | brisanja iz hipa. Popravke treba izvrsiti najvise |E| puta (jer svaka granamoze da prouzrokuje najvise jednu popravku), pa je potrebno izvrsiti najvise O(|E|·log|V |) uporedivanjau hipu. Prema tome, vremenska slozenost algoritma je O((|E|+ |V |) · log |V |). Zapaza se da je algoritam

42

Page 43: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

sporiji nego algoritam koji isti problem resava za aciklicke grafove: u drugom slucaju sledeci cvor seuzima iz (proizvoljno uredene) liste, i nikakve popravke nisu potrebne.

31 Minimalno povezujuce stablo grafa.

Razmotrimo sistem racunara koje treba povezati optickim kablovima. Potrebno je obezbediti da po-stoji veza izmedu svaka dva racunara. Poznati su troskovi postavljanja kabla izmedu svaka dva racunara.Cilj je projektovati mrezu optickih kablova tako da cena mreze bude minimalna.

Problem: Za zadati neusmereni povezani tezinski graf G = (V, E) konstruisati povezuje stablo Tminimalne cene. U ovom kontekstu tezine grana tezinskog grafa G su ustvari njihove cene. Prirodno jekoristiti sledecu induktivnu hipotezu.

Induktivna hipoteza (1): Umemo da konstruisemo MCST za povezani graf sa manje od m grana.Bazni slucaj je trivijalan. Ako je zadat problem MCST sa m grana, kako se on moze svesti na problemsa manje od m grana? Tvrdimo da grana najmanje tezine mora biti ukljucena u MCST. Ako ona nebi bila ukljucena, onda bi njeno dodavanje stablu MCST zatvorilo neki ciklus; uklanjanjem proizvoljnedruge grane iz tog ciklusa ponovo se dobija stablo, ali manje tezine — xto je u suprotnosti sa pretpo-stavkom o minimalnosti MCST. Dakle, mi znamo jednu granu koja mora da pripada MCST. Mozemoda je uklonimo iz grafa i primenimo induktivnu hipotezu na ostatak grafa, koji sada ima manje od mgrana. Da li je ovo regularna primena indukcije? Problem je u tome sto posle uklanjanja grane, preostaliproblem vise nije ekvivalentan polaznom. Prvo, izbor jedne grane ogranicava mogunosti izbora drugihgrana. Drugo, posle uklanjanja grane graf ne mora da ostane povezan. Resenje nastalog problema je uprecizirau induktivne hipoteze. Mi znamo kako da izaberemo prvu granu, ali ne mozemo da je uklonimoi prosto zaboravimo na nju, jer ostali izbori zavise od nje. Dakle, umesto da granu uklonimo, treba daje oznacimo, i da tu cinjenicu, njen izbor, koristimo dalje u algoritmu. Algoritam se izvrsava tako stose jedna po jedna grana bira i dodaje u MCST. Prema tome, indukcija je ne prema velicini grafa, negoprema broju izabranih grana u zadatom (fiksiranom) grafu.

Induktivna hipoteza (2): Za zadati povezan graf G = (V, E) umemo da pronademo podgraf Tsa k grana (k < |V | − 1), tako da je stablo T podgraf MCST grafa G.Bazni slucaj za ovu hipotezu smo vec razmotrili - on se odnosi na izbor prve grane. Pretpostavimo dasmo pronasli stablo T koje zadovoljava induktivnu hipotezu i da je potrebno da T prosirimo narednomgranom. Kako da pronademo novu granu za koju cemo biti sigurni da pripada MCST? Primenicemoslican pristup kao i pri izboru prve grane. Za T se vec zna da je deo konacnog MCST. Zbog toga uMCST mora da postoji bar jedna grana koja povezuje neki cvor iz T sa nekim cvorom u ostatku grafa.Pokusacemo da pronademo takvu granu. Neka je Ek skup svih grana koje povezuju T sa cvorovima vanT. Tvrdimo da grana sa najmanjom cenom iz Ek pripada MCST. Oznacimo tu granu sa (u, v) (videtisliku 22; grane stabla T su podebljane). Posto je MCST povezujue stablo, ono sadrzi tacno jedan put odu do v (izmedu svaka dva cvora u stablu postoji tacno jedan put). Ako grana (u, v) ne pripada MCST,onda ona ne pripada ni tom putu od u do v. Medutim, posto u pripada, a v ne pripada T, na tom putumora 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) najmanja medu cenama grana koje povezuju T sa ostatkom grafa. Sada mozemo daprimenimo slicno zakljucivanje kao pri izboru prve grane. Ako dodamo (u, v) stablu MCST, a izbacimo(x, y), dobijamo povezujuce stablo manje cene, sto je kontradikcija.

Realizacija: Opisani algoritam slican je algoritmu za nalazenje najkracih puteva od zadatog cvoraiz prethodnog odeljka. Prva izabrana grana je grana sa najmanjom cenom. T se definise kao stablo sasamo tom jednom granom. U svakoj iteraciji pronalazi se grana koja povezuje T sa nekim cvorom van T,a ima najmanju cenu. U algoritmu za nalazenje najkraih puteva od zadatog cvora trazili smo najkraciput do cvora van T. Prema tome, jedina razlika izmedu MCST algoritma i algoritma za nalazenje naj-kracih puteva je u tome sto se minimum trazi ne po duzini puta, nego po ceni grane. Ostatak algoritmaprenosi se prakticno bez promene. Za svaki cvor w van T pamtimo cenu grane minimalne cene do w odnekog cvora iz T, odnosno 1 ako takva grana ne postoji. U svakoj iteraciji mi na taj nacin biramo granunajmanje cene i povezujemo odgovarajuci cvor w sa stablom T. Zatim proveravamo sve grane susednecvoru w. Ako je cena neke takve grane (w, z) (za z /∈ T ) manja od cene trenutno najjeftinije poznategrane do z, onda popravljamo cenu cvora z.

43

Page 44: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Algoritam MCST(G)Ulaz: G (teinski neusmereni graf).Izlaz: T (minimalno povezujue stablo grafa G).

begin

Na pocetku je T prazan skupfor sve qvorove w do

w.Oznaka := false; w.Oznaka je true ako je w u T

w:Cena := ∞;

neka je (x; y) grana sa najmanjom cenom u G;

x:Oznaka := true; y ce biti oznaceno u glavnoj petljifor sve grane (x; z) do

z.Grana := (x; z); grana najmanje cene od T do zz:Cena := cena(x; z); cena grane z.Granawhile postoji neoznacen cvor do

neka je w neoznaceni cvor sa najmanjom vrednoscu w.Cena;

if w.Cena = ∞ then

print "G nije povezan";

halt;

else

w.Oznaka := true;

dodaj w.Grana u T;

sada popravljamo cene neoznacenih cvorova povezanih sa wfor 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

Slozenost: Slozenost ovog algoritma identicna je slozenosti algoritma za nalazenje najkracih rastojanjaod zadatog cvora iz prethodnog pitanja, O((|E|+ |V |) log |V |).

32 Nalazenje svih najkracih puteva u grafu.

Problem: Dat je tezinski graf G = (V, E) (usmereni ili neusmereni) sa nenegativnim tezinama(duzinama) grana. Pronaci puteve minimalne duzine izmedu svaka dva cvora. Ponovo, posto govorimoo najkracim putevima, tezine grana zovemo duzinama. Ovo je problem nalazenja svih najkracih puteva.Zbog jednostavnosti cemo se zadovoljiti nalazenjem duzina svih najkracih puteva, umesto samih puteva.Pretpostavljamo da je graf usmeren; sve sto ce biti receno vazi i za neusmerene grafove. Pored toga,pretpostavlja se da su duzine grana nenegativne.

Kako se menjaju najkraci putevi u grafu posle dodavanja nove grane (u,w)? Nova grana moze presvega da predstavlja kraci put izmedu cvorova u i w. Pored toga, moze se promeniti najkraci put izmeduproizvoljna druga dva cvora v1 i v2. Da bi se ustanovilo ima li promene, treba sa prethodno poznatomnajmanjom duzinom puta od v1 do v2 uporediti zbir duzina najkraceg puta od v1 do u, grane (u,w) iduzine najkraceg puta od w do v2. Ukupno, za svaku novu granu potrebno je izvrsiti O(|V |2) provera,pa je slozenost ovakvog algoritma u najgorem slucaju O(|E| · |V |2). Posto je broj grana najvise O(|V |2),slozenost ovog algoritma je O(|V |4).

Kako se menjaju najkraci putevi ako se u graf doda novi cvor u? Potrebno je da najpre pronadi duzinenajkracih puteva od u do svih ostalih cvorova, i od svih ostalih cvorova do u. Posto su duzine najkracihputeva koji ne sadrze u vec poznate, najkrai put od u do w mozemo da pronademo na sledeci nacin.Potrebno je da odredimo samo prvu granu na tom putu. Ako je to grana (u, v), onda je duzina najkracegputa od u do w jednaka zbiru duzine grane (u, v) i duzine najkraceg puta od v do w, koja je vec poznata.Potrebno je dakle da uporedimo ove duzine za sve grane susedne sa u, i da medu njima izaberemo naj-manju. Najkraci put od w do u moze se pronaci na slican nacin. Ali to sve nije dovoljno. Ponovo jepotrebno da za svaki par cvorova proverimo da li izmedu ih postoji novi kraci put kroz novi cvor u. Za

44

Page 45: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

svaka dva cvora v1 i v2, da bi se ustanovilo ima li promene, treba sa prethodno poznatom najmanjomduzinom puta od v1 do v2 uporediti zbir duzina najkraceg puta od v1 do u i duzine najkraceg puta odu do v2. To je ukupno O(|V |2) provera i sabiranja posle dodavanja svakog novog cvora, pa je slozenostovakvog algoritma u najgorem slucaju O(|V |3). Ispostavlja se da je efikasnija indukcija po broju cvorovanego po broju grana. Medutim, postoji jos bolja induktivna konstrukcija za resavanje ovog problema.Ideja je da se ne menja broj cvorova ili grana, nego da se uvedu ogranicenja na tip dozvoljenih puteva.Indukcija se izvodi po opadajucem broju takvih ogranicenja, tako da na kraju dolaze u obzir svi moguciputevi. Numerisimo cvorove od 1 do |V |. Put od u do w zove se k-put ako su redni brojevi svih cvorovana putu (izuzev u i w) manji ili jednaki od k. Specijalno, 0-put se sastoji samo od jedne grane (posto seni jedan drugi cvor ne moze pojaviti na putu).

Induktivna hipoteza: Umemo da odredimo duzine najkracih puteva izmedu svaka dva cvora, pricemu su dozvoljeni samo k-putevi, za k < m.Baza indukcije je slucaj m = 1, kad se razmatraju samo direktne grane i resenje je ocigledno. Pretpo-stavimo da je induktivna hipoteza tacna i da hocemo da je prosirimo na k ≤ m. Jedini novi putevi kojetreba da razmotrimo su m-putevi. Treba da pronademo najkrace m-puteve izmedu svaka dva cvora i daproverimo da li oni poboljsavaju k-puteve za k < m. Neka je vm cvor sa rednim brojem m. Proizvoljannajkraci m-put sadrzi vm najvise jednom. Najkraci m-put izmedu u i v sastoji se od najkraceg (m-1)-puta od u do vm, i najkraceg (m-1)-puta od vm do v. Prema induktivnoj hipotezi mi vec znamo duzinenajkracih k-puteva za k < m, pa je dovoljno da saberemo ove dve duzine (i zbir uporedimo sa duzinomnajkraceg (m-1)-puta od u do v) da bismo pronasli duzinu najkraceg m-puta od u do v. Ovaj algoritamje nesto brzi od prethodnog (za konstantni faktor), a lakse ga je i realizovati.

Unutrasnje dve petlje koriste se za proveru svih parova cvorova. Zapazacse da se ova provera mozeizvrsavati sa parovima cvorova proizvoljnim redosledom, jer je svaka provera nezavisna od ostalih. Ova-kva fleksibilnost je vazna, na primer, kod paralelnih algoritama.

Algoritam Svi Najkr putevi(W)Ulaz: W (n x n matrica povezanosti koja predstavlja tezinski graf).W[x, y] je tezina grane (x, y), ako ona postoji, odnosno ∞ u protivnom.W[x, x] je 0 za sve cvorove xIzlaz: Na kraju matrica W sadrzi duzine najkracih puteva.

begin

for m := 1 to n do indukcija je po parametru m

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

Slozenost: Za svako m algoritam izvrsava jedno sabiranje i jedno uporedivanje za svaki par cvorova. Brojkoraka indukcije je |V |, pa je ukupan broj sabiranja, odnosno uporedivanja, najvise |V |3. Prisetimo se daje vremenska slozenost algoritma za nalazenje duzina najkracih puteva od jednog cvora O(|E| · log |V |).Ako je graf gust, pa je broj grana ω(|V |2), onda je opisani algoritam efikasniji od izvrsavanja za svaki cvoralgoritma za najkrace puteve od datog cvora. Iako je moguce realizovati algoritam za najkrace puteveod jednog cvora slozenosti O(|V |2), a time i algoritam slozenosti O(|V |3) za nalazenje svih najkracihrastojanja, algoritam iz ovog odeljka bolji je za guste grafove zbog svoje jednostavne realizacije. Sdruge strane, ako graf nije gust (pa ima na primer O(|V |) grana), onda je bolja vremenska slozenostO(|E||V | · log |V |) vise (|V |) puta upotrebljenog algoritma za najkrace puteve od jednog cvora.

33 Tranzitivno zatvorenje grafa.

Za zadati usmereni graf G = (V, E) njegovo tranzitivno zatvorenje C = (V, F) je usmereni graf ukome grana (u, w) izmedu cvorova u i w postoji ako i samo ako u G postoji usmereni put od u do w.Postoji mnogo primena tranzitivnog zatvorenja, pa je vazno imati efikasni algoritam za njegovo nalazenje.

45

Page 46: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Problem: Pronaci tranzitivno zatvorenje zadatog usmerenog grafa G = (V, E). Ovaj problem resicemoredukcijom (svodenjem) na drugi problem. Drugim recima pokazacemo kako se moze proizvoljni ulazza problem tranzitivno zatvorenje svesti na ulaz za drugi problem, koji umemo da resimo. Posle togaresenje drugog problema transformisemo u resenje problema tranzitivnog zatvorenja. Problem o komeje rec je nalazenje svih najkracih puteva.

Neka je G’ = (V, E’) kompletni usmereni graf (graf kod koga za svaki par cvorova postoje obe grane,u oba smera). Grani e ∈ E′ dodeljuje se duzina 0 ako je e ∈ E, odnosno 1 u protivnom. Sada za grafG’ resavamo problem nalazenja svih najkracih puteva. Ako u G postoji put izmedu v i w, onda je u G’njegova duzina 0. Prema tome, put izmedu v i w u G postoji ako i samo ako je duzina najkraceg putaizmedu v i w u G’ jednaka 0. Drugim recima, resenje problema svih najkracih puteva neposredno setransformise u resenje problema tranzitivnog zatvorenja.

Ovde redukciju koristimo sa ciljem da je kao tehniku ilustrujemo na jednostavnom primeru. Nije teskoprepraviti algoritam za sve najkrace puteve, tako da direktno resava problem tranzitivnog zatvorenja.Cienica da mozemo da svedemo jedan problem na drugi znaci da je prvi problem opstiji od drugog,odnosno da je drugi problem specijalni slucaj prvog. Obicno su opstija resenja skuplja, slozenija. Mismo videli mnogo primera gde je opstiji problem lakse resiti; ipak, da bismo vise dobili, moramo vise i daplatimo. Posle koriscenja redukcije preporucljivo je pokusati sa popravkom dobijenog resenja, koristecispecijalne osobine problema.

Algoritam Tranzit zatvorenje(A)Ulaz: A (n x n matrica povezanosti koja predstavlja usmereni graf).A[x, y] je true ako grana (x; y) pripada grafu, odnosno false u protivnom.A[x, x] je true za sve cvorove xIzlaz: Na kraju matrica A predstavlja tranzitivno zatvorenje grafa.

begin

for m := 1 to n do indukcija je po parametru m

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 popravljen u sledecem algoritmu

end

Poboljsanje:Algoritam Tranzit zatvorenje2(A)Ulaz: A (n x n matrica povezanosti koja predstavlja usmereni graf).A[x, y] je true ako grana (x, y) pripada grafu, odnosno false u protivnom.A[x, x] je true za sve cvorove x

begin

for m := 1 to n do indukcija je po parametru m

for x := 1 to n do

if A[x, m] then

for y := 1 to n do

if [m, y] then

A[x, y] := true

end

34 Stepenovanje prirodnim brojem.

Problem: Data su dva prirodna broja n i k. Izracunati nk.Problem se lako moze svesti na izracunavae nk−1, jer je nk = n · nk−1. Prema tome, problem se moze

46

Page 47: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

resiti indukcijom po k. Smanjena je vrednost k, ali ne i njegova velicina. Trivijalni algoritam zahteva kmnozenja. Posto je velicina podatka k priblizno log2 k, broj iteracija je eksponencijalna funkcija velicinek (k = 2log2k). Ovo nije lose za male, ali je neprihvatljivo za velike vrednosti k.

Drugi nacin da se problem resi je svodenje na problem sa dvostruko manjim eksponentom pomocujednakosti nk = (nk/2)2. Polovljenje k odgovara smanjenju njegove velicine za konstantu. Zbog toga cebroj mnozenja biti linearna funkcija od velicine k. Najjednostavniji slucaj je k = 2j , za neki prirodanbroj j:

nk = n2j

=

j puta︷ ︸︸ ︷((n2)2)...2

Sta ako k nije stepen dvojke? Razmotrimo jos jednom primenjeni postupak redukcije. Posavsi odparametara n i k, problem je sveden na manji, sa parametrima n i k/2. Ako k/2 nije celi broj, onda(k − 1)/2 jeste, pa se moze primeniti slicna redukcija:

nk = n · (n(k−1)/2)2

Sada je algoritam kompletiran. Ako je k parno, jednostavno kvadriramo rezultat stepenovanja izloziocemk/2. Ako je pak k neparno, kvadriramo rezultat stepenovanja izloziocem (k − 1)/2 i mnozimo ga sa n.Broj mnozea je najvise 2 · log2 k.

Algoritam Stepen kvadriranjem(n, k)Ulaz: n i k (dva prirodna broja).Izlaz: P (vrednost izraza nk).

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

Slozenost: Ukupan broj mnozea je O(log k). Medutim, kako se napreduje sa izvrsavanjem algoritma,medurezultati postaju sve veci, pa mnozenja postaju sve komplikovanija.

Jos jedan nacin za resavanje ovog problema je da se broj k zapise u binarnom obliku i da se cifresmeste u niz a. Onda cemo u petlji imati samo jednu naredbu u kojoj kvadrirani broj z mnozimo sa nai .Pomeranje udesno kroz niz predstavlja sifotvanje udesno u binarnom zapisu (a to je deljenje brojem 2).Ako je ai = 0 znaci da je broj paran i bice izvrseno samo z ∗ z, a ako je ai = 1 znaci da je broj neparani bice izvrseno z ∗ z ∗ n.

Algoritam Stepenovanje(n, k)Ulaz: n i k (dva prirodna broja)Izlaz:

begin

z = 1;

a = binarni_zapis(k); k ima

for i=m down to 1 do

z = z*z*n^a[i];

end

47

Page 48: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

35 Euklidov algoritam

Najveci zajednicki delilac dva prirodna broja n i m (oznacava se sa NZD(n,m)) je jedinstveni prirodnibroj d koji: 1) deli m i n, i 2) veci je ili jednak od svakog drugog prirodnog broja d koji deli n i m.

Problem: Odrediti najveci zajednicki delilac dva data prirodna broja. Ideja je svesti polazni pro-blem na problem sa manjim ulazom. Euklid je primetio da ako d deli n i m, onda deli i njihovu razliku.Vazi 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 recima, NZD(n,m) = NZD(n−m,m), i dobijen je manji ulaz. Smanjene su vrednosti brojevasa kojima se radi, ali ne i njihove velicine. Da bi algoritam bio efikasan, moraju se smanjiti velicinebrojeva. Na primer, ako je n vrlo veliki broj (npr. 1000 cifara) i m = 24, od n treba oduzeti 24 pribliznon/24 puta. Ovo racunanje sastoji se od O(n) koraka, sto je eksponencijalna funkcija od velicine n.

Razmotrimo ovu ideju jos jednom. Posle oduzimanja m od n isti algoritam treba primeniti na n −m im. Ako je n−m i dalje vece od m, od njega treba oduzeti m. Sa oduzimanjem m nastavlja se sve dokrazlika ne postane manja od m. Broj ovakvih oduzimanja moze biti ogroman; srecom, rezultat koji setako dobija je jednak ostatku n mod m pri deljenju n sa m. Prema tome, NZD(n,m) = NZD(n modm,m). Deljenje sa ostatkom izvrsava se efikasno. Polazeci od brojeva r0 = n i r1 = m, izracunava seostatak r2 = r0 mod r1, zatim ostatak r3 = r1 mod r2, itd. Tako se dobija opadajuci niz ostataka

ri−1 = qi · ri + ri+1; 0 ≤ ri+1 < ri; za i = 1, 2, . . . , k (8.1)

(pri deljenju ri−1 sa ri kolicnik je qi, a ostatak ri+1). Dobijeni niz je konacan jer je opadajuci i sastojise od prirodnih brojeva. Neka je npr. rk+1 = 0 i neka je rk 6= 0 posledi clan ovog niza razlicit od nule.Kako je

NZD(r0, r1) = NZD(r1, r2) = . . . = NZD(rk−1, rk) = NZD(rk, 0) = rk

vidimo da je d = NZD(n,m) upravo jednako rk, poslednjem ostatku razlicitom od nule. Opisani postu-pak za izracunavanje najveceg zajednickog delioca dva broja zove se Euklidov algoritam.

Algoritam NZD(m, n)Ulaz: m i n (dva prirodna broja).Izlaz: nzd (najveci zajednicki delilac brojeva m i n).

begin

a := max(n, m);

b := min(n, m);

r := 1; vrednost koja omogucuje ulazak u petlju

while r > 0 do r je ostatak

r := a mod b;

a := b;

b := r;

nzd := a

end

Slozenost: Tvrdimo da Euklidov algoritam ima linearnu vremensku slozenost u odnosu na velicinubroja m+n; drugim recima, njegova vremenska slozenost je O(log(m+n)) (ako se pretpostavi da se sveelementarne operacije izvrsavaju za jedinicno vreme, nezavisno od velicine operanada). Da se to dokaze,dovoljno je dokazati da vrednost a u algoritmu postaje bar dva puta manja posle dve iteracije. Posleprve iteracije par (a, b) (a > b) zamenjuje se parom (b, a mod b), a posle druge iteracije parom (a modb, b mod (a mod b)).Prema tome, posle dve iteracije je broj a zamenjen brojem a mod b, koji je uvek manji od a/2. Za-ista, ako b ≤ a/2 onda je a mod b < b ≤ a/2; u protivnom, za b > a/2, takoze se dobija a modb = a− b = a/2− (b− a/2) < a/2.

Uz malu dopunu, Euklidov algoritam se moze iskoristiti i za resavanje sledeceg problema.Problem: Najveci zajednicki delilac d dva prirodna broja n i m izraziti kao njihovu celobrojnu linearnukombinaciju. Drugim recima, odrediti cele brojeve x i y, tako da vazi d = NZD(n,m) = nx+my. Ciljje d izraziti u obliku linearne kombinacije d = r0x + r1y ostataka r0 = n i r1 = m. Problem se mozeresiti indukcijom.

48

Page 49: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Polazi se od baze, izraza za d u obliku linearne kombinacije ostataka rk−1 = n i rk−2 = m: d =rk = rk−2 − qk−1rk−1; ovaj izraz je ekvivalentan pretposledemnjdem deljenju u Euklidovom algoritmu(izraz (8.1) za i = k − 1).Korak indukcije bio bi izrazavanje d u obliku linearne kombinacije ostataka ri−1 i ri, polazeci od izrazad = x′ri + y′ri + 1 - celobrojne linearne kombinacije ri i ri+1. Zaista, zamenom ri+1 u ovom izrazu sari+1 = ri−1 − qiri, dobija se

d = x′ri + y′(ri−1 − qiri) = y′ri− 1 + (x′ − qiy′)ri

tj. izraz za d u obliku celobrojne linearne kombinacije ostataka ri−1 i ri.Dakle, indukcijom po i, i = k−2, k−1, . . . , 1, 0 dokazano je da se d moze izraziti kao celobrojna linearnakombinacija bilo koja dva uzastopna clana ri, ri+1 niza ostataka. Specijalno, za i = 0, dobija se trazeniizraz.

Slozenost: Broj operacija je proporcionalan sa brojem operacija u Euklidovom algoritmu, tj. O(m+n).

Znacaj ove dopune Euklidovog algoritma je u tome sto ona omogucuje resavanja tzv. linearnih Dio-fantovih jednacina ax+ by = c, gde su a, b, c dati celi brojevi, a x i y su celi brojevi koje treba odrediti.Bez smanjenja opstosti moze se pretpostaviti da je a, b > 0. Da bi navedena jednacina imala bar jednoresenje, potrebno je da d = NZD(a, b) deli c (posto d deli levu stranu jednacine, mora da deli i desnu).Ako je ovaj uslov ispunjen, jedno od resenja lako se dobija opisanim postupkom. Posto se d izrazi uobliku d = ax′ + by′, mnozenjem sa celim brojem c/d dobija se c = a(x′c/d) + b(y′c/d), tj. vidi se da jejedno resenje jednacine par (x, y) = (x′c/d, y′c/d).

36 Vinogradov i Strasenov algoritam za mnozenje matrica

Ako su P = (pij) i Q = (qij) date kvadratne matrice reda n, onda je elemenat tij matrice R = PQ datizrazom

rij =

n∑k=1

pikqkj . (12)

Problem. Izracunati proizvod R = PQ dve realne n x n matrice.

Direktni (i na prvi pogled jedini) postupak mnozenja matrica zasniva se na definiciji (17), sto pod-razumeva n3 mnozenja i (n − 1)n2 sabiranja. Zapazimo da je n broj vrsta, odnosno kolona matrice, ane velicina ulaza, koja je u ovom slucaju n2.

Vinogradov algoritam: Pretpostavimo zbog jednostavnosti da je n parno. Uvedimo oznake

Pi =

n/2∑k=1

pi,2k−1 · pi,2k, i = 1, 2, . . . n

Qj =

n/2∑k=1

q2k−1,j · q2k,j , j = 1, 2, . . . n

Pregrupisavanjem sabiraka dobija se

rij =

n∑k=1

(pi,2k−1 + q2k,j) · (pi,2k + q2k−1,j)− Pi −Qj .

Brojevi Pi i Qj izracunavaju se samo jednom za svaku vrstu P , odnosno kolonu Q, za sta je potrebnosamo n2 mnozenja. Ukupan broj mnozenja je dakle smanjen na n3/2 + n2. Broj sabiranja povecan jepriblizno za n3/2. Algoritam je prema tome bolji od direktnog u slucaju kad se sabiranja izvrsavaju brzeod mnozenja (sto je tipicno).Komentar: Vinogradov algoritam pokazuje da se promenom redosleda izracunavanja moze posticiusteda, cak i kod izraza kao sto je proizvod matrica, koji imaju jednostavan oblik. Sledeci algoritam istu

49

Page 50: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

ideju eksploatise mnogo efikasnije.

Strasenov algoritam. Na mnozenje matrica moze se primeniti postupak dekompozicije, slicno kaona mnozenje polinoma. Zbog jednostavnosti pretpostavicemo da je n stepen dvojke. Neka je

P =

(a bc d

), Q =

(A BC D

), (13)

gde su a, b, c, d, odnosno A, B, C, D matrice reda n/2. Primenom dekompozicije se problem svodi naizracunavanje cetiri n/2 x n/2 podmatrice matrice R. Proizvod blok matrica izracunava se na isti nacinkao kad se blokovi zamene elementima, pa se problem moze shvatiti kao trazenje efikasnog nacina zaizracunavanje proizvoda dve 2 x 2 matrice. Od algoritma za mnozenje 2 x 2 matrica dobija se algoritamza mnozenje n x n matrica tako sto se umesto proizvoda elemenata umetnu rekurzivni pozivi procedureza mnozenje.Obiqan algoritam za mnozenje 2 x 2 matrica koristi 8 mnozenja. Zamenjujuci svako mnozenje rekurzivnimpozivom, dobijamo diferencnu jednacinu

T (n) = 8T (n/2) +O(n2)

(kombinovanje manjih resenja sastoji se od nekoliko sabiranja matrica reda n/2, slozenosti O(n2)), cije jeresenje T (n) = O(n log2 8) = O(n3). Ovo nije iznenađujuce, jer se koristi obican algoritam za mnozenje.Ako bismo uspeli da izracunamo proizvod 2 x 2 matrica izvodeci manje od 8 mnozenja elemenata, dobilibismo algoritam koji je asimptotski brzi od kubnog.

Faktor koji najvise utice na rekurziju je broj mnozenja potrebnih za izracunavanje proizvoda 2 x 2matrica. Broj sabiranja nije tako vazan, jer menja samo cinilac uz clan O(n2) u diferencnoj jednacini,pa ne utice na asimptotsku slozenost (on međutim utice na konstantni faktor). Strasen (Strassen) otkrioje da je dovoljno sedam mnozenja elemenata da se izracuna proizvod dve matrice reda dva. Ako matriceP,Q (18) shvatimo kao matrice reda dva, onda se njihov proizvod moze izracunati na sledeci nacin:

PQ =

(z1 + z4 z2 − z3 + z4 + z5

z1 + z3 + z6 + z7 z2 + z6

),

pri cemu su sa z1, z2, ..., z7 oznaceni sledeci proizvodi 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 i z7 = (d− b)(C −D).

Slozenost. U algoritmu se izracunava sedam proizvoda matrica dva puta manje dimenzije i konstantnibroj sabiranja takvih matrica. Sabiranja su manje vazna od proizvoda, jer se dve matrice reda n sabirajuza vreme O(n2), sto je linearna funkcija od velicine ulaza. Clan O(n2) nije dominantan u diferencnojjednacini

T (n) = 7T (n = 2) +O(n2).

Resenje ove diferencne jednacine je T (n) = O(nlog2 7), odnosno priblizno O(n2,81), sto znaci da jeStrasenov algoritam asimptotski brzi od obicnog mnozenja matrica.

Komentar. Strasenov algoritam ima tri vazna nedostatka:

1. Prakticne provere pokazuju da n mora biti vece od 100 da bi Strasenov algoritam bio brzi odobicnog mnozenja matrica slozenosti O(n3).

2. Strasenov algoritam manje je stabilan od obicnog. Za iste velicine greske ulaznih podataka,Strasenov algoritam obicno dovodi do vecih gresaka u izlaznim podacima.

3. Strasenov algoritam je komplikovaniji i tezi za realizaciju od obicnog. Pored toga, njega nije lakoparalelizovati.

37 Brza Fruijeova transformacija i mnozenje polinoma

Brza Furijeova transformacija (ili FFT, fast Fourier transform ) je vazna iz vise razloga. Ona efikasnoresava vazan praktican problem, elegantna je, i otvara nove, neocekivane oblasti primene. Zbog toga jeona jedan od najvaznijih algoritama od svog otkrica sredinom sezdesetih godina. Ogranicicemo se na

50

Page 51: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

samo jednu njegovu primenu, mnozenje polinoma.

Problem: Izracunati proizvod dva zadata polinoma p(x) i q(x). Formulacija problema je preciznasamo na prvi pogled, jer nije preciziran nacin predstavljanja polinoma. Obicno se polinom

P = an−1xn−1 + an−2x

n−2 + . . .+ a1x+ a0

predstavlja nizom svojih koeficijenata uz 1, x, x2,..., xn−1; ali to nije jedina mogucnost. Alternativa jepredstavljanje polinoma stepena n−1 svojim vrednostima u n razlicitih tacaka: te vrednosti jednoznacnoodreduju polinom. Drugi nacin predstavljanja je interesantan zbog jednostavnosti mnozenja. Proizvoddva polinoma stepena n−1 je polinom stepena 2n−2, pa je odreden svojim vrednostima u 2n−1 tacaka.Ako pretpostavimo da su vrednosti polinoma - cinilaca date u 2n− 1 tacaka, onda se proizvod polinomaizracunava pomocu 2n− 1, odnosno O(n) obicnih mnozenja.

Nazalost, predstavljanje polinoma vrednostima za neke primene nije pogodno. Primer je izracunavanjevrednosti polinoma u zadatim tackama; pri reprezentaciji vrednostima, ovo je mnogo teze nego ako suzadati koeficijenti polinoma. Medutim, ako bismo mogli da efikasno prevodimo polinome iz jedne u drugupredstavu, dobili bismo odlican algoritam za mnozenje polinoma. Upravo to se postie primenom FFT.

Prelaz od predstave polinoma koeficijentima na predstavu vrednostima u tackama, resava se izracunavanjemvrednosti polinoma. Vrednost polinoma p(x) (zadatog koeficijentima) u bilo kojoj tacki moze se pomocuHornerove seme izracunati pomocu n mnozenja. Izracunavanje vrednosti p(x) u n proizvoljnih tacakaizvodljivo je dakle pomocu n2 mnozenja. Prelaz od predstave polinoma vrednostima na predstavu koefi-cijentima zove se interpolacija. Interpolacija u opstem slucaju takode zahteva O(n2) operacija. Ovde jekljucna ideja da se ne koristi proizvoljnih n tacaka: mi imamo slobodu da po zelji izaberemo proizvoljanskup od n razlicitih tacaka. Brza Furijeova transformacija koristi specijalan skup tacaka, tako da se obetransformacije, izracunavanje vrednosti i interpolacija, mogu efikasno izvrsavati.

37.1 Direktna Furijeova transformacija

Razmotrimo problem izracunavanja vrednosti polinoma. Potrebno je izracunati vrednosti dva polinomastepena n − 1 u 2n − 1 tacaka, da bi se njihov proizvod, polinom stepena 2n − 2, mogao interpolirati.Medutim, polinom stepena n−1 moze se predstaviti kao polinom stepena 2n−2 izjednacavaem sa nulomvodecih n−1 koeficijenata. Zbog toga se bez gubitka opstosti moze pretpostaviti da je problem izracunati

vrednosti proizvoljnog polinoma P =n−1∑j=0

ajxj stepena n− 1 u n razlicitih tacaka. Cilj je pronaci takvih

n tacaka, u kojima je lako izracunati vrednosti polinoma. Zbog jednostavnosti pretpostavljamo da je nstepen dvojke.

Koristicemo matricnu terminologiju da bismo uprostili oznacavanje. Izracunavanje vrednosti polinomaP u n tacaka x0, x1,... , xn−1 moze se predstaviti kao izracunavanje proizvoda matrice i vektora:

Pitanje je kako izabrati vrednosti x0, x1, ... , xn−1, tako da se ovo mnozenje uprosti. Posmatrajmo dveproizvoljne vrste r i s. Voleli bismo da ih ucinimo sto slicnijim, da bismo ustedeli na mnozenjima. Nemoze se staviti xr = xs, jer su tacke razlicite, ali se x2r = x2s moze postici stavljajuci xs = −xr. Ovoje dobar izbor, jer je svaki paran stepen xr jednak odgovarajucem parnom stepenu xs; neparni stepenirazlikuju se samo po znaku. Isto se moze uraditi i sa ostalim parovima vrsta. Naslucuje se u kom pravcutreba traziti n specijalnih vrsta, za koje bi se gori proizvod svodio na samo n/2 proizvoda vrsta matricesa kolonom koeficijenata. Rezultat bi bio polovljenje velicine ulaza, a time i vrlo efikasan algoritam.Pokusajmo da postavimo ovaj problem kao dva odvojena problema dvostruko manje velicine. Podelapolaznog problema na dva potproblema velicine m = n/2 moze se opisati sledecim izrazom:

51

Page 52: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Polazna n x n matrica podeljena je na dve vrlo slicne podmatrice dimenzija n/2 x n. Za svako j = 0,1,..., n/2 − 1, vazi xn/2+j = −xj . Zgodno je dakle napisati izraze za P (xj) i P (−xj), odnosno uopsteP (x), sa razdvojenim clanovima parnog i neparnog stepena:

P (x) =

n/2−1∑j=0

a2jx2j +

n/2−1∑j=0

a2j+1x2j+1

Ako sa P0(x) =n/2−1∑j=0

a2jx2j , odnosno P1(x) =

n/2−1∑j=0

a2j+1x2j+1 oznacimo polinome stepena n/2− 1 sa

koeficijentima polinoma P parnog, odnosno neparnog indeksa, dolazimo do jednakosti

(8.6) P (x) = P0(x2) + xP1(x2)

Zamenom x sa −x dobijamo P (−x) = P0(x2)+(−x)P1(x2). Izracunavanje P (xj), j = 0, 1,..., n−1 svodise na racunanje P (xj) i P (−xj) za j = 0, 1,..., n/2 − 1, odnosno na izracunavanje samo n/2 vrednostiP0(x2j ), n/2 vrednosti P1(x2j ), i dopunskih n/2 sabiranja, n/2 oduzimanja i n mnozenja. Dakle, imamodva potproblema velicine n/2 i O(n) dopunskih operacija.

Moze li se nastaviti rekurzivno na isti nacin? Ako bi nam to poslo za rukom, dosli bismo do poznatediferencne jednaqine T (n) = 2T (n/2) + O(n), cije je resenje T (n) = O(n log n). Problem izracunavanjaP (x) (polinoma stepena n − 1) u n tacaka sveli smo na izracunavanje P0(x2) i P1(x2) (dva polinomastepena n/2−1) u n/2 tacaka. To je regularna redukcija, izuzev jednog detalja: vrednosti x u P (x) moguse proizvoljno birati, ali vrednosti x2 u izrazu (na primer) P0(x2) mogu biti samo pozitivne. Posto smodo redukcije dosli koriscenjem negativnih brojeva, ovo predstavlja problem. Izdvojimo iz (8.5) matricukoja odgovara izracunavau vrednosti P0(x2):

Da bismo jos jednom izveli redukciju na isti nacin, morali bismo da stavimo npr. x2n/4 = −(x0)2. Postosu kvadrati realnih brojeva uvek pozitivni, ovo je nemoguce, bar ako se ograniqimo na realne brojeve.Poteskoca se prevazilazi prelaskom na kompleksne brojeve. Problem se moze opet podeliti na dva delastavljajuci xj+n/4 = ixj , za j = 0, 1,..., n/4−1 (i je ovde koren iz -1, kompleksan broj). Ovo razdvajanjezadovoljava iste uslove kao i prethodno. Prema tome, problem velicine n/2 moze se resiti svodenjem nadva problema velicine n/4, izvodeci O(n) dopunskih operacija.

Za sledece razdvajanje potreban nam je broj z takav da je z8 = 1 i zj 6= 1 za 0 < j < 8, odnosnoprimitivni osmi koren iz jedinice; tada je z4 = −1 i z2 = i. Opstije, potreban nam je primitivni n-tikoren iz jedinice. Oznacimo ga sa ω. Broj ω zadovoljava sledece uslove:

(8.7) ωn = 1, ωj 6= 1, za 0 < j < n.

Za n tacaka x0, x1,..., xn−1 biramo brojeve 1, ω, ω2, ..., ωn−1. Prema tome, izracunava se sledeci proizvod:

52

Page 53: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Ovaj proizvod se zove Furijeova transformacija vektora (a0, a1, ..., an−1). Zapazimo najpre da jeispunjen uslov

xn/2+j = ωn/2+j = ωn/2ωj = −xj , j = 0, 1, ..., n/2− 1.

Prema tome, prva redukcija problema velicine n na dva manja je i dalje ispravna. Dalje, dva potpro-blema proizasla iz ove redukcije imaju po n/2 tacaka 1, ω2, ω4, ..., ωn−2, sto je upravo problem velicinen/2, u kome umesto ω figurise ω2 - primitivni n/2-ti koren iz jedinice (to neposredno sledi iz uslova (8.7))Prema tome, dalje se moze nastaviti rekurzivno. Slozenost algoritma zadovoljava diferencnu jednacinuT (n) = 2T (n/2)+O(n), cije je resenje O(n log n). Algoritam omogucuje efikasno izracunavanje Furijeovetransformacije vektora koeficijenata polinoma, pa je dobio ime brza Furijeova transformacija, odnosnoFFT.

Algoritam FFT(n, a0, a1, ..., an−1, ω, varV )Ulaz: n (prirodni broj), a0, a1, ..., an−1 (niz elemenata tipa koji zavisi od primene) i ω (primitivni n-tikoren iz jedinice).

Izlaz: V (niz izlaznih elemenata, sa indeksima od 0 do n−1). pretpostavlja se da je n stepen dvojke

begin

if n = 1 then

V [0] := a 0;else

FFT(n/2, a 0, a 2, ..., a n− 2, ωˆ2, U);FFT(n/2, a 1, a 3, ..., a n− 1, ωˆ2, W);

for j := 0 to n/2-1 do prema (8.6) za x = ωˆjV [j] := U[j] + ωˆjW[j];V [j + n=2] := U[j] - ωˆjW[j];

end

37.2 Inverzna Furijeova transformacija

Brza Furijeova transformacija resava samo pola problema: vrednosti zadatih polinoma p(x) i q(x)mogu se efikasno izracunati u tackama 1, ω, ..., ωn− 1, izmnoziti parovi dobijenih vrednosti, i tako nacivrednosti polinoma p(x)q(x) u navedenim tackama. Ostaje problem interpolacije, odnosno odredivanjakoeficijenata proizvoda polinoma na osnovu vrednosti u tackama. Na srecu, ispostavlja se da je probleminterpolacije vrlo slican problemu izracunavanja vrednosti, i da ga resava prakticno isti algoritam.

Vratimo se matricnoj notaciji. Neka AT transponovana matrica matrice A. Oznacimo vektor koeficije-nata polinoma sa a = (a0, a1, ..., an−1)T , a vektor vrednosti polinoma sa v = (P (1), P (ω), ..., P (ωn−1))T

. Neka je V (ω) matrica iz jednakosti (8.8). Ako su zadati su koeficijenti polinoma a, njegove vrednosti vu n tacaka 1, ω, ..., ωn− 1 dobijaju se prema (8.8) izracunavanjem proizvoda v = V (ω)a. S druge strane,ako su zadate vrednosti polinoma v = (P (1), P (ω), ..., P (ωn−1))T = (v0, v1, ..., vn−1)T , a potrebno jeizracunati njegove koeficijente, jednakost (8.8), odnosno V (ω)a = v je sistem linearnih jednacina po a.Resavanje sistema jednacina ima u opstem slucaju dosta veliku vremensku slozenost O(n3), ali se ovderadi o jednom specijalnom sistemu jednacina. Lako se proverava da je V (ω)V (ω−1) = nI, gde je sa Ioznacena 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 (ω−1) jednak

n−1∑k=0

ωrkω−sk =

n−1∑k=0

ωk(r−s) =1− ωn(r−s)

1− ωr−s = 0

Ako je pak r = s, onda je taj proizvodn−1∑k=0

ωrkω−sk = n. Time je dokazana sledeca teorema.

Teorema: Inverzna matrica matrice V (ω) Furijeove transformacije je

V (ω)−1 =1

nV (ω−1)

Resavanje sistema jednacina v = V (ω)a svodi se dakle na izracunavanje proizvoda

53

Page 54: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

a =1

nV (ω−1)v

Posao se dalje pojednostavljuje zahvacujui sledecoj teoremi.

Teorema: Ako je ω onda je ω−1 takode primitivni n-ti koren iz jedinice.

Prema tome, proizvod1

nV (ω−1)v moze se izracunati primenom brze Furijeove transformacije, zame-

njujuci ω sa ω−1. Ova transformacija zove se Inverzna Furijeova transformacija.

Slozenost: Uzimajuci sve u obzir, proizvod dva polinoma moze se izracunati izvodeci O(n log n) opera-cija (sa kompleksnim brojevima).

38 Algoritam za nalazenje trouglova u neusmerenom grafu, do-bijen svodenjem na mnozenje matrica.

Postoji tesna veza izmedu grafova i matrica. Graf G = (V,E) sa n cvorova v1, v2, ...vn, moze sepredstaviti svojom matricom povezanosti - kvadratnom matricom A = (aij) reda n, takvom da je aij = 1ako (vi, vj) ∈ E, odnosno aij = 0 u ostalim slucajevima. Ako je G neusmereni graf, matrica A jesimetricna. Ako je G tezinski graf, onda se takode moze predstaviti kvadratnom matricom A = (aij)reda n, pri cemu je elemenat aij jednak tezini grane (vi, vj), odnosno 0, ako te grane nema u grafu.Postoje i drugi nacini da se matrica pridruzi grafu. Tako se grafu G = (V,E) sa n cvorova i m granamoze pridruziti nxm matrica u kojoj je (i, j) elemenat jednak 1 ako i samo ako je i-ti cvor susedan saj-tom granom.

Problem: Neka je G = (V,E) neusmereni povezani graf sa n cvorova i m grana. Potrebno je ustano-viti da li u G postoji trougao, odnosno takva tri cvora da izmedu svaka dva od ih postoji grana. Direktnoresenje obuhvata proveru svih troclanih podskupova skupa cvorova.

Podskupova ima

(n3

)=

n · (n− 1) · (n− 2)

6, a posto svaki od njih moze proveriti za konstantno

vreme, vremenska slozenost ovakvog algoritma je O(n3).

Moze se konstruisati i algoritam sloenosti O(mn) (zasnovan na proveri svih parova (grana, cvor) - da ligrade trougao), koji je bolji ako graf nije gust. Moze li se ovo dalje poboljsati?

Neka je A matrica povezanosti grafa G. Posto je graf G neusmeren, matrica A je simetricna. Raz-motrimo vezu elemenata matrice B = A2 = AA (proizvod je obican proizvod matrica) i grafa G. Premadefiniciji proizvoda matrica je

B[i, j] =

n∑k=1

A[i, k] ·A[k, j] :

Iz ove jednakosti sledi da je uslov B[i, j] > 0 ispunjen akko postoji indeks k, takav da su oba elementaA[i, k] i A[k, j] jedinice. Drugim recima, B[i, j] > 0 je ispunjeno ako i samo ako postoji cvor vk, takav daje k 6= i, k 6= j i da su oba cvora vi i vj povezana sa vk (pretpostavljamo da graf nema petlji, odnosnoA[i, i] = 0 za i = 1, 2, . . . , n). Prema tome, u grafu postoji trougao koji sadrzi temena vi i vj akko je vipovezan sa vj i B[i, j] > 0. Konacno, u G postoji trougao akko postoje takvi indeksi i, j da je A[i, j] = 1i B[i, j] > 0.

Navedena analiza sugerise algoritam. Treba izracunati matricu B = A2 i proveriti ispunjenost uslovaA[i, j] = 1, B[i, j] > 0 za svih n2 parova (i, j). Slozenost provere ovog uslova je O(n2), pa preovladujucideo vremenske slozenosti algoritma potice od mnozenja matrica. Time je problem nalazenja trougla ugrafu sveden na problem mnozenja matrica (preciznije, kvadriranja matrice). Za mnozenje matrica mozese iskoristiti Strasenov algoritam i tako dobiti algoritam za nalazenje trougla u grafu slozenosti O(n2.81).Preciznije, opisana redukcija pokazuje da je slozenost ovog grafovskog problema O(M(n)), gde je M(n)slozenost mnozenja Bulovih matrica reda n.

54

Page 55: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

39 Redukcije polinomijalne vremenske slozenosti, tranzitivnost.

Problemi odlucivanja: problemi na koje se posle izvrsavanja odredenog algoritma moze odgovoritisa ”da” ili ”ne”. Ovo ogranicenje uproscava razmatranja. Veci deo problema lako se moze prevesti uprobleme odlucivanja. Na primer, umesto da trazimo optimalno uparivanje u zadatom grafu, mozemoda postavimo pitanje da li za zadato k postoji uparivanje velicine bar k. Ako umemo da resimo problemodlucivanja, obicno mozemo da resimo i polazni problem, na primer binarnom pretragom.

Problem odlucivanja moze se posmatrati kao problem prepoznavanja jezika. Neka je U skup mogucihulaza za problem odlucivaa. Neka je L ⊂ U skup svih ulaza za koje je resenje problema ”da”. Za L sekaze da je jezik koji odgovara problemu, pa pojmovi problem i jezik mogu da se koriste ravnopravno.Problem odlucivanja je ustanoviti da li zadati ulaz pripada jeziku L.

Definicija: Neka su L1 i L2 dva jezika, podskupa redom skupova ulaza U1 i U2. Kazemo da je L1

polinomijalno svodljiv na L2, ako postoji algoritam polinomijalne vremenske slozenosti, koji dati ulazu1 ∈ U1 prevodi u ulaz u2 ∈ U2, tako da u1 ∈ L1 ako i samo ako u2 ∈ L2. Algoritam je polinomijalan uodnosu na velicinu ulaza u1. Pretpostavljamo da je pojam velicine dobro definisan u prostorima ulazaU1 i U2, tako da je, na primer, velicina u2 ogranicena polinomom od velicine u1.

Algoritam iz definicije svodi jedan problem na drugi. Ako znamo algoritam za prepoznavanje L2, ondaga mozemo superponirati sa algoritmom redukcije i tako dobiti algoritam za resavanje L1. Oznaqimoalgoritam redukcije sa AR, a algoritam za prepoznavanje L2 sa AL2. Proizvoljni ulaz u1 ∈ U1 mozese primenom AR transformisati u ulaz u2 ∈ U2, i primenom AL2 ustanoviti da li u2 ∈ L2, a time i daliu1 ∈ L1. Posledica specijalnog slucaja ovog razmatranja je sledeca teorema.

Teorema: Ako je jezik L1 polinomijalno svodljiv na jezik L2, i postoji algoritam polinomijalne vre-menske slozenosti za prepoznavanje L2, onda postoji algoritam polinomijalne vremenske slozenosti zaprepoznavanje L1.

Dokaz: Dokaz sledi iz prethodnog razmatranja.

Relacija polinomijalne svodljivosti nije simetricna: polinomijalna svodljivost L1 na L2 ne povlaci uvekpolinomijalnu svodljivost L2 na L1. Ova asimetrija potice od cienice da definicija svodljivosti zahtevada se proizvoljan ulaz za L1 moze transformisati u ekvivalentan ulaz za L2, ali ne i obrnuto. Moguze jeda ulazi za L2, dobijeni na ovaj nacin, predstavljaju samo mali deo svih mogucih ulaza za L2. Prematome, ako je L1 polinomijalno svodljiv na L2, onda mozemo smatrati da je problem L2 tezi.Dva jezika L1 i L2 su polinomijalno ekvivalentni, ili jednostavno ekvivalentni, ako je svaki od ihpolinomijalno svodljiv na drugi. Specijalno, svi netrivijalni problemi iz klase P su ekvivalentni. Relacija”polinomijalne svodljivosti” je tranzitivna, kao sto pokazuje sledeca teorema.

Teorema: Ako je L1 polinomijalno svodljiv na L2 i L2 je polinomijalno svodljiv na L3, onda je L1

polinomijalno svodljiv na L3.

Dokaz: Neka su jezici L1, L2 i L3 podskupovi skupova mogucih ulaza redom U1, U2 i U3. Super-poniranjem algoritama redukcije L1 na L2, odnosno L2 na L3 dobija se algoritam redukcije L1 na L3.Proizvoljan ulaz u1 ∈ U1 konvertuje se najpre u ulaz u2 ∈ U2, koji se zatim konvertuje u ulaz u3 ∈ U3.Posto su redukcije polinomijalne slozenosti, a kompozicija dve polinomijalne funkcije je polinomijalnafunkcija, rezultujuci algoritam redukcije je takode polinomijalne sloeznosti (to je jedan od razloga zastosu za meru slozenosti resivih problema izabrani polinomi).

40 Nedeterministicki algoritmi, Kukova teorema.

Polinomijalni algoritam za resavanje nekih problema nije poznat. Pretpostavimo, medutim, da je zaneki konkretan ulaz za neki problem dobijen odgovor ”da”. Ako u to posumnjamo, mozemo zahtevati”dokaz” tog tvrdenja - niz cvorova koji ima trazenu osobinu. Pored toga, ocigledno je da je vremenskaslozenost ovakvog algoritma provere polinomijalna u odnosu na velicinu ulaza.Upravo pojam polinomijalne proverljivosti karakterise klasu NP. Primetimo da proverljivost za polinomi-jalno vreme ne povlaci i mogunost resavanja za polinomijalno vreme. Utvrdujuci da se za polinomijalno

55

Page 56: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

vreme moze proveriti odgovor ”da” za problem, npr. trgovackog putnika, mi ne uzimamo u obzir vremekoje nam moze biti potrebno za pronalaezenje zeljenog ciklusa u eksponencijalnom broju svih moguihciklusa u grafu. Mi samo tvrdimo da se za svaki zadati niz cvorova i za konkretan ulaz u, za polinomijalnovreme moze proveriti da li taj niz ”dokazuje” da je za ulaz u odgovor ”da”.

Klasa NP se neformalno moze definisati pomocu pojma nedeterministickog algoritma. Takav algori-tam sastoji se od dve razlicite faze: faze pogadanja i faze provere.Klasa NP , definisana neformalno - to je klasa svih problema odlucivanja koji pri razumnom kodiranjumogu biti reseni nedeterministickim algoritmom za polinomijalno vreme. Na primer, problem trgovackogputnika pripada klasi NP.U slicnim neformalnim definicijama termin ”resava” treba oprezno koristiti. Treba da bude jasno da jeosnovni smisao ”polinomijalnog nede- terministickog algoritma” u tome da objasni pojam ”proverljivostiza polinomijalno vreme”, a ne u tome da bude realni metod resavanja problema odlucivanja. Za svakikonkretan ulaz takav algoritam ima ne jedno, nego nekoliko mogucih izvrsavanja - po jedno za svakomoguce pogadanje.

Definicija: Problem X je NP-tezak problem ako je svaki problem iz klase NP polinomijalno svo-dljiv na X.Definicija: Problem X je NP-kompletan problem ako (1) pripada klasi NP , i (2) X je NP-tezak.

40.1 Kukova teorema

Kuk je 1971. godine dokazao da postoje NP-kompletni problemi. Kada se zna jedan NP-kompletanproblem, dokazi da su drugi problemi NP-kompletni postaju jednostavniji. Ako je dat novi problemX, dovoljno je dokazati da je Kukov problem (ili bilo koji drugi NP-kompletan problem) polinomijalnosvodljiv na X.

Lema: Problem X je NP-kompletan ako (1) X pripada klasi NP , i (2) postoji NP-kompletan pro-blem Y koji je polinomijalno svodljiv na X.Dokaz: Problem Y je prema uslovu (2) NP-tezak, pa je svaki problem u klasi NP polinomijalno svodljivna Y . Posto je Y polinomijalno svodljiv na X, a polinomijalna svodljivost je tranzitivna relacija, svakiproblem u klasi NP je polinomijalno svodljiv i na problem X.

Izlozicemo sada problem za koji je Kuk dokazao da je NP-kompletan, sa idejom dokaza. Problem jepoznat kao problem zadovoljivosti (SAT, skracenica od satisfiability). Neka je S Bulov izraz u ko-njuktivnoj normalnoj formi (KNF). Drugim recima, S je konjunkcija vise klauza (disjunkcija grupaliterala - simbola promenljivih ili njihovih negacija). Na primer, S = (x+ y+ z) · (x+ y+ z) · (x+ y+ z),gde sabiranje, odnosno mnozenje odgovaraju disjunkciji, odnosno konjunkciji (ili, odnosno i), a sva- kapromenljiva ima vrednost 0 (netacno) ili 1 (tacno). Poznato je da se svaka Bulova funkcija moze pred-staviti izrazom u KNF. Za Bulov izraz se kaze da je zadovoljiv, ako postoji takvo dodeljivanje nula ijedinica promenljivim, da izraz ima vrednost 1. Problem SAT sastoji se u utvrdivanju da li je zadatiizraz zadovoljiv (pri cemu nije neophodno pronaci odgovarajuce vrednosti promenljivih). U navedenomprimeru izraz S je zadovoljiv, jer za x = 1, y = 1 i z = 0 ima vrednost S = 1.

Kukova teorema: Problem SAT je NP-kompletan.

Problem SAT je u klasi NP jer se za (nedeterministicki) izabrane vrednosti promenljivih za polino-mijalno vreme (od velicine ulaza - ukupne duzine formule) moze proveriti da li je izraz tacan. ProblemSAT je NP-tezak jer se izvrsavanje programa NDTM za algoritam koji resava proizvoljan izabraniproblem iz klase NP moze opisati Bulovim izrazom (dokaz ove cienice nije jednostavan).

41 Dokaz NP–kompletnosti problema nalazenje pokrivaca cvorovagrafa.

Pokrivac grana: Neka je G = (V,E) neusmereni graf. Pokrivac grana grafa G je takav skup cvorova,da je svaka grana G susedna bar jednom od cvorova iz skupa.

56

Page 57: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Problem: Zadat je neusmereni graf G = (V,E) i prirodni broj k. Us tanoviti da li u G postojipokrivac grana sa < k cvorova.

Teorema: Problem pokrivac grana je NP-kompletan.

Dokaz: Problem pokrivac grana je u klasi NP , jer se za pretpostavljeni podskup od < k cvorovalako proverava za polinomijalno vreme da li je pokrivac grana grafa. Da bismo dokazali da je problempokrivac grana NP-kompletan, treba da na njega svedemo neki NP-kompletan problem.U tu svrhu iskoristiemo problem klika. U neusmerenom grafu G = (V,E) klika je takav podgraf C grafaG u kome su svi cvorovi medusobno povezani granama iz G. Drugim recima, klika je kompletan podgraf.Problem klika glasi: za zadati graf G i prirodni broj k, ustanoviti da li G sadrzi kliku velicine k. Potrebnoje transformisati proizvoljan ulaz za problem klika u ulaz za problem pokrivac grana, tako da je resenjeproblema klika ”da” akko je ”da” resenje odgovarajuceg problema pokrivcac grana. Neka je G = (V,E),k proizvoljan ulaz za problem klika. Neka je G = (V, E) komplement grafa G, odnosno graf sa istimskupom cvorova kao i G, i komplementarnim skupom grana u odnosu na G (odnosno izmedu proizvoljnadva cvora u G grana postoji akko izmedu ta dva cvora u G ne postoji grana). Neka je n = |V |. Tvrdimoda je problem klika (G, k) sveden na problem pokrivaq grana grafa, sa ulazom G− n, k. Pretpostavimoda je C = (U,F ) klika u G. Skup cvorova V \U pokriva sve grane u G, jer u G nema grana koje povezujucvorove iz U (sve te grane su u G). Prema tome, V \U je pokrivac grana za G. Drugim recima, ako Gima kliku velicine k, onda G ima pokrivaq grana velicine n− k. Obrnuto, neka je D pokrivac grana u G.Tada D pokriva sve grane u G, pa u G ne moze da postoji grana koja povezuje neka dva cvora iz V \D.Prema tome, V \D je klika u G. Zakljucujemo da ako u G postoji pokrivac grana velicine n− k, onda uG postoji klika velicine k. Ova redukcija se ocigledno moze izvrsiti za polinomijalno vreme: potrebno jesamo konstruisati graf G polazeci od grafa G i izracunati razliku n− k.

Slika 19: Redukcija problema klika na problem pokrivac grana.

42 Dokaz NP–kompletnosti problema nalazenje dominirajucegskupa grafa.

Dominirajuci skup: Neka je G = (V,E) neusmereni graf. Dominirajuci skup je skup D ⊂ V , takavda je svaki cvor G u D, ili je susedan bar jednom cvoru iz D.

Problem: Dat je neusmereni graf G = (V,E) i prirodni broj k. Ustanoviti da li u G postoji domi-nirajuc0i skup sa najvise k cvorova.

Teorema: Problem dominirajuci skup je NP-kompletan.

Dokaz: Problem dominirajui skup je u klasi NP , jer se za pretpostavljeni podskup od najvise k cvorova

57

Page 58: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

lako za polinomijalno vreme proverava da li je dominirajuci skup. Izvescemo redukciju problema po-krivac grana na problem dominirajuci skup. Ako je zadat proizvoljan ulaz (G, k) za problem pokrivacgrana, cilj je konstruisati novi graf G′ koji ima dominirajuci skup odredene velicine akko G ima pokrivacgrana velicine najvise k. Pri tome se, bez smanjenja opstosti, moze pretpostaviti da G nema izolovanihcvorova (oni ne uticu na pokrivac grana, ali moraju biti ukljuceni u dominirajui skup). Polazeci od grafaG, dodajemo mu |E| novih cvorova i 2|E| novih grana na sledeci nacin. Za svaku granu (v, w) iz Gdodajemo novi cvor vw i dve nove grane (v, vw) i (w, vw). Drugim recima, svaku granu transformisemou trougao. Oznacimo novi graf sa G′. Graf G′ je lako konstruisati za polinomijalno vreme.Tvrdimo da G ima pokrivac grana velicine m akko G′ ima dominirajuci skup velicine m. Neka je Ddominirajuci skup grafa G′. Ako D sadrzi bilo koji od novih cvorova vw, onda se takav cvor mozezameniti bilo cvorom v, bilo cvorom w, posle cega ce i novi skup biti dominirajuci skup (v i w pokrivajusve cvorove koje pokriva vw). Prema tome, bez smanjenja opstosti moze se pretpostaviti da D sadrzisamo cvorove iz G. Medutim, posto D ”dominira” nad svim novim cvorovima, on mora za svaku granuiz G da sadrzi bar jedan njen kraj, pa je zbog toga D istovremeno i pokrivac grana grafa G. Obrnuto,ako je C pokrivac grana u G, onda je svaka grana G susedna nekom cvoru iz C, pa je i svaki novi cvoriz G′ susedan nekom cvoru iz C. Stari cvorovi su takode pokriveni cvorovima iz C, jer po pretpostavcicvorovi iz C pokrivaju sve grane.

Slika 20: Redukcija problema pokrivac grana na problem dominirajuc skup.

43 Dokaz NP–kompletnosti problema 3–SAT.

3SAT: Problem 3SAT je uproscena verzija obicnog problema SAT . Ulaz za problem 3SAT je KNF ukojoj svaka klauza ima tacno tri literala.

Problem: Zadat je Bulov izraz u KNF , u kome svaka klauza sadrzi tacno tri literala. Ustanovitida li je izraz zadovoljiv.

Teorema: Problem 3SAT je NP-kompletan.

Dokaz: Ovaj problem je na prvi pogled laksi od obicnog problema SAT , zbog dopunskog ogranicenja dasvaka klauza ima po tri promenljive. Pokazacemo da algoritam koji resava 3SAT moze da se iskoristi daresi obican problem SAT (odnosno da se SAT moze svesti na 3SAT ). Pre toga, jasno je da 3SAT pripadaklasi NP . Mogu se izabrati (”pogoditi”) vrednosti promenljivih i za polinomijalno vreme proveriti da lije izraz tacan. Neka je E proizvoljan ulaz za SAT . Svaku klauzu u E zamenicemo sa nekoliko klauza odpo tacno tri literala. Neka je C = (x1 +x2 + · · ·+xk) proizvoljna klauza iz E, takva da je k > 4. Ovde jezbog udobnosti sa xi oznacen literal, odnosno bilo promenljiva, bilo negacija promenljive. Pokazacemokako se C moze ekvivalentno zameniti sa nekoliko klauza od po tacno tri literala. Ideja je uvesti novepromenljive y1, y2, . . . , yk−3, koje klauzu transformisu u deo ulaza za 3SAT , ne menjajuci zadovoljivost

58

Page 59: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

izraza. Za svaku klauzu iz E uvode se nove, razlicite promenljive; C se zameuje konjunkcijom klauza C ′,tako da je

C ′ = (x1 + x2 + y1) · (x3 + y1 + y2) · (x4 + y2 + y3) · · · (xk−2 + ¯yk−4 + yk−3) · (xk−1 + xk + ¯yk−3) (14)

Tvrdimo da je izraz, dobijen od E zamenom C sa C ′, zadovoljiv akko je zadovoljiv izraz E. Ako jeizraz E zadovoljiv, onda bar jedan od literala xi mora imati vrednost 1. U tom slucaju se mogu izabrativrednosti promenljivih yi u C ′ tako da sve klauze u C ′ budu tacne. Na primer, ako je x3 = 1, onda semoze staviti y1 = 1 (sto cini tacnom prvu klauzu), y2 = 0 (druga klauza je tacna zbog x3 = 1), i yi = 0 zasve i >2. Uopste, ako je xi = 1, onda stavljamo y1 = y2 = · · · = yi−2 = 1 i yi−1 = yi = · · · = yk−3 = 0,sto obezbeduje da bude C ′ = 1. Obrnuto, ako izraz C ′ ima vrednost 1, tvrdimo da bar jedan od literalaxi mora imati vrednost 1. Zaista, ako bi svi literali xi imali vrednost 0, onda bi izraz C ′ imao istutacnost kao i izraz C ′′ = (y1) · (y1 + y2) · (y2 + y3) · · · ( ¯yk−4 + yk−3) · ( ¯yk−3), koji ocigledno nije zadovoljiv(da bi bilo c′′ = 1, moralo bi da bude redom y1 = 1, pa y2 = 1 . . . yk−3 = 1, yk−3 = 0, i yk−3 = 1, sto jekontradikcija).Pomocu ove redukcije sve klauze sa vise od tri literala mogu se zameniti sa nekoliko klauza od po tacnotri literala. Ostaje da se transformisu klauze sa jednim ili dva literala. Klauza oblika C = (x1 + x2)zamenjuje se ekvivalentnom izrazom

C ′ = (x1 + x2 + z) · (x1 + x2 + z (15)

gde je z nova promenljiva. Konacno, klauza oblika C = x1 moze se zameniti izrazom

C ′ = (x1 + y + z) · (x1 + y + z) · (x1 + y + z) · (x1 + y + z) (16)

u kome su y i z nove promenljive.Prema tome, proizvoljni ulaz za problem SAT moze se svesti na ulaz za problem 3SAT , tako da je prviizraz zadovoljiv akko je zadovoljiv drugi. Jasno je da se ova redukcija izvodi za polinomijalno vreme.

44 Dokaz NP–kompletnosti problema klika.

Problem:Dat je neusmereni graf G = (V,E) i prirodni broj k. Ustanoviti da li G sadrzi kliku velicinebar k.

Teorema: Problem klika je NP-kompletan.

Dokaz: Problem klika je u klasi NP , jer se za svaki pretpostavljeni podskup od k cvorova za poli-nomijalno vreme moze proveriti da li je klika. Pokazacemo sada da se problem SAT moze svesti naproblem klika. Neka je E proizvolni Bulov izraz u KNF , E = E1 ·E2 · · ·Em”. Posmatrajmo, na primer,klauzu Ei = (x+ y+ z +w). Njoj pridruujemo ”kolonu” od cetiri cvora, oznaqena literalima iz E i (bezobzira sto se neki od ih mozda pojavljuju i u drugim klauzama). Drugim recima, graf G koji konstruisemoimace po jedan cvor za svaku pojavu bilo koje promenljive. Ostaje pitanje kako povezati ove cvorove,tako da G sadrzi kliku velicine bar k akko je izraz E zadovoljiv. Primetimo da se vrednost k mozeizabrati proizvoljno, jer je potrebno svesti problem SAT na problem klika, odnosno resiti problem SATkoristeci algoritam za resavae problema klika. Naravno, algoritam za resavanje problema klika mora daradi za svaku vrednost k. Ovo je vazna fleksibilnost, koja se cesto koristi u dokazima NP-kompletnosti.U ovom slucaju za k cemo izabrati vrednost jednaku broju klauza m.Grane u grafu G mogu se zadati na sledeci nacin. Cvorovi iz iste kolone (odnosno cvorovi pridruzeniliteralima iz iste klauze) ne povezuju se granama. Cvorovi iz razlicitih kolona su skoro uvek povezani: izu-zetak je slucaj dva cvora od kojih jedan odgovara promenljivoj, a drugi komplementu te iste promenljive.Primer grafa koji odgovara izrazu

E = (x+ y + z) · (x+ y + z) · (y + z) (17)

prikazan je na slici. Jasno je da se G moze konstruisati za polinomijalno vreme.

59

Page 60: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

Slika 21: Redukcija problema SAT sa ulazom (x+ y + z) · (x+ y + z) · (y + z) na problem klika

Tvrdimo da G ima kliku velicine bar m, akko je izraz E zadovoljiv. Najpre zapazamo da zbogkonstrukcije maksimalna klika ne moze imati vise od m cvorova, nezavisno od E. Pretpostavimo da jeizraz E zadovoljiv. Tada postoji takvo dodeljivanje vrednosti promenljivim, da u svakoj klauzi postojibar jedan literal sa vrednoscu 1. Cvor koji odgovara tom literalu prikljucuje se kliki (ako ima vise takvihliterala, bira se proizvoljan od njih). Dobijeni podgraf jeste klika, jer jedini nacin da dva cvora iz razlicitihkolona ne budu povezana je da jedan od njih bude komplement drugog - sto je nemoguce, jer je svimizabranim literalima dodeljena vrednost 1.Obrnuto, pretpostavimo da G sadrzi kliku velicine bar m. Klika mora da sadrzi tacno jedan cvor iz svakekolone (jer po konstrukciji cvorovi iz iste kolone nisu povezani). Odgovarajucim literalima dodeljujemovrednost 1. Akona ovaj nacin nekoj promenljivoj nije dodeljena vrednost, to se moze uciniti na proizvoljannacin. Izvdeno dodeljivanje vrednosti promenljivima je neprotivrecno: ako bi nekoj promenljivoj x injenom komplementu x, ukljucenim u kliku, istovremeno bila dodeljena vrednost 1, to bi znacilo daodgovarajuci cvorovi (po konstrukciji) nisu povezani - suprotno pretpostavci da su oba cvora u kliki.

45 Dokaz NP-kompletnosti problema 3-obojivosti grafa

Neka je G = (V,E) neusmereni graf. Ispravno bojenje (ili samo bojenje) grafa G je takvo pri-druzivanje boja cvorovima, da je svakom cvoru pridruzena neka boja, a da su susednim cvorovima uvekpridruzene razlicite boje.

Problem (3-obojivost ): Dat je neusmereni graf G = (V,E). Ustanoviti da li se G moze obojitisa tri boje.

Teorema 11.8: Problem 3-obojivost je NP-kompletan.

Dokaz:Problem 3-obojivost pripada klasi NP, jer se moze pretpostaviti proizvoljno bojenje grafa sa 3 boje, azatim za polinomijalno vreme proveriti da li je pretpostavljeno bojenje ispravno. Izvescemo redukcijuproblema 3-SAT na problem 3-obojivost.

Ideja je da se iskoriste sastavni elementi, koji se povezuju u celinu. Neka je E proizvoljan ulaz zaproblem 3-SAT. Treba konstruisati graf G, tako da je izraz E zadovoljiv akko je G 3-obojiv. Najprekonstruisemo osnovni trougao M . Posto je M trougao (kompletni graf sa tri cvora), za njegovo bojenjepotrebne su tacno tri boje. Oznacimo te boje sa T (tacno), F (netacno) i A, videti donji trougao na slici.Pored toga, za svaku promen ljivu x dodajemo novi trougao Mx, cije cvorove oznacavamo sa x, x i A,pri cemu se cvor oznacen sa A poklapa sa cvorom iz M sa istom oznakom. Prema tome, ako se u izrazu

60

Page 61: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

pojavljuje k promenljivih, imamo k + 1 trouglova sa zajednickim cvorom A (slika). Ovo obezbeduje da,ako je, na primer, cvor x obojen bojom T , onda cvor x mora biti obojen bojom F (jer su oba cvorasusedna cvoru obojenom bojom A), i obrnuto. Ovo je u skladu sa znacenjem x.

Slika 22: Prvi deo konstrukcije za redukciju 3-SAT na 3-obojivost.

Potrebno je dodati uslov, koji bi obezbedivao da u svakoj klauzi bar jedan literal ima vrednost 1. Tose moze obezbediti na sledeci nacin. Pretpostavimo, na primer, da se radi o klauzi (x + y + z). Ovdese x, y, z mogu smatrati literalima, tj. nedostatak negacija nad simbolima x, y, z ne smanjuje opstostrazmatranja. Za ovu klauzu uvodimo sest novih cvorova i povezujemo ih sa postojecim cvorovima nanacin prikazan na slici ispod. Nazovimo tri nova cvora povezana sa T i x, y ili z spoljasnjim cvorovima(oznaceni su sa O na slici), a tri nova cvora u trouglu - unutrasnjim cvorovima (oznaceni su sa I na slici).Tvrdimo da ova konstrukcija obezbeduje (ako je moguce bojenje sa tri boje) da bar jedan od cvorovax, y ili z mora biti obojen bojom T . Ni jedan od cvorova x, y, z ne moze biti obojen bojom A, jer susvi oni povezani sa cvorom A (videti prethodnu sliku). Ako bi sva tri cvora x, y, z bili obojeni bojomF , onda bi tri nova spoljasnja cvora povezana sa njima morali biti obojeni bojom A, pa se unutrasnjitrougao ne bi mogao obojiti sa tri boje!

Slika 23: Podgrafovi koji odgovaraju klauzama u redukciji 3-SAT na 3-obojivost.

Sada mozemo da kompletiramo dokaz, i to u dva smera:

1. ako je izraz E zadovoljiv, G se moze obojiti sa tri boje, i

2. ako se G moze obojiti sa tri boje, onda je izraz E zadovoljiv.

Ako je izraz E zadovoljiv, onda postoji takvo dodeljivanje vrednosti promenljivim, da u svakoj klauzibar jedan literal ima vrednost 1. Obojimo cvorove grafa u skladu sa njihovim vrednostima (sa T ako jevrednost 1, odnosno sa F u protivnom). Trougao M obojen je bojama T , F i A na opisani nacin. Upodgrafu koji odgovara klauzi bar jedan literal ima vrednost 1; odgovarajuci spoljasnji cvor bojimo saF , a ostale spoljasnje cvorove sa A, posle cega je bojenje unutrasnjih cvorova lako izvesti. Prema tome,G se moze obojiti sa tri boje.

Obrnuto, ako se G moze obojiti sa tri boje, nazovimo boje u skladu sa bojenjem trougla M (kojimora biti obojen sa tri boje). Zbog trouglova na prvoj slici, boje promenljivih omogucuju neprotivrecnododeljivanje vrednosti promenljivim. Konstrukcija sa druge slike obezbeduje da je bar jedan literal usvakoj klauzi obojen sa T . Konacno, jasno je da se graf G moze konstruisati za polinomijalno vreme,cime je dokaz zavrsen.

46 Moguci kompromisi prilikom resavanja teskih (NP komplet-nih) problema; pretraga sa vracanjem, 3–bojenje grafa.

Pojam NP-kompletnosti je osnova za elegantnu teoriju koja omogucuje prepoznavanje problema zakoje najverovatnije ne postoji polinomijalni algoritam. Medutim, dokazivanjem da je problem NP-

61

Page 62: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

kompletan, sam problem nije eliminisan! I dalje je potrebno resiti ga. Tehnike za resavanje NP-kompletnih problema su ponekad drugacije od tehnika koje smo do sada razmatrali. Ni jedan NP-kompletan problem se (najverovatnije) ne moze resiti tacno i kompletno algoritmom polinomijalne vre-menske slozenosti. Zbog toga smo prinudeni na kompromise.

Najcesci kompromisi odnose se na optimalnost, garantovanu efikasnost, ili kompletnost resenja. Po-stoje i druge alternative, od kojih svaka ponesto zrtvuje. Isti algoritam se moze koristiti u razlicitimsituacijama, primecujui razlicite kompromise.

Algoritam koji ne daje uvek optimalan (ili tacan) rezultat zove se priblizan algoritam. Posebno suzanimljivi priblizni algoritmi koji mogu da garantuju granicu za stepen odstupanja od tacnog resenja.Razmatrali smo probabilisticke algoritme koji mogu da pogrese. Najpoznatiji u toj klasi je algoritam zaprepoznavanje prostih brojeva. Za problem prepoznavanja prostih brojeva se ne zna da li je u P , ali sesmatra da nije NP-kompletan.

Rasireno je verovanje da se NP-kompletni problemi ne mogu resiti algoritmom polinomijalne vremenskeslozenosti, kod kojih je verovatnoca greske mala za sve ulaze. Takvi algoritmi su po svemu sudeci efikasniza probleme, za koje se ne zna da li su u klasi P , ali se ne veruje da su NP-kompletni. Takvi probleminisu cesti. Probabilisticki algoritmi se mogu koristiti kao deo drugih strategija - na primer, kao deopribliznih algoritama.

Drugi kompromis moguc je u vezi sa zahtevom da polinomijalno bude vreme izvrsavanja u najgoremslucaju. Moze se pokusati sa resavanjem NP-kompletnih problema za polinomijalno srednje vreme.Poteskoca sa ovim pristupom je kako definisati prosecno vreme. Na primer, tesko je iskljuciti ulaze zakoje je konkretan problem trivijalan (kao sto je graf koji ima samo izolovane cvorove) iz izracunavanjaproseka. Takvi trivijalni ulazi mogu znatno da uticu na prosek. Algoritmi predvideni za pojedine tipoveslucajnih ulaza mogu da budu korisni ako je stvarna raspodela verovatnoca ulaza u skladu sa pretpo-stavljenom. Medutim, obicno je nalazenje tacne raspodele je obicno vrlo tesko. Najtezi deo posla prikonstrukciji algoritama, koji u proseku dobro rade, je najcesce njihova analiza.

Konacno, mogu se praviti kompromisi u vezi sa kompletnoscu algoritama; naime, moze se dozvolitida algoritam radi efikasno samo za neke specijalne ulaze. Na primer, problem pokrivac grana moze seresiti za polinomijalno vreme za bipartitne grafove. Prema tome, kad se formulise apstraktni problempolazeci od situacije iz realnog zivota, treba obezbediti da svi dopunski uslovi koje ulaz zadovoljavabudu ukljuceni u apstraktnu definiciju. Drugi primer su algoritmi sa eksponencijalnom vremenskomslozenoscu, koji se ipak mogu izvrsavati za male ulaze, sto je cesto potpuno zadovoljavajuce.

Pretraga i grananje sa odsecanjem opisani su u sledecem pitanju.

47 Grananje sa odsecanjem, primena na bojenje grafa.

Ove tehnike opisacemo na jednom primeru. Razmotrimo problem 3-bojenje, odnosno dodeljivanjaboja cvorovima grafa uz izvesna ogranicenja. Primer je iz klase problema nalaeza optimalne vredno-sti (broja boja u ovom slucaju) za n parametara (ovde boja cvorova). U slucaju problema 3-bojenjesvaki parametar ima tri moguce vrednosti, sto odgovara trima bojama. Prema tome, broj potencijalnihresenja je 3n, jer je to ukupan broj nacina na koje se n cvorova mogu obojiti sa tri boje. Naravno,sem ako graf nema grana, broj ispravnih bojenja moze da bude znatno manji od 3n, jer grane namecuogranicenja na moguca bojenja. Da bi se ispitali svi moguci nacini bojenja cvorova, moze se zapocetidodejivanjem proizvoljne boje jednom od cvorova, a zatim nastaviti sa bojenjem ostalih cvorova, vodeciracuna o ogranicenjima koje namecu grane - da susedni cvorovi moraju biti obojeni razlicitim bojama.Pri bojenju cvora, pokusava se sa svim mogucim bojama, koje su konzistentne sa prethodno obojenimcvorovima. Ovaj proces moze se obaviti algoritmom obilaska stabla, koji predstavlja sustinu pretrage igrananja sa odsecanjem. Da bismo razlikovali cvorove grafa i stabla, cvorove stabla zvacemo temenima.

Koren stabla odgovara pocetnom stanju problema, a svaka grana odgovara nekoj odluci o vrednostinekog parametra. Oznacimo tri boje sa C(crveno), P (plavo) i Z(zeleno). Na pocetku se mogu izabratineka dva susedna cvora v i w, i obojiti recimo sa P i Z. Posto se oni ionako moraju obojiti razlicitimbojama, nije bitno koje ce boje biti izabrane (konacno bojenje se uvek moze ispermutovati), pa se zato

62

Page 63: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

moze zapoceti sa bojenjem dva umesto jednog cvora. Bojenje ova dva cvora odgovara pocetnom stanjuproblema, koje je pridruzeno korenu. Stablo se konstruise u toku samog obilaska. U svakom temenu tstabla bira se sledeci cvor grafa za bojenje, i dodaje jedan, dva ili tri sina temenu t, zavisno od broja bojakojima se moze obojiti cvor u. Na primer, ako je u prvi izabrani cvor (posle v i w), a u je susedan cvoru w(koji je vec obojen bojom Z), onda postoje dve mogucnosti za bojenje u, P i C, pa se korenu dodaju dvaodgovarajuca sina. Zatim se bira jedan od ova dva sina i proces se nastavlja. Kad se jedan cvor oboji,smanjuje se broj mogunosti za bojenje ostalih cvorova; prema tome, broj sinova pokazuje tendencijuopadanja kako se napreduje u dubinu stabla. U slucaju da su obojeni svi cvorovi grafa, problem je resen.Verovatnije je, medutim, da cemo naici na cvor koji se ne moze obojiti (jer ima tri susedna cvora koji suvec obojeni razlicitim bojama). U tom trenutku cinimo korak nazad - vracamo se uz stablo (ka nizimnivoima) i pokusavamo sa drugim sinovima.Primetimo da u ovom slucaju, kad se fiksiraju boje cvorova1 i 2, za bojenje ostalih cvorova postoji samo jedan nacin, do koga se dolazi krajnjim desnim putem krozstablo na slici.

Slika 24: Primer primene pretrage na 3-bojenje grafa.

Algoritam za obilazak stabla moze se formulisati indukcijom. Potrebno je pojacati induktivnu hipotezu,tako da obuhvati bojenje grafova ciji su neki cvorovi vec obojeni. Drugim recima, induktivna hipotezatreba da obuhvati bojenje ne samo neobojenih grafova, nego i dovrsavanje zapocetog bojenja.

Induktivna hipoteza: Umemo da zavrsimo 3-bojenje grafa koji ima manje od k neobojenih cvorova,ili da za takve grafove ustanovimo da se ne mogu obojiti sa tri boje. Ako je dat graf sa k neobojenihcvorova, biramo jedan od neobojenih cvorova i pronalazimo sve moguce boje kojima se on moze obojiti.Ako su sve boje vec iskoriscene za susede tog cvora, zapoceto 3-bojenje se ne moze kompletirati. Uprotivnom, cvor bojimo jednom od mogucih boja (jednom po jednom) i resavamo preostale probleme(koji imaju po k − 1 neobojeni cvor) indukcijom.

Algoritam 3-bojenje(G, var U);Ulaz: G = (V,E) (neusmereni graf) i U (skup vec obojenih cvorova). U je obicno na pocetku prazanskupIzlaz: Pridruzivanje jedne od tri boja svakom cvoru G.

begin

if U = V then

print "bojenje je zavrseno";

halt; prekid svih rekurzivnih poziva

else

izabrati neki cvor v koji nije u skupu U;

for C := 1 to 3 do

if ni jedan sused v nije obojen bojom C then

dodaj cvor v obojen bojom C skupu U;

3-bojenje(G,U)

end

Nije tesko naci primer grafa i redosled njegovih cvorova, takav da se pri njegovom bojenju dobija stablosa eksponencijalnim brojem temena. Ovo je cesta situacija u algoritmima pretrage. Jedino se mozemonadati da cemo, ako stablo budemo obilazili na pogodan nacin, na resenje brzo naici. Algoritam kojismo opisali ne precizira nacin izbora sledeceg cvora. Posto se kao sledeci moze izabrati proizvoljan cvor,imamo izvesnu fleksibilnost, koja se moze iskoristiti za formiranje odgovarajuce heuristike.

Grananje sa odsecanjem je varijacija pretrage, koja se moze primeniti ako se trazi minimum (ili maksi-mum) neke ciljne funkcije. Posmatrajmo opsti problem bojenja grafa: cilj je pronaci najmanji broj boja

63

Page 64: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

potreban za bojenje zadatog grafa, a ne samo ustanoviti da li je graf moguce obojiti sa tri boje. Mozese formirati stablo slicno kao za 3-bojenje, ali broj sinova svakog cvora moze da bude vrlo veliki. Svakinovi cvor moze se obojiti nekom od vec koriscenih boja (sem ako je neki od njegovih suseda vec obojentom bojom), ili novom bojom. Prema tome, algoritam za 3-bojenje menja se na dva mesta:

1. konstanta 3 zamenjuje se brojem do sada koriscenih boja, i

2. algoritam se ne zavrsava u trenutku kad je V = U , jer je moguce da postoji bolji nacin da se obojigraf.

Poteskoce izaziva cinjenica da u algoritmu dolazi do vracanja unazad samo kad se dode do lista u stablu(odnosno kad je V = U), jer se nova boja uvek moze dodeliti cvoru. Prema tome, skoro je sigurno da ceovakav algoritam biti vrlo neefikasan (sem ako je graf vrlo gust). Efikasnost algoritma moze se poboljsatipomocu sledeceg zapazanja, koje je u osnovi metoda grananja sa odsecanjem. Pretpostavimo da smoprosli deo stabla do nekog lista i tako pronasli ispravno bojenje sa k boja. Pretpostavimo dalje da smoposle vracanja unazad krenuli drugim putem, i tako dosli do cvora koji zahteva uvodenje (k+ 1)-e boje.U tom trenutku moze se napraviti korak nazad, jer je vec poznato bolje resenje. Prema tome, k sluzikao granica za pretragu.

U svakom temenu stabla izracunavamo donju granicu za najbolje resenje na koje se moze naici medusledbenicima tog temena. Ako je ta donja granica veca od nekog vec nadenog resenja, cinimo koraknazad. Jedan od nacina da se algoritam grananja sa odsecaem ucini efikasnim je izracunavanje dobrihdonjih granica (ili gorih granica, ako je cilj maksimizirati ciljnu funkciju). Drugi valjan elemenat jenalazenje dobrog redosleda obilaska, koji omogucuje brzo pronalazenje dobrih resenja, a time i ranijenapustanje neperspektivnih podstabala.

Algoritmi sa grananjem i odsecaem garantuju pronalazenje optimalnog resenja ako se svi potproblemiistraze ili ”odseku”. Ako izvrsavanje traje predugo, moze se prekinuti, i tako dobiti aproksimaciju - naj-bolje resenje pronadeno do tog trenutka. Obilazak stabla moze se izvesti pretragom u dubinu, pretragomu sirinu ili nekom njihovom kombinacijom. Ekstremni primer ranijeg zavrsavanja pretrage je uzimanjeprvog puta (izabranog u skladu sa nekom heuristikom) koja vodi prihvatljivom resenju (obicno ono kojeodgovara listu stabla) kao izlaza algoritma. Na primer, u algoritmu za bojenje grafa, cvorovi se mogubojiti redosledom prema rastucim stepenima; ideja je da se manje gubi na fleksibilnosti fiksiraem bojecvorova malog stepena. To je jednostavan pohlepni algoritam.

48 Priblizni algoritam za nalazenje pokrivaca grana na osnovumaksimalnog uparivanja.

Algoritam garantuje nalazenje pokrivaca sa najvise dva puta vise cvorova nego u minimalnom po-krivacu. Neka je G graf, i neka je M maksimalno uparivanje u G. Posto je M uparivanje, njegovegrane nemaju zajednickih tacaka, a posto je M maksimalno uparivanje, sve ostale grane imaju bar jedanzajednicki cvor sa nekom granom iz M .

Teorema: Skup cvorova susednih granama maksimalnog uparivanja M je pokrivac grana, sa najvisedva puta vise cvorova nego sto ih ima minimalni pokrivac.

Dokaz: Skup cvorova koji pripadaju M cini pokrivac grana, jer je M maksimalno uparivanje. Akoimamo granu koja nije pokrivena (ni jedan kraj joj nije u M) znaci da je mozemo dodati u uparivanjesto je kontradikcija jer je M maksimalno uparivanje.Posto je M uparivanje, bilo koji cvor iz M moze da pokrije najvise jednu granu uparivanja M . Prematome, bar polovina cvorova iz M mora da pripada pokrivacu grana. Maksimalno uparivae moze se naci prostim dodavanjem grana sve dotle dok je to moguce (odnosno dokpostoje neka dva neuparena, a susedna cvora).

49 Priblizni algoritmi za resavanje 1–D problema pakovanja.

Jednodimenzionalni problem pakovanja odnosi se na pakovanje objekata razlicite velicine u kutije takoda se iskoristi najmanji moguci broj kutija. Na primer, prilikom selidbe je cilj preneti sve stvari, koristeci

64

Page 65: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

kamion najmanji moguci broj puta, pakujuci stvari sto je moguce bolje. To je naravno trodimenzionalniproblem; ovde cemo se pozabaviti njegovom jednodimenzionalnom verzijom. Zbog jednostavnosti sepretpostavlja da svi sanduci imaju velicinu 1.

Problem: Neka je x1, x2, ..., xn skup realnih brojeva izmedu 0 i 1. Podeliti ih u najmanji mogucibroj podskupova, tako da suma brojeva u svakom podskupu bude najvise 1.

Na jednodimenzionalni problem pakovanja nailazi se, na primer, u problemima upravljanja memori-jom, kad postoje zahtevi za dodelom memorijskih blokova razlicite velicine, a dodeljivanje se vrsi iznekoliko jednakih velikih blokova memorije. Jednodimenzionalni problem pakovanja je NP-kompletan.Jedna od mogucih heuristika za resavanje ovog problema je staviti x1 u prvu kutiju, a zatim, za svako i,staviti xi u prvu kutiju u kojoj ima dovoljno mesta, ili zapoceti sa novom kutijom, ako nema dovoljnomesta ni u jednoj od koriscenih kutija. Ovaj algoritam zove se prvi odgovarajuci i, kao sto pokazujesledeca teorema, dovoljno je dobar u najgorem slucaju.

Teorema: Algoritam prvi odgovarajuci zahteva najvise 2m kutija, gde je m najmanji moguci broj kutija.

Dokaz: Po zavrsetku algoritma prvi odgovarajuci ne postoje dve kutije sa iskoriscenjem manjim od

1/2. Prema tome, ako sa k oznacimo broj upotrebljenih kutija, bice m ≥n∑

i=1

xi > (k − 1)/2, odakle je

k < 2m+ 1, odnosno k ≤ 2m.

Ispostavlja se da je granica definisana ovom teoremom prilicno gruba. Konstanta 2 iz teoreme mozese smanjiti na 1.7 posle nesto komplikovanije analize. Konstanta 1.7 ne moze se dalje smanjiti, jer po-stoje primeri u kojima algoritam prvi odgovarajui zahteva 1.7 puta vise kutija od optimalnog algoritma.Opisani algoritam moze se jednostavno poboljsati. Do najgoreg slucaja dolazi kad se mnogo malih bro-jeva pojavljuje na pocetku. Umesto da se brojevi pakuju redom kojim nailaze, oni se najpre sortiraju unerastuci niz. Promenjeni algoritam zove se opadajuci prvi odgovarajuci, i u najgorem slucaju trosinajvise oko 1.22 puta vise kutija od optimalnog algoritma (teoremu dajemo bez dokaza).

Teorema: Algoritam opadajuci prvi odgovarajuci zahteva najvise11

9m + 4 kutija, gde je m najma-

nji moguci broj kutija.

Konstanta11

9je takode najbolja moguca. Dakle, granica kod poboljsanog algoritma je k ≤ 11

9m+ 4

50 Priblizni algoritmi za resavanje Euklidskog problema trgovackogputnika.

Problem trgovackog putnika (TSP, skracenica od traveling salesman problem) je vazan problem samnogo primena. Razmotriemo ovde varijantu TSP sa dopunskim ogranicenjem da tezine grana odgova-raju euklidskim rastojanjima.

Problem: Neka je C1, C2, ..., Cn skup tacaka u ravni koje odgovaraju polozajima n gradova. PronaciHamiltonov ciklus minimalne duzine (marsrutu trgovackog putnika) medu njima.

Problem je i dalje NP-kompletan (ovo tvrede navodimo bez dokaza), ali videcemo da pretpostavkada su rastojanja euklidska omogucuje konstrukciju pribliznog algoritma za njegovo resavanje. Preciznije,ova pretpostavka moze se uopstiti, zameujuci je pretpostavkom da rastojanja zadovoljavaju nejednakosttrougla, odnosno da je rastojanje izmedu dva cvora uvek manje ili jednako od duzine proizvoljnog putaizmedu ih preko ostalih cvorova.

Najpre se konstruise minimalno povezujuce stablo (MCST, ovde su cene grana njihove duzine), stoje mnogo laksi problem. Tvrdimo da cena stabla nije veca od duzine najboljeg ciklusa TSP. Zaista,ciklus TSP sadrzi sve cvorove, pa ga uklanjanje jedne grane cini povezujucim stablom, cija cena je vecaili jednaka od cene MCST. Od povezujuceg stabla se, medutim, ne dobija direktno ciklus TSP. Posma-trajmo najpre ciklus koji se dobija pretragom u dubinu ovog stabla (polazeci od proizvoljnog cvora), isadrzi granu u obrnutom smeru uvek kad se grana prilikom vracanja prolazi u suprotnom smeru (ovaj

65

Page 66: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

ciklus odgovara, na primer, obilasku galerije u obliku stabla, sa slikama na oba zida svakog hodnika,iduci uvek udesno). Svaka grana se tako prolazi tacno dva puta, pa je cena ovog ciklusa najvise dva putaveca od cene MCST. Na kraju se ovaj ciklus prepravlja u ciklus TSP, iduci precicom uvek kad trebaproci kroz granu vec ukljucenu u ciklus (videti sliku ). Drugim recima, umesto povratka starom granom,idemo direktno do prvog nepregledanog cvora. Pretpostavka da su rastojanja euklidska je vazna, jerobezbeduje da je uvek direktni put izmedu dva grada bar toliko dobar, koliko bilo koji zaobilazni put.Prema tome, duzina dobijenog ciklusa TSP je jos uvek manja od dvostruke duzine minimalnog ciklusaTSP.

Slika 25: Primer primene pretrage na 3-bojenje grafa.

Slozenost: Vremenska slozenost ovog algoritma odredena je brojem koraka u algoritmu za konstrukcijuMCST.

Poboljsanje: Algoritam koji smo upravo opisali moze se poboljsati na sledeci nacin. Njegov ”najgrubljideoje pretvaranje obilaska stabla u ciklus TSP. Ta konverzija moze se posmatrati i na drugi nacin: ona for-mira Ojlerov ciklus od stabla u kome je svaka grana udvostrucena. Posle toga se konstruise ciklus TSPkoriscenjem precica u Ojlerovom ciklusu. Konverzija stabla u Ojlerov ciklus moze se izvesti mnogo raci-onalnije. Ojlerov graf moze da sadrzi samo cvorove parnog stepena. Posmatrajmo sve cvorove neparnogstapena u stablu. Broj takvih cvorova mora biti paran (u protivnom bi suma stepena cvorova bilaneparna, sto je nemoguce, jer je ta suma jednaka dvostrukom broju grana). Ojlerov graf se od stablamoze dobiti dodavanjem dovoljnog broja grana, cime se postize da stepeni svih cvorova postanu parni.Posto se ciklus TSP sastoji od Ojlerovog ciklusa (sa nekim precicama), voleli bismo da minimiziramozbir duzina dodatih grana. Razmotrimo sada taj problem.

Dato je stablo u ravni, a cilj je dodati mu neke grane, sa minimalnom sumom duzina, tako da dobi-jeni graf bude Ojlerov. Svakom cvoru neparnog stepena mora se dodati bar jedna grana. Pokusajmo dapostignemo cilj dodavanjem tacno jedne grane svakom takvom cvoru. Pretpostavimo da ima 2k cvorovaneparnog stepena. Ako dodamo k grana, tako da svaka od njih spaja dva cvora neparnog stepena, ondace stepeni svih cvorova postati parni. Problem tako postaje problem uparivanja. Potrebno je pronaciuparivanje minimalne duzine koje pokriva sve cvorove neparnog stepena. Nalazenje optimalnog upari-vanja moze se izvesti za O(n3) koraka za proizvoljni graf (ovo tvrdenje navodimo bez dokaza). Konacniciklus TSP se zatim dobija od Ojlerovog grafa (koji obuhvata minimalno povezujuce stablo i uparivanjeminimalne duzine) korisecem precica. Ciklus TSP dobijen ovim algoritmom od stabla sa slike (prikazanje na slici).

Slika 26: Primer primene pretrage na 3-bojenje grafa.

Teorema: Poboljsani algoritam daje ciklus TSP cija je duzina najvise 1:5 puta veca od duine minimal-nog ciklusa TSP.

Dokaz: Potrebno je oceniti duzinu Ojlerovog ciklusa, jer se duzina ciklusa posle uvodenja eventualnihprecica moze samo smanjiti. Ojlerov ciklus se sastoji od stabla i uparivanja. Oznacimo sa Q minimalniciklus TSP, a sa |Q| njegovu duzinu. Videli smo vec da je duzina stabla manja ili jednaka od |Q|; prema

66

Page 67: Konstrukcija i analiza algoritama { odgovori na pitanjaalas.matf.bg.ac.rs/~mi13050/pdf/KIAA-odgovori.pdf · 1 Pravila izvođenja, valjani dokazi, rezolucija. Pravila izvođenja sa

tome, dovoljno je dokazati da duzina uparivanja ne prelazi |Q|/2. Ciklus Q sadrzi sve cvorove. Nekaje D skup cvorova neparnog stepena u polaznom stablu. Za skup D mogu se formirati dva disjunktnauparivanja sa zbirom duzina ≤ |Q| na sledeci nacin (videti sliku , na kojoj su zaokruzeni cvorovi iz D).Zapocinjemo sa proizvoljnim cvorom v ∈ D i uparujemo ga sa sa najblizim cvorom (u smeru kazaljke nasatu) duz ciklusa Q. Posle toga nastavlja se sa uparivanjem u istom smeru. Ako upareni cvorovi nisususedi u Q, onda je rastojanje izmedu njih manje ili jednako od duzine puta koji ih povezuje u Q (zbognejednakosti trougla). Ovaj proces daje jedno uparivanje. Drugo uparivanje dobija se ponavljanjemistog procesa u smeru suprotnom od kazaljke na satu. Suma duzina oba uparivanja je najvise |Q|, videtisliku. Medutim, posto je M uparivanje minimalne tezine u D, njegova duzina je manja ili jednaka odduzine boljeg od dva spomenuta uparivanja (sa zbirom |Q|), pa je dakle manja ili jednaka od |Q|/2.

Slika 27: Primer primene pretrage na 3-bojenje grafa.

Nalazenje uparivanja minimalne tezine znatno je slozenije od nalazenja minimalnog povezujuceg stabla,ali se time dobija bolja granica. Navedeni primer ilustruje osnovnu karakteristiku ovog tipa algoritama:uopstava se laksi problem - ili se oslabljuju (relaksiraju) neki elementi polaznog problema - i tako seformira heuristika.

67