Professional Documents
Culture Documents
Algoritmi PDF
Algoritmi PDF
MATEMATIKI
ALGORITMI
Lekcije
Autori :
Dr.sc. Mevludin Glavi
Zoran Jasak, Mr.sci.math.
Uvod
Ovaj tekst je namijenjen studentima druge godine dodiplomskog studija Prirodno
matematikog fakulteta u Tuzli na Odsjeku za matematiku kao dio materijala za izborni
predmet Matematiki algoritmi, u kolskoj 2010/2011. godini. Namjena teksta je da prui
osnovne informacije iz ove oblasti kao podloga za dalji samostalni rad studenata.
Tekst obuhvata teorijski dio poglavlja koja su predviena planom ovog predmeta. Tekst ne
obuhvata zadatke koji su raeni kao praktini primjeri pojedinih vrsta algoritama. Njihova
namjena je bila izgraditi analitiki pristup u rjeavanju praktinih matematikih problema.
NAPOMENA : Tekst i dijelovi teksta ne mogu biti reprodukovani ili preuzimani bez znanja i
saglasnosti autora.
Autori :
Mevludin Glavi, Dr.sci.,
Zoran Jasak, Mr.sci.math.,
jasak_z@bih.net.ba
SADRZAJ
SADRZAJ
Sadrzaj
1 Algoritmi
1.1 Uvod . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Klasikacija algoritama . . . . . . . . . . . . . .
1.3 Predstavljanje algoritama . . . . . . . . . . . .
1.4 Analiza kompleksnosti algoritama . . . . . . . .
1.4.1
-notacija . . . . . . . . . . . . . . . . .
1.4.2 O-notacija . . . . . . . . . . . . . . . . .
1.4.3
-notacija . . . . . . . . . . . . . . . . .
1.4.4 o-notacija . . . . . . . . . . . . . . . . .
1.5 Podjela algoritama prema brzini . . . . . . . . .
1.5.1 Algoritmi konstantnog vremena . . . . .
1.5.2 Algoritmi u linearnom vremenu . . . . .
1.5.3 Algoritmi sa kvadratnim vremenom . . .
1.5.4 Algoritmi sa logaritamskim
vremenom .
p
1.5.5 Algoritmi brzine n . . . . . . . . . . .
1.5.6 Algoritmi sa eksponencijalnim vremenom
1.5.7 Kombinacije algoritama . . . . . . . . .
1.5.8 Rekurzije . . . . . . . . . . . . . . . . .
1.6 Primjeri . . . . . . . . . . . . . . . . . . . . . .
1.7 Primjeri za samostalni rad . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
izvravanja
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
2 Algoritmi sortiranja
2.1 Sortiranje nizova - osnovne metode . . . . . . . . . .
2.1.1 Sortiranje putem ukljucivanja (Insertion sort)
2.1.2 Sortiranje putem direktne podjele . . . . . . .
2.1.3 Sortiranje putem zamjene . . . . . . . . . . .
2.2 Sortiranje nizova - poboljane metode . . . . . . . . .
2.2.1 Shell sort . . . . . . . . . . . . . . . . . . . .
2.2.2 Quick sort . . . . . . . . . . . . . . . . . . . .
2.2.3 Merge sort . . . . . . . . . . . . . . . . . . . .
2.2.4 Heap sort . . . . . . . . . . . . . . . . . . . .
3 Pohlepni algoritmi
3.1 Rasporeivanje aktivnosti . . . . .
3.2 Knapsack problem (problem ranca)
3.2.1 Korektnost . . . . . . . . .
3.3 Pohlepni algoritmi na grafovima . .
3.3.1 Kruskalov algoritam . . . .
3.3.2 Primov algoritam . . . . . .
3.3.3 Dijkstra algoritam . . . . .
4 Slucajni brojevi
4.1 Uvod . . . . . . . . . .
4.2 Uniformna distribucija
4.3 Normalna distribucija .
4.4 Testiranje slucajnosti .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
5
6
6
7
8
9
9
10
10
10
10
11
12
12
12
13
16
17
.
.
.
.
.
.
.
.
.
18
18
19
20
23
25
25
27
28
28
.
.
.
.
.
.
.
29
29
30
31
32
34
35
36
.
.
.
.
39
39
39
41
43
SADRZAJ
SADRZAJ
5 NP
5.1
5.2
5.3
kompleksnost
Problemi odlucivanja . . . . . . . . . . . . . . .
Problemi prepoznavanja jezika . . . . . . . . . .
Verikacija polinomijalnog vremena i certikati
5.3.1 NP klasa . . . . . . . . . . . . . . . . . .
5.4 Redukcije NP kompleksnosti . . . . . . . . . . .
5.4.1 Problem tri boje . . . . . . . . . . . . .
5.4.2 Clique pokrivac (cover) (CCov) . . . . .
5.4.3 Redukcija na polinomijalno vrijeme . . .
5.5 NP kompletnost . . . . . . . . . . . . . . . . . .
5.6 Zadaci za samostalni rad . . . . . . . . . . . . .
6 Literatura
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
46
47
49
50
51
51
52
54
54
56
57
1 ALGORITMI
1 Algoritmi
1.1 Uvod
Termin "algoritam" je nastao po latinskom prevodu imena matematicara iz devetog vijeka, Abu Jafar Muhammad Ibn Musu Al-Khowarizmi koji se bavio trigonometrijom,
astronomijom, zemljopisom, kartograjom, a smatra se ocem algebre jer je denirao
osnovna pravila rjeavanja linearnih i kvadratnih jednadzbi. Njegovi radovi su osnova
razvoja mnogih matematickih i prirodnih disciplina, meu njima i racunarstva.
Prvi zapis algoritma prilagoen racunaru pripada Adi Byron iz 1842, pa se zbog ovoga
smatra prvom programerkom, a racunao je Bernoullijeve brojeve. Racunar za koji je
napisan je bio analiticki stroj koji je zamislio, ali nikad u potpunosti proveo u djelo, Englez
Charles Babbage. Analiticki stroj je trebao biti prvi programabilni racunar, sastavljen
u potpunosti od mehanickih dijelova. Mehanicki dijelovi i zicka glomaznost su glavni
razlozi zato nikad nije zavren1 .
Algoritam se denie na nekoliko nacina :
Algoritam je skup pravila kojima se provodi kalkulacija bilo rucno bilo putem maine
Algoritam je procedura od konacnog broja koraka kako bi se dobio trazeni rezultat
Algoritam je niz racunskih koraka kojima se ulaz transformie kako bi se dobio izlaz
Algoritam je niz operacija koje se izvode nad podacima koji trebaju biti organizovani u strukturama podataka
Algoritam je apstrakcija programa koji se treba izvesti na zickoj maini (model
izracunavanja)
U tekstu [11] algoritam se denie kao "jasno speciciran matematicki process izracunavanja; skup pravila koji ako se slijede daju zeljeni rezultat". U matematici, racunarstvu,
lingvistici i srodnim disciplinama, algoritam je konacan niz dobro denisanih naredbi
za ostvarenje zadatka, koji ce za dato pocetno stanje zavriti u denisanom konacnom
stanju.
Iz datih denicija se moze zakljuciti da je algoritam skup koraka odnosno postupak kojim
se odreeni problem rjeava u konacnom broju koraka. Istorijski gledano, svi problemi su
rjeavani nekim vidom algoritma ali je proteklo puno vremena da se napravi odgovarajuca
formalizacija.
Koncept algoritma je potekao kao sredstvo zapisivanja postupaka za rjeavanje matematickih problema, poput pronalazenja zajednickog djelitelja dva broja ili mnozenja dva
broja. Koncept je formaliziran 1936. u vidu Turingovog stroja Alana Turinga i lambda
racuna Alonza Churcha, koji su jedan za drugim postavili temelje racunarstva.
Najpoznatiji algoritam u istoriji datira mnogo prije vremena starih grka; to je Euklidov
algoritam za racunanje najveceg zajednickog djelioca dva cijela broja.
Algoritmi imaju slijedeca svojstva:
1
Prije nekoliko godina su britanski inzinjeri uspjeli sastaviti potpuno funkcionalan ureaj koji je
zamislio Charles Babbage.
1.1 Uvod
1 ALGORITMI
1 ALGORITMI
1 ALGORITMI
1 ALGORITMI
a zanemaruju se detalji vezani za tacnu realizaciju. Iz tog razloga analiza algoritma je priblizna. Na taj nacin se, ipak, dobijaju znacajne informacije o algoritmu koje omogucavaju
uporeivanje razlicitih algoritama za rjeavanje istog problema.
Logican korak je da se zanemare konstantni faktori jer se brzine izvravanja algoritama
na raznim racunarima razlikuju priblizno za konstantan faktor. Od interesa je ocjena
algoritma kada ulazna velicina tezi beskonacnosti.
U analizi algoritama se za svaki ulaz odreuje njegova velicina (dimenzija) n. Velicina
ulaza nije striktno denisana; obicno je to mjera velicine memorijskog prostora potrebnog
za smjetanje ulaza.
Ocjena vremenske slozenosti algoritma se sastoji u brojanju racunskih koraka koje treba
izvriti. Termin "racunska operacija" moze obuhvatiti vie tipova operacija kao to je
sabiranje i mnozenje. Vrijeme izvravanja zavisi od konkretnog racunara, odabranog
programskog jezika i slicno. Stoga se u algoritmu izdvaja korak koji se ponavlja i koji na
taj nacin postaje osnova analize. Naprimjer, u sortiranju je to uporeivanje. Tako, ako je
broj uporeivanja O (f (n)) a broj ostalih operacija je proporcionalan broju uporeivanja
tada je O (f (n)) granica vremenske slozenosti algoritma.
Pod pojmom "prostorna slozenost" se podrazumijeva velicina memorije potrebne za
izvrenje algoritma pri cemu se prostor za smjetanje ulaznih podataka najcece ne
racuna. Ovo omogucava uporeivanje razlicitih algoritama za iste probleme. I ovdje se
trazi asimptotska procjena za velike velicine problema. Prostorna slozenost O (n) znaci
da je za izvrenje algoritma porebna memorija proporcionalna onoj za smjetanje podataka. Ako je prostorna slozenost O (1) tada je memorijski prostor potreban za njegovo
izvrenje ogranicen konstantom bez obzira na obim ulaza.
Kada se ispituje vrijeme potrebno racunaru da izvri predviene procedure datog algoritma mjeri se kolicina vremena u terminima bit operacija. Pod terinom bit operacija
se podrazumijeva sabiranje, oduzimanje ili mnozenje dvije binarne cifre, dijeljenje dvobitnog broja sa jednobitnim brojem ili pomjeranje cifara binarnog broja za jedno mjesto
u lijevo. Stvarna kolicina vremena potrebna za izvrenje bit operacije na racunaru varira
u zavisnosti od arhitekture i kapaciteta racunara. Kada se opisuje broj bit operacija
potrebnih da se izvri algoritam opisuje se racunska kompleknost ili red tog algoritma.
Cesto
je teko, pa i nemoguce, izvesti egzaktnu formulu za broj operacija nekog algoritma.
Zato se proucava asimptotsko ponaanje broja operacija kad velicina ulaznih podataka
neograniceno raste. Najpoznatije asimpotske notacije slozenosti algoritma su: -notacija,
O-notacija i -notacija.
1.4.1
-notacija
Denicija. Neka je g (n) funkcija denisana na nekom podskupu skupa prirodnih brojeva
i ciji je skup vrijednosti neki podskup skupa realnih brojeva. Sa (g (n)) se oznacava
skup funkcija f (n) takvih da postoje pozitivne konstante c1 , c2 i prirodan broj n0 takvi
da je
0
c1 g (n)
f (n)
c2 g (n)
za svako n
n0
1 ALGORITMI
Ovdje
oznacava klasu funkcija a f (n) =
(g (n)).
f (n)
c g (n) ;
za svako n
n0
1 ALGORITMI
3.
Ako je fi (n) = O (g (n)), i = 1; 2; :::; k tada je
f1 (n) + f2 (n) + ::: + fk (n) = O (g (n))
4.
Ako je fi (n) = O (gi (n)), i = 1; 2; :::; k tada je
f1 (n) f2 (n) ::: fk (n) = O (g1 (n) g2 (n) ::: gk (n))
Ako je f (n) monotono rastuca funkcija koja nije ogranicena, a > 1 i c > 0, tada
f (n)c = O af (n)
Za f (n) = n dobija se nc = O (an ) a za f (n) = loga n dobija se (loga n)c = O aloga n =
O (n) to znaci da proizvoljan stepen logaritamske funkcije raste spporije od linearne
funkcije.
Primjer. Kako je
ln n
lim
=0
n!1 n
za svako > 0 tada vrijedi da je ln n = O (n ) za svako
> 0.
Primjer. Neka je f (n) broj bita broja n. Tada je f (n) = [log2 n] + 1. Kako je
f (n)
=1
lim
n!1 log2 n
tada vrijedi da je f (n) = O (log2 n). S obzirom da je log2 n =
1.4.3
ln n
ln 2
-notacija
Denicija. Neka je g (n) realna funkcija denisana na nekom podskupu prirodnih brojeva. Sa (g (n)) se oznacava skup realnih funkcija f (n) denisanih na nekom podskupu
skupa realnih brojeva takvih da postoji konstanta c > 0 i prirodan broj n0 takvi da vrijedi
0 c g (n) f (n) za svako n n0 .
Ovdje ( ) oznacava klasu funkcija a f (n) =
(g (n)).
Velicina ( ) se tumaci tako da je g (n) donja granica za f (n). U tom smislu, oznaka
f (n) = (g (n)) se tumaci da "f raste najmanje kako raste g".
Iz denicije asimpotskih notacija direktno slijedi naredni teorem.
Teorem. Za bilo koje dvije funkcije f (n) i g (n) vrijedi f (n) =
je f (n) = O (g (n)) i f (n) = (g (n)).
1.4.4 o-notacija
Denicija. Neka je g (n) realna funkcija denisana na nekom podskupu skupa prirodnih
brojeva. Sa o (g (n)) se oznacava skup realnih funkcija f (n) denisanih na nekom podskupu skupa realnih brojeva takvih ako i samo ako vrijedi f (n) = O (h (n)) i f (n) 6=
(h (n)).
Ovdje o ( ) oznacava klasu funkcija a f (n) = o (g (n)) je oznaka za inkluziju f (n) 2
o (g (n)).
Oznaka f (n) = o (g (n)) se tumaci da "f raste striktno sporije od g".
9
1 ALGORITMI
10
1 ALGORITMI
11
1 ALGORITMI
1 ALGORITMI
kojeg slijedi linearni blok ima ukupno vrijeme koje je linearno; efekat log n petlje naprosto
icezava. Ne treba previe brinuti. Stara engleska izreka kaze : brini o dolarima a centi
c
e se brinuti sami za sebe.
Konstrukcije Ako ... inace ... Za ove konstrukcije se uvijek uzima najgori moguci
slucaj ako ne postoji sigurnost ta ce se desiti. Najgori slucaj u bilo kojoj konstrukciji
ovog tipa je da se izvrava bilo if bilo inace dio, koji god da je od njih najgori. Iz prakticnih
razloga se uzima kako da se deavaju obje strane.
Najgori moguci slucaj. U izboru najgoreg moguceg slucaja mogu se slijediti dva prosta
pravila.
1. Ako vrijeme ukljucuje stepen od n kao to je n2 ili n1=2 tada je blok sa vecim stepenom
od n gori
2. Ako su stepeni od n jednaki ili ako nema stepena od n blok sa vie log n je loiji
p
Naprimjer, ako se poredi n n lg n sa lg3 n prvi broj ima stepen n1;5 dok drugi ima 0 kao
stepen za n. Dakle, prvi od njih je loiji.
Petlje. Vrijeme izvrenja jednostavne petlje (koja sadrzi samo jednostavne naredbe)
zavisi od toga koliko puta se petlja izvrava. Vrijeme petlji u nizu se sabira to znaci da
dominira petlja sa vecim vremenom izvrenja. Primjer je :
for (int i = 0; i < n; i += c) { // O(n)
statement;
}
for (int i = 0; i < n; i += c) { // O(n log n)
for (int j = 0; j < n; i *= c) {
statement;
}
}
Ugnjezdeni blokovi. Ako je blok ugraen unutar drugog bloka efekti se multipliciraju.
Ukupno vrijeme izvrenja postaje (n2 ). Primjer je poreenje dvije nesortirane liste
kako bi se vidjelo da li je neka stavka sadrzana u obje liste. Uzima se element prve liste i
poredi sa svakim elementom druge liste to uzima vrijeme reda n. S obzirom da se posao
ponavlja za n elemenata druge liste obavlja se n n = n2 operacija poreenja. Dupliranje
obima ulaza ima za posljedicu cetiri puta duze vrijeme izvrenja.
1.5.8 Rekurzije
Postoje rutine (funkcije, procedure) koje pozivaju same sebe. One su tipicne za pristupe
"podijeli pa vladaj" gdje funkcija ulaz dijeli na manje dijelove i poziva se na svakom od
tih dijelova.
Ako za clanove niza Fn , n = 1; 2; ::: vazi jednakost
Fn = f (Fn 1 ; Fn 2 ; :::; F1 ; n)
kaze se da niz Fn zadovoljava diferentnu jednadzbu ili rekurentni izraz. Specijalno, ako
se za neko k 1 clan Fn izrazava preko k prethodnih clanova niza
13
1 ALGORITMI
Fn = f (Fn 1 ; Fn 2 ; :::; Fn k ; n)
onda je k red te diferentne jednacine. Matematickom indukcijom se pokazuje da je ovaj
niz jednoznacno odreen sa prvih k clanova niza F1 ; F2 ; :::; Fk .
Jedna od najpoznatijih diferentnih jednacina je ona koja denie Fibonacijev niz
Fn = Fn
+ Fn 2 ;
F1 = F2 = 1
Nacin procjene brzine algoritma ce biti procijenjen na jednom primjeru. Neka je data
rekurzivna relacija
T (n) = 2 T (n=2) + n;
T (1) = 1
Izraz kojim se izracunava svaki clan niza koji se generie zove se rjeenje. U ovom slucaju
je cilj procijeniti gornju granicu za koju je T (n) f (n). Vrijedi:
T (n) = 2 T (n=2) + n =
= 2 [2 T (n=4) + n=2] + n =
= 4 T (n=4) + 2n =
= 4 [2 T (n=8) + n=4] + 2n =
= 8 T (n=8) + 3n
= :::
= 2k T n=2k + k n
n
+ c nk
b
1 ALGORITMI
T (n) = a T
n
+ c nk
b
(1)
dato je jednakocu
8
< O nlogb a
O nk log n
T (n) =
:
O nk
a > bk
a = bk
a < bk
Dokaz. Dokaz ce biti proveden samo za podniz n = bm gdje je m cijeli nenegativni broj.
Mnozenjem izraza (1) sa a m =c dobija se rekurentni izraz
tm = tm
1
gdje je tm = a
c
1
t0 = T (1)
c
+ qm;
tm = t0 +
m
X
qi
i=1
Za q 6= 1 je
m
X
i=1
qi =
q m+1
1 q
(n=2) + O (1)
(n 1) + O (1)
T (n=2) + O (1)
(n 1) + O (n)
T (n=2) + O (n)
Algoritam
Binarno pretrazivanje
Sekvencijalno pretrazivanje
Put po stablu
Selection sort
Merge sort
15
O( )
O (log n)
O (n)
O (n)
O (n2 )
O (n log n)
1.6 Primjeri
1 ALGORITMI
1.6 Primjeri
Primjer 1. Sabiranje ili oduzimanje dva n-bitna cijela broja ima kompleksnost O (n).
Za analizu kompleksnosti mnozenja dva broja potreban je kratki prikaz postupka. Jedan
od mogucih nacina mnozenja dva cijela n-bitna broja je tzv. digitalni metod. Neka su
a = (a2n 1 a2n 2 :::a1 a0 )2
b = (b2n 1 b2n 2 :::b1 b0 )2
Moze se staviti
A1 = (a2n 1 a2n 2 :::an+1 an )2 ;
A0 = (an 1 an 2 :::a1 a0 )2
B1 = (b2n 1 b2n 2 :::bn+1 bn )2 ;
B0 = (bn 1 bn 2 :::b1 b0 )2
n
Tada se moze staviti a = 2 A1 + A0 i b = 2n B1 + B0 . Odavdje je
a b = (22n + 2n ) A1 B1 + 2n (A1 A0 ) (B0 B1 ) + (2n + 1) A0 B0
Ovo znaci da se za proizvod dva 2n-bitna broja moraju izracunati dvije razlike A1 A0
i B0 B1 dva n-bitna broja, tri proizvoda A1 B1 , (A1 A0 ) (B0 B1 ), A0 B0 a zatim
izvriti pomjeranje ulijevo i sabiranje.
Ako se sa M (n) oznaci broj bit operacija potrebnih za mnozenje dva n-bitna cijela broja
onda vrijedi
M (2n) 3 M (n) + C n
gdje je C konstanta. Naime, svako mnozenje dva n-bitna cijela broja zahtijeva M (n)
bitnih operacija a sabiranje, oduzimanje i pomjeranje ulijevo su operacije reda O (n).
Odavdje se dobija relacija
M 2k
D 3k 2k
gdje je D = max fM (2) ; Cg.
Teorem. Mnozenje dva n-bitna cijela broja moze biti izvedeno koritenjem O nlog2 3
bit operacija.
Dokaz. Za mnozenje dva n-bitna broja je potrebno M (n) bit operacija. Na osnovu
prethodnih relacija vrijedi:
M (n) = M 2log2 n
M 2[log2 n]+1
D 3[log2 n]+1 2[log2 n]+1 < D 3[log2 n]+1
3 D 3[log2 n]
3D 3[log2 n] = (3D) nlog2 3
Odavdje imamo da je M (n) = O nlog2 3 .
Primjer 2. Naci O (n!).
Rjeenje. Kako je n! = 1 2 ::: n = (::: ((2 3) 4) 5:::) n, za racunanje broja n! je
potrebno n 2 mnozenja. Najprije se mnozi 2 3 pa se dobijeni proizvod pomnozi sa 4,
novi rezultat sa 5 itd dok se ne doe do mnozenja sa n. U koraku (i 1) se i! mnozi sa
i + 1 pa je stoga broj mnozenja jednak n 2. Za odreivanje broja bit operacija treba
se podsjetiti cinjenice da je broj cifara proizvoda dva binarna broja jednak sumi cifara
faktora ili je za 1 manji od te sume. Neka broj n ima k bita. Svaki broj manji od n ima
najvie k bita. Stoga je n!, kao proizvod n brojeva sa najvie k bita, najvie nk bitni broj.
Broj bita broja n! je manji ili jednak sumi bita svakog faktora to je manje ili jednako
nk. Zbog toga je, za svaki prirodan broj i n, broj i! najvie n k-bitni. Za mnozenje i!
sa i potrebno je najvie (nk)k = nk 2 bit operacija. Kako ovakvih mnozenja ima (n 2)
to je za izracunavanje n! potrebno najvie
(n 2) (nk 2 ) = n (n 2) (1 + blog2 nc)2 = n (n 2) (lg n)2 = O (n lg n)2
bit operacija.
16
1 ALGORITMI
i=1
17
2 ALGORITMI SORTIRANJA
2 Algoritmi sortiranja
Algoritmi sortiranja su primjer matematickih algoritama koji se rjeavaju putem mnogih
drugih razlicitih metoda.
U optem slucaju, sortiranje se shvata kao proces pregrupisavanja datog skupa objekata u
nekom odreenom redoslijedu. Cilj sortiranja je olakati pretrazivanje elemenata u tako
sortiranom skupu. To je skoro univerzalni, fundamentalni zadatak. U svakodnevnom
zivotu se srecemo sa puno primjera kao to su telefonski imenici, rijecnici i slicno.
Izbor algoritama za rjeavanje bilo kog problema zavisi od strukture podataka, to je
skoro zakon, a u slucaju sortiranja takva zakonitost je toliko duboka da se odgovarajuce
metode dijele na dvije klase, sortiranje nizova i sortiranje fajlova. Nekada se nazivaju
unutranje i vanjsko sortiranje, s obzirom da se nizovi pohranjuju u brzo internoj memoriji
dok su fajlovi pohranjeni na spoljnim, sporijim ureajima (diskovi,...). Ovo je moguce
ilustrovati na primjeru sortiranja igracih karata. Ako se karte posmatraju u obliku niza
onda su poslozene na stolu i onaj ko ih sortira vidi ih sve pojedinacno i ima neposredan
pristup svakoj od njih. Ako karte obrazuju fajl to podrazumijeva da je vidljiva samo ona
na vrhu svake gomile. Ovakvo ogranicenje ima ozbiljan uticaj na metod sortiranja.
Ako su dati elementi a1 ; a2 ; :::; an ; ::: tada je sortiranje permutacija tih elemenata u niz
ak1 ; ak2 ; :::; akn ; ::: u kojem, po osnovu neke funkcije poretka f vrijedi f (ak1 ) f (ak2 )
:::
f (akn )
:::. Funkcija poretka se obicno ne racuna po nekom pravilu vec se cuva
kao sastavni dio (polje) svakog elementa. Znacenje te funkcije se naziva kljuc (key).
Metod sortiranja je lokalan (in-place) ako ne koristi dodatne memorijske resurse za sortiranje i stoga je moguce sortirati veoma velike liste bez potrebe alokacije (dodjeljivanja)
dodatnog memorijskog prostora.
Metod sortiranja je stabilan ako se u procesu sortiranja odgovarajuci odnos elemenata sa
jednakim kljucevima ne mijenja. Ovo je cesto pozeljna osobina ako se radi o elementima
koji su vec sortirani nekim metodom koji nema uticaja na kljuc.
18
2 ALGORITMI SORTIRANJA
Postupci tih metoda se lako pamte i kratki su. Ne treba zaboraviti da i programi
zauzimaju memoriju
Usloznjavanje metoda trebaju manji broj operacija koje su same po sebi dosta
slozene pa su za male n direktne metode brze mada ih ne treba koristiti za velike n
Metode sortiranja na tekucoj poziciji se dijele na :
Sortiranja putem ukljucivanja (insertion)
Sortiranja putem podjele (selection)
Sortiranja putem zamjene (exchange)
2.1.1 Sortiranje putem ukljucivanja (Insertion sort)
U ovom algoritmu se elementi dijele na vec gotov, sortirani, niz a1 ; :::; ai 1 i niz preostalih
polaznih, nesortiranih, elemenata. Na svakom koraku, pocev od i = 2 koje se uvecava za
1, iz niza preostalih nesortiranih elemenata se uzima jedan element i smjeta (insertuje)
u vec sortirani dio niza na nacin da se stavlja na mjesto koje mu pripada.
i=2
i=3
i=4
i=5
i=6
i=7
i=8
44
44
12
12
12
12
06
06
55
55
44
42
42
18
12
12
12
12
55
44
44
42
18
18
42
42
42
55
55
44
42
42
94
94
94
94
94
55
44
44
18
18
18
18
18
94
55
55
06
06
06
06
06
06
94
67
67
67
67
67
67
67
67
94
U tabeli 2.1. je ilustrovan primjer procesa sortiranja osam slucajno odabranih brojeva.
Proces trazenja se moze zavriti u jednom od dva slucaja :
Naen je element aj sa kljucem koji je manji od kljuca za x
Dostignut je lijevi kraj sortiranog dijela niza
Ovakav tipican slucaj ponavljajuceg procesa sa dva uslova zavretka dozvoljava koritenje
granicnika (sentinel). U ovom slucaju to moze biti element a0 (to znaci da je dovoljno
dijapazon indeksa proiriti indeksom 0).
Analiza algoritma se pravi prema idealiziranom racunaru, koji ima set instrukcija koje
se nalaze u svakom racunaru kao to je prenos bajta iz memorije u registar, aritmeticke
operacije na registrima, transfer iz registra u memoriju, preenje registara, uslovni skok
i slicno [7]. Takve instrukcije cemo zvati primitivne operacije. Nabrajanje skupa ovih
instrukcija nema smisla u kontekstu analize algoritama pa se prihvata intuitivno shvatanje
ovih operacija. Skup ovih instrukcija ne sadrzi "slozene" operacije kao to je sortiranje.
Broj ovih instrukcija u svakom redu pseudokoda je oznacen sa ci u dijagramu.
19
2 ALGORITMI SORTIRANJA
Procedura InsertionSortDirektni
Ulaz : n; fan g
Izlaz : Sortirani niz fan g
Inicirati i; j; x
2
j
DokVrijedi j < Duzina [a] raditi
{
x
a [j]
IUmetnuti a [j] u sortirani niz a [1; ::; j
i
j 1
DokVrijedi i > 0 & a [i] > x raditi
{
a [i + 1]
a [i]
i
i 1
}
a [i + 1]
x
j
j+1
}
1]
1) + c5
n
X
j=2
tj + (c6 + c7 )
n
X
(tj
1)
j=2
Prema ovoj metodi analize, gornja granica se dobija ako se ima u vidu da i pocinje sa
j 1 i opada sa svakom iteracijom sve dok je i > 0. Na taj nacin je tj
j, to se
moze postici ako je niz ureen opadajucim redoslijedom. Na taj nacin se dobija da ovaj
algoritam ima kvadratnu zavisnost od velicine niza odnosno njegova brzina se izrazava sa
O (n2 ).
Analiza ove metode putem broja poreenja i premjetanja [6] pokazuje da je broj poreenja
kljuceva (Ci ) u i-tom koraku moze biti najvie i 1, najmanje 1 a u prosjeku i=2, pod
pretpostavkom da su sve permutacije od n elemenata jednako vjerovatne. Broj premjetanja Mi je jednak Ci + 2 (ukljucujuci barijeru, sentinel). Na tabeli 2.2. su procjene
brzine ovog algoritma.
Minimalne ocjene se mogu desiti kod vec sortiranih nizova a najgore kada je niz sortiran
opadajucim redoslijedom.
0
1
2
3
4
5
2 ALGORITMI SORTIRANJA
Korak
2
j
DokVrijedi j < Duzina [a] raditi
x
a [j]
IUmetnuti a [j] u sortirani niz a [1; ::; j
i
j 1
Troak
c0
c1
c2
1] 0
c4
c5
Dinamika
1
n
n 1
n 1
n 1
n
X
tj
j=2
a [i + 1]
a [i]
c6
n
X
(tj
1)
(tj
1)
j=2
c7
a [i + 1]
x
j
j+1
c8
c9
n
X
j=2
8
9
n
n
1
1
Table 3: U ovoj tabeli kolona Trosak oznaava konstantan broj primitivnih operacija
min
prosjek
max
C
n 1
n2 + n 2
4
n2 + n 4
4
M
3 (n 1)
n2 + 9n 10
4
n2 + 3n 4
4
treba pretrazivati dok se ne nae tacka ukljucenja. Tako modicirani algoritam se zove
umetanje sa binarnim ukljucivanjem (binary insertion). Pristup je zasnovan na sljedecim
principima:
Bira se element sa najmanjim kljucem
On mijenja mjesto sa elementom a1
Proces se ponavlja sa preostalih n
1 elemenata, zatim n
2 elemenata, itd
55
55
12
12
12
12
12
12
12
12
55
18
18
18
18
18
42
42
42
42
42
42
42
42
94
94
94
94
94
44
44
44
18
18
18
55
55
55
55
55
06
44
44
44
44
94
94
67
67
67
67
67
67
67
37
94
21
2 ALGORITMI SORTIRANJA
Procedura BinaryInsertion
Ulaz : n; fan g
Izlaz : Sortirani niz fan g
Inicirati i; j; m; L; R; x
Za svaki i = 2; n; 1
{
//Uzeti element niza
x
a [i]
L
1; R
1
// Odrediti lijeve i desne granice
DokVrijedi L < R raditi
{
m = (L + R) =2
Ako je a [m] < x
{
L
m+1
}
Inace
{
R
m
}
}
//Pretraziti sortirani niz
Za svaki j = i; R + 1; 1
{
a [j]
a [j 1]
}
a [R]
x
}
Pseudo kod je dat na prilozenom algoritmu.
Broj zamjena je minimalno Mmin = 3 (n 1) u slucaju da su kljucevi odmah sortirani
a maksimalno Mmax = (n2 =4) + 3 (n 1) ako su pocetni kljucevi poredani opadajucim
redom. Za proracun prosjecnog vremena trajanja uzima se da je ocekivani broj premjetanja jednak sumi Hn = 1 + 1=n + 1=2 + ::: + 1=n. Pri tome su 1=i vjerovatnoce da je i-ti
element manji od prethodnih i 1 elemenata. Ova vrijednost se moze iskazati i sa
Hn = ln n + g + 1=2n
1=12n2 + :::
n
X
i=1
ln i
2 ALGORITMI SORTIRANJA
Procedura StraightSelection
Ulaz : niz fan g
Izlaz : Sortirani niz fan g
Inicirati : i; j; k; x
Za svaki i = 1; n; 1
{
k
i
x
a [i]
Za svaki j = i + 1; n; 1
{
Ako je a [j] < x tada
{
k
j
x
a [k]
}
}
a [k]
a [i]
a [i]
x
}
Zn
ln xdx = x (ln x
1)jn1 = n (ln n
1)
n+1
n2
n
2
1
06
44
55
12
42
94
18
67
2
06
12
44
55
18
42
94
67
2 ALGORITMI SORTIRANJA
3
06
12
18
44
55
42
67
94
4
06
12
18
42
44
55
67
94
5
06
12
18
42
44
55
67
94
6
06
12
18
42
44
55
67
94
7
06
12
18
42
44
55
67
94
Procedura BubbleSort
Ulaz : niz fan g
Izlaz : Sortirani niz fan g
Inicirati : i; j; x
Za svaki i = 2; n; 1
{
Za svaki j = n; i; 1
{
Ako je a [j 1] > a [j]
{
x
a [j 1]
a [j 1]
a [j]
a [j]
x
}
}
}
Treca mogucnost poboljanja je da se premjetanje vri naizmjenicno u oba pravca tako
da se u jednom smjeru premjetaju elementi na "lake" pozicije a u obratnom na "teze"
pozicije. Ilustracija ovog algoritma, pod nazivom ShakerSort je na tabeli 2.5.
Pseudokod za ShakerSort algoritam je dat na narednom algoritmu.
Analiza BubbleSort algoritma pokazuje da je u osnovnoj verziji broj poreenja jednak
C = (n2
n) =2
Mavg = 3 (n2
n) =2;
Mmax = 3 (n2
n) =4
2
8
"
44
55
12
42
94
18
06
67
3
8
#
06
44
55
12
42
94
18
67
2 ALGORITMI SORTIRANJA
3
7
"
06
44
12
42
55
18
67
94
4
7
#
06
12
44
18
42
55
67
94
4
4
"
06
12
18
42
44
55
67
94
BubbleSort po karakteristikama negdje izmeu sortiranja umetanjem i sortiranja zamjenom. Fakticki, BubbleSort ne donosi nita novo osim privlacnog naziva. ShakerSort
se uspjeno koristi u slucajevima kada je niz dosta sortiran, to se u praksi dosta rijetko
deava.
Moguce je pokazati da je prosjecno rastojanje za koje se pojedini element pomjera jednako n=3 "mjesta". Svi strogi nacini sortiranja fakticki element na pojedinom koraku
pomjeraju za jednu poziciju to je razlog da trebaju O (n2 ) takvih prolaza. U skladu sa
tim, poboljanja se mogu uvesti ako se usvoji princip da se vri razmjena elemenata na
vecem rastojanju.
U nastavku je pregled poboljanja svake od navedene stroge metode sortiranja.
2 ALGORITMI SORTIRANJA
Procedura ShakerSort
Ulaz : Niz fan g
Izlaz : Sortiran niz fan g
Inicirati j; k; L; R; x
L
2; R
n; k
n
Ponavljati
{
Za j = R; L; 1
{
Ako je a [j 1] > a [j] tada
{
x
a [j 1] ; in
a [j 1]
a [j]
a [j]
x
k
1
}
}
L
k+1
Za j = L; R; 1
{
Ako je a [j 1] > a [j] tada
{
x
a [j 1] ;
a [j 1]
a [j]
a [j]
x
k
1
}
}
R
k 1
}
SveDok vrijedi L > R
U nastavku je primjer ShellSort algoritma.
Polazni niz : 44
55
12
42
94
18
06
67
Sortiranje sa 4 mjesta : 44
18
06
42
94
55
12
Sortiranje sa 2 mjesta : 06
18
12
42
44
55
94
Sortiranje sa 1 mjestom : 05
12
18
42
44
55
67
67
67
94
26
2 ALGORITMI SORTIRANJA
Procedura ShellSort
Ulaz : Niz fan g
Izlaz : Sortiran niz fan g
Konstanta t = 4
Inicirati i; j; k; s; fht g
h [1] = 9; h [2] = 5; h [3] = 3; h [4] = 1
Za svako m = 1; t; 1
{
k
h [m]
s
k
//barijera
Za svako i = k + 1; n; 1
{
x
a [i]
j
i k
Ako je s = 0
{
s
k
}
s
s+1
a [s]
x
DokVrijedi x < a [j] raditi
{
a [j + k]
a [j]
j
j k
}
a [j + k]
x
}
}
2.2.2 Quick sort
Ovaj sort radi rekurzivno tako da se iz niza najprije selektira "pivot vrijednost". Zatim
se niz dijeli na elemente koji su manji i koji su veci od pivota. Zatim se rekurzivno sortira
svaki od dijelova. Za QuickSort se, generalno, smatra da je najbrzi od algoritama sortiranja (na modernim mainama). Jedno od objanjenja je da unutranja petlja poredi
elemente sa jednom vrijednosti pivota koja je pohranjena u registru za brz pristup. Drugi
algoritmi porede dva elementa niza. Ovo se naziva algoritmom lokalnog sortiranja jer ne
koristi drugi niz za pohranu. Nije stabilan. Postoji stabilna verzija QuickSort algoritma
ali ona nije lokalna. Ovaj algoritam je (n log n) u ocekivanom slucaju i (n2 ) u najgorem slucaju. Ako je implementiran prikladno, vjerovatnoca da ce algoritam trajati
asimptotski duze (pod pretpostavkom da je pivot odabran slucajno) je ekstremno mala
za veliko n.
27
2 ALGORITMI SORTIRANJA
Ovo je jedini stabilni algoritam sortiranja. Loa strana ovog tipa sorta je to je jedini
algoritam koji zahtijeva dodatni niz za pohranu (ako se ignorie stek za rekurziju) i stoga
nije lokalni jer objedinjava dva niza u treci. Iako je moguce da se nizovi objedine u
vremenu (n).
2.2.4 Heap sort
Heap sort se zasniva na lijepoj strukturi podataka koja se naziva heap (gomila, skup,
plast,...) koji je ekasna implementacija strukture podataka koja se zove red prioriteta
(priority queue). Ova struktura podrzava operacije umetanja kljuca i brisanja elementa
koji ima najmanju vrijednost kljuca.
Heap moze biti formiran za n kljuceva u (n) vremenu a najmanji element moze biti
izvucen u (log n) vremenu. Heap sort je algoritam u mjestu (lokalno) ali nije stabilan.
Heap sort radi na nacin da formira heap, u obratnom redoslijedu tako da maksimum
moze biti dobijen ekasno i zatim se ponavlja postupak uzimanja najveceg elementa.
Cinjenica
da se preuzima maksimalni a ne minimalni element je detalj implementacije ali
je to kljucni element rada algoritma u mjestu (lokalno).
Ako se zeli uzeti k najmanjih vrijednosti heap to moze omoguciti u (n + k log n) vremenu. Heap ima dodatnu prednost u koritenju u kontekstima gdje se mijenja kontekst
elemenata. Svaka izmjena prioriteta (vrijednosti kljuca) moze biti uraena u (log n)
vremenu.
28
3 POHLEPNI ALGORITMI
3 Pohlepni algoritmi
U mnogim algoritmima optimalizacije potrebno je praviti veliki broj selekcija. U dinamickom programiranju optimalno rjeenje se opisuje ne rekurzivan nacin a zatim se
kalkulacije obavljaju "odozdo na gore". Dinamicko programiranje je mocna tehnika ali
cesto vodi ka algoritmima koji se izvravaju duze nego to se zeli. Danas se koriste alternativne tehnike koje se zovu pohlepni (greedy) algoritmi. Ovaj metod tipicno vodi ka
jednostavnijim i brzima algoritmima ali jo uvijek nije dovoljno snazan i iroko koriten
kao to je to slucaj sa dinamickim programiranje. Kada pohlepni algoritam ne daje optimalno rjeenje cesto daju brze heuristike (neoptimalne strategije rjeavanja), to se dobro
koristi u nalazenju dobrih aproksimacija.
f2
:::
fn
29
3 POHLEPNI ALGORITMI
Varijabla prev drzi indeks posljednje aktivnosti u rasporedu u bilo koje vrijeme kako bi
se utvrdila preklapanja.
Jasno je da je algoritam prilicno jednostavan i ekasan. U smislu trajanja i/ili resursa
naglaena je aktivnost sortiranja po osnovu vremena zavretka tako da je ukupno vrijeme
trajanja (n log n).
Na slici je primjer. Svaka aktivnost je prezentirana intervalom pocetka i zavretka. Sortiranje je izvreno prema vremenu zavretka. Vidi se da je i raspored f2 ; f4 ; f7 optimalan
jednako kao f1 ; f4 ; f7 .
3 POHLEPNI ALGORITMI
cijeli brojevi. On zeli uzeti to je moguce vecu vrijednost ali ima ranac u koji staje roba
u vrijednosti najvie W . ta ce uzeti ? Razlog za naziv (0 1) je to lopov uzima (1)
ili ostavlja (0) predmet. Ovo je klasicni problem industrijskog pakovanja. Drugi primjer
ovog problema je problem u kojem se trazi odgovor da li je moguce na datih n nosilaca
medija, npr. disketa, jednakog kapaciteta x smjestiti m fajlova velicina y1 ; y2 ; :::; ym .
Problem ranca (knapsack problem) (0 1) je tezak za rjeavanje i to je, u sutini, NPproblem (to znaci da vjerovatno ne postoji ekasno rjeenje).
Sa druge strane, u frakcionom problemu ranca postavka je identicna ali lopov moze uzeti
dio tezine i dio vrijednosti. Postoji veoma jednostavan i ekasan pohlepni algoritam za
frakcioni problem ranca.
Kao i u slucaju drugih pohlepnih algoritama, ideja je da se nae pravi redoslijed u kojem se
stavke obrauju. Intuitivno, dobro je imati visoku vrijednost i loe je imati veliku tezinu.
Postoji nekoliko izbora koji se mogu probati ali radi samo jedan. Neka je i = vi =wi to
oznacava odnos vrijednosti i tezine. Stavke se sortiraju opadajucim redom velicine i i u
tom redoslijedu se dodaju. Ako stavka odgovara uzima se cijela. U nekom momentu ce
se pojaviti stavka koja ne popunjava preostali prostor. Uzimamo koliko je moguce od te
stavke kako bi se ranac popunio u cjelosti.
3.2.1 Korektnost
Intuitivno je jasno vidjeti da je pohlepni algoritam optimalan za frakcionalni problem.
Ako je dat ranac zlata, srebra i bronze ocigledno je da ce se najprije uzeti zlata to je
moguce vie, zatim srebra i na kraju bronze. Rezultat ne bi bio dobar ako bi se uzelo
manje zlata koje bi se zamijenilo sa jednakom kolicinom bronze.
Formalno, pretpostavimo da pohlepni algoritam nije optimalan. To bi znacilo da postoji
alternativni izbor koji je optimalan. U tom slucaju se stavke sortiraju opadajucim redom
u odnosu na vrijednost. Uzmimo prvu stavku i za koju se dva izbora razlikuju. Prema
31
3 POHLEPNI ALGORITMI
deniciji, pohlepni izbor daje veci obim stavke i nego alternativni (jer pohlepni izbor
uvijek uzima to vie moze). Recimo da pohlepni uzima x vie jedinica nego alternativni. Svi naredni elementi alternativne selekcije su manje vrijednosti od vi . Zamjenom
x jedinica bilo koje od tih stavki sa x jedinica stavke i povecala bi se ukupna vrijednost
alternativnog izbora. Meutim, ovo implicira da alternativna selekcija nije optimalna to
je kontradikcija.
Moguce je pokazati neoptimalnost 0 1 problema ranca. Za to moze posluziti navedeni
primjer. Ako se stavke sortiraju po i tada se najprije uzima stavka tezine 5 zatim 20
a zatim bi se uzela stavka tezine 30, jer se stavka tezine 40 ne moze prihvatiti, tako da
se dobije vrijednost 220$. Sa druge strane, da je postupak bio manje pohlepan i da je
ignorisana stavka tezine 5 tada bi se mogle uzeti stavke tezine 20 i 40 za ukupnu vrijednosti
260$. Ovo svojstvo "odlaganja boljeg rezultata" kako bi se dobilo bolje ukupno rjeenje
je indikacija da pohlepno rjeenje nije optimalno.
Minimalno razapinjuce stablo je ono koje ima minimalnu tezinu. Ovo stablo ne mora biti
jedinstveno. Ako sve ivice imaju razlicitu tezinu tada su minimalna razapinjuca stabla
razlicita (ovo jo nije dokazano vec cinjenica koja se koristi.
Slika prikazuje tri razapinjuca stabla za isti graf. U sredini i desno su su dva minimalna
razapinjuca stabla.
32
3 POHLEPNI ALGORITMI
Postoje dva pohlepna algoritma, Kruskalov i Primov, za nalazenje minimalnog razapinjuceg stabla. Podsjetimo se da je pohlepni algoritam onaj koji rjeenje nalazi ponavljanjem selekcije najjetinije (ili generalno lokalno optimalnog izbora) od raspolozivih opcija
na svakoj etapi. Vazna karakteristika pohlepnih algoritama je da prave izbor koji ne
opozivaju. Prije prezentacije potrebne su neke bitne cinjenice o slobodnim stablima.
Lema.
Slobodno stablo sa n cvorova ima tacno n
1 ivica
Postoji jedinstveni put izmeu bilo koja dva cvora slobodnog stabla
Dodavanje bilo koje ivice kreira jedinstveni ciklus. Prekidanje bilo koje ivice tog
ciklusa obnavlja slobodno stablo
Neka je G = (V; E) neusmjeren povezan graf cije ivice imaju numericke vrijednosti tezine
(pozitivne, negativne ili nula). Intuicija u pozadini pohlepnih MST algoritama je jednostavna : odrzava se podskup ivica A koji je inicijalno prazan i dodaje se jedna po jedna
ivica sve dok A ne postane MST. Kaze se da je S E most (prelaz) ako je podskup ivica
nekog MST (ne moze se reci MST jer nije neophodno i jedinstven). Kaze se da je ivica
(u; v) 2 EnA sigurna ako je A [ (fu; vg) prelaz. Drugim rijecima, izbor (u; v) je siguran
izbor tako da A jo uvijek moze formirati MST. Ako je A prelaz ne moze sadrzavati
ciklus. Izvorni (genericki pohlepni algoritam radi tako da dodaje sigurne ivice na tekuce
razapinjuce stablo. Potrebno je voditi racuna da je prelaznost svojstvo podskupa ivica a
sigurnost svojstvo pojedine ivice.
Neka je S podskup cvorova S
V . Podjela (cut) (S; V nS) je particija cvorova u dva
disjunktna podskupa. Ivica (u; v) prelazi podjelu ako je jedna njena krajnja tacka u S a
druga u V nS. Za dati podskup ivica A se kaze da podjela potuje A ako ne postoje ivice
u A koje prelaze podjelu. Nije teko vidjeti zato je potovanje podjele vazno za ovaj
problem. Ako je formiran djelimicni MST i ako se zeli znati koje ivice koje mogu biti
dodate i koje ne formiraju ciklus u tekucem MST, bilo koja ivica koja prelazi potujucu
podjelu je moguci kandidat.
Ivica u E je lagana ivica koja prelazi podjelu ako ima minimalnu duzinu od svih ivica
koje prelaze podjelu. Lagana ivica moze ne biti jedinstvena. Prema intuiciji, s obzirom
da sve ivice koje prelaze potujucu podjelu ne formiraju ciklus tada je lagana ivica koja
prelazi podjelu prirodan izbor.
MST Lema. Neka je G = (V; E) povezan neusmjereni graf sa ivicama realnih vrijednosti.
Neka je A prelazni podskup od E (odnosno podskup nekog MST) i neka je (S; V nS) bilo
koja podjela koja potuje A i neka je (u; v) lagana ivica koja prelazi podjelu. Tada je
(u; v) sigurna za A.
33
3 POHLEPNI ALGORITMI
34
3 POHLEPNI ALGORITMI
Analiza. Koliko dugo traje Kruskalov algoritam ? Kao i obicno, neka je V broj cvorova
i E broj ivica. S obzirom da je graf povezan moze se uzeti da je E V 1. Za sortiranje
ivica potrebno je (E log E). Petlja se ponavlja E puta a svaka iteracija ukljucuje
konstantan broj pristupa Union-Find strukturi na skupu od V stavki. Stoga, za svaki
pristup treba (V ) vremena a skupa (E log V ). Stoga je ukupno vrijeme izvrenja
jednako njihovoj sumu koja je ((V + E) log V ). S obzirom da V u asimptotskom smislu
nije vece od E slijedi da je vrijeme izvrenja (E log V ).
3.3.2 Primov algoritam
Primov algoritam je drugi pohlepni algoritam za minimalno razapinjuce stablo. Od
Kruskalovog algoritma se razlikuje samo u nacinu odabira naredne sigurne ivice koja
se dodaje na svakom koraku. Vrijeme izvrenja je potpuno jednako kao za Kruskalov
algoritam. Ovaj algoritam pokazuje da postoji vie od jednog nacina da se rijei ovaj
problem. Osim toga, veoma je slican drugom pohlepnom algoritmu, Dijkstra algoritmu,
kojim se rjeava potpuno druga vrsta problema : najkraci put u mrezi.
Kruskalov algoritam radi tako da sortira ivice i umece ih jednu po jednu u razapinjuce
stablo vodeci racuna da se nikada ne formira ciklus. Intuitivno gledano, Kruskalov algoritam radi tako da spaja dva stabla ili ih razdvaja sve dok se sve ivice ne nau u istom
stablu.
Za razliku od njega, Prim-ova algoritam gradi stablo dodavanjem po jednog lista na tekuce
stablo. Startuje se sa korijenskim cvorom r koji moze biti bilo koji. U bilo koje vrijeme
podskup ivica A formira jedno stablo (u Kruskalovom algoritmu se formira uma). Trazi
se dodavanje cvora kao lista na stablo. Proces je ilustrovan na narednoj slici.
Prim-ov algoritam
Ako se posmatra skup cvorova S koji je dio stabla i njegov komplement tada postoji
podjela grafa i tekuci skup ivica A potuje tu podjelu. MST lema kaze da je sigurno
dodavanje lagane ivice. Na slici to je ivica tezine 4 koja ide u cvor u. Stoga se u dodaje
u cvorove skupa S i dijeli izmjene. Treba primijetiti da neke ivice koje vie ne sijedu
podjelu koju su presijecale podjelu prije ovog koraka nestaju a javljaju se nove koje nisu
presijecale tu podjelu.
35
3 POHLEPNI ALGORITMI
(E log V ).
36
3 POHLEPNI ALGORITMI
Problem najkraceg puta iz jednog cvora (single source shortest path) se denie na sljedeci
nacin. Dat je usmjeren graf sa nenegativnim tezinama ivica G = (V ; E) i izdvojenim
pocetnim cvorom s 2 V . Problem je odrediti distancu pocetnog cvora do svakog cvora u
grafu.
Moguce je imati grafove sa negativnim tezinama ivica ali kako bi najkraci putevi bili
dobro denisani potrebno je dodati zahtjev da uopte nema ciklusa cija je ukupna tezina
negativna (inace bi se mogao napraviti beskonacno kratak put kretanjem zauvijek u tom
ciklusu). Ovdje se naglaava posao racunanja minimalne distance od pocetnog cvora do
svakog cvora. Racunanje stvarne duzine je dosta lagano proirenje problema. Za svaki
cvor se formira pointer pred (v) koji ukazuje na pocetak. Slijedeci pointere prethodnika
unazad od bilo kojeg cvora konstruie se reverzna slika najkraceg puta do v.
Osnovna struktura Dijkstra algoritma je odrzavanje procjena najkraceg puta za svaki
cvor, u oznaci d [v]. Intuitivno gledano, d [v] ce biti duzina najkraceg puta od s do v koji
je poznat algoritmu. Ova vrijednosti je uvijek veca ili jednaka sa stvarno najkracim putem
od s do v. Inicijalno, putevi su nepoznati tako da je d [v] = 1. Inicijalno je d [s] = 0 a
svi ostali d [v] su postavljeni na 1. Kako algoritam napreduje i kako se ukljucuje vie
cvorova azurira se d [v] za svaki cvor u grafu sve ove vrijednosti ne konvergiraju ka stvarno
najkracoj distanci.
Proces kojim se vri azuriranje procjene se zove relaksacija. Intuitivno gledano, ako nije
postignuta optimalna vrijednost ona je bliza ka optimumu. Posebno, ako se otkrije put
od s do v koji je kraci od d [v] tada se vri azuriranje te vrijednosti. Ovaj metod je
zajednicki za veliki broj algoritama optimalizacije.
Posmatra se ivica od cvora u do cvora v cija je tezina w (u; v). Pretpostavka je da postoje
procjene za d [u] i d [v]. Poznato je da postoji put od s do u sa tezinom d [u]. Ako se uzme
ta putanja i ako se slijedi ivica (u; v) dobija se putanja do v duzine d [u] + w (u; v). Ako
je ta putanja bolja od postojeceg puta do v duzine d [v] tada se d [v] azurira na vrijednost
d [u] + w (u; v). Potrebno je zapamtiti da najkraci put do v prolazi kroz u to se cini tako
da se azurira pointer prethodnika za v.
Primjer relaksacije
Treba primijetiti da kad god se d [v] postavi na konacnu vrijednost uvijek postoji trag
o putanji te duzine. Stoga je d [v]
(s; v). Ako je d [v] = (s; v) tada naknadne
relaksacije ne mogu promijeniti tu vrijednost.
Nije teko vidjeti da ako se relaksacija provede nad svim ivicama grafa vrijednosti d [v]
obavezno konvergiraju konacnoj stvarnoj vrijednosti iz s. Cilj svakog dobrog algoritma
nalazenja najkraceg puta je da se azuriranja obavljaju na pametan nacin kako bi konvergencija bila to je moguce brza. Posebno, najbolji nacin bi bio da se operacije relaksacije
37
3 POHLEPNI ALGORITMI
poredaju na nacin da se relaksacija za svaku ivicu provede tacno jednom. Tacno ovo radi
Dijkstra algoritam.
Dijkstra algoritam je zasnovan na izvravanju ponovljenih relaksacija. On radi tako da
odrzava podskup cvorova, S
V , za koji se proglaava da "znamo" stvarnu distancu,
d [v] = (s; v). Inicijalno je S = , prazan skup i stavlja se d [s] = 0 a za sve ostale +1.
Jedan po jedan cvor iz V nS se dodaje u S.
Skup S moze biti implementiran koritenjem niza boja koje su dodijeljene cvorovima.
Inicijalno su svi cvorovi bijeli a boja [s] = crna kako bi se naznacilo da v 2 S.
Dijkstra je prepoznao da je najbolji nacin relaksacije povecanje poretka distance od izvora.
Na taj nacin, kad god se provodi relaksacija moguce je zakljuciti da rezultat relaksacije
daje konacnu vrijednost distance. Za implementaciju ovog koncepta za svaki cvor u 2
V nS se odrzava procjena distance d [u]. Pohlepni dio algoritma se odnosi na to da se
uzima cvor iz V nS za koji je d [v] minimalno tj. uzima se neobraeni cvor koji je (prema
procjeni) najblizi ka s.
Kako bi se ova selekcija izvrila ekasno, cvorovi iz V nS se stavlja u red prioriteta (tj.
heap - gomila) gdje je kljucna vrijednost svakog cvora u jednaka d [u]. Primjetna je
slicnost sa Primovim algoritmom iako se koriste razlicite vrijednosti. Za svaki cvor je
poznata lokacija u redu prioriteta i svaka stavka u redu prioriteta "poznaje" koji cvor
prezentira.
38
(E log V ).
4 SLUCAJNI
BROJEVI
4 Slucajni brojevi
4.1 Uvod
Generator slucajnih brojeva je racunarski program ili zicki ureaj dizajniran da generie
sekvence brojeva ili simbola koji ne prate nikakav obrazac ponaanja odnosno prikazuju
se kao slucajno odabrani. Za generisanje stvarno slucajnih brojeva koriste se hardverski
ureaji, u dananje vrijeme razni dodaci na personalni racunar. Slucajni brojevi su
rezultat zickih procesa unutar ureaja. Racunarski algoritmi, ma koliko dobri, ne mogu
generisati potpuno slucajne brojeve vec brojeve koji u vecoj ili manjoj mjeri simuliraju
slucajnost izbora pa se zovu pseudoslucajni brojevi.
Mnoge primjene slucajnosti su dovele do razvoja nekoliko razlicitih metoda generisanja
slucajnih podataka. Mnoge od njih postoje od antickih vremena ukljucujuci kockicu,
bacanje novcica, mijeanje karata i mnoge druge tehnike. Zbog mehanicke prirode ovih
tehnika generisanje velikog broja dovoljno slucajnih brojeva, to je vazno za statistiku,
iziskuje puno napora i/ili vremena. Stoga se rezultati nekada prikupljaju i distribuiraju
u obliku tablica slucajnih brojeva. Nakon renesanse kompjuterski podrzanih generatora
slucajnih brojeva sve je veci broj zvanicnih lutrija i igara na srecu koje koriste generatore
umjesto tradicionalnih metoda izvlacenja. Ovi generatori se danas koriste kako bi se
ustanovili eventualni nedostaci modernih slot maina.
Jednu od poznatijih denicija slucajnih brojeva dao je prof. D. H. Lehmer (1951), pionir
racunarske tehnologije i racunarske teorije brojeva :
Slucajni brojevi su nejasna notacija u kojoj je svaki clan nepredvidiv u odnosu na
inicijalne velicine i cije cifre prolaze odreen broj testova koji se tradicionalno koriste od
strane statisticara.
Jedan od interesantnijih brojeva je 0.95012928514718. Ovo je prvi broj koji se producira
od strane generatora slucajnih brojeva koji je ugraen u Matlab. Svi korisnici Matlaba
na bilo kom racunaru dobijaju ovaj broj kao slucajni. Ocigledno je da ovo nije slucajni
broj u smislu u kojem se to moze ocekivati prema intuitivnom shvatanju ovog pojma.
Ako racunar nema pristupa nekom eksternom ureaju kao to je brojac gama zraka ili
sat onda brojevi koje producira ne mogu biti stvarni slucajni brojevi.
4 SLUCAJNI
BROJEVI
9 xk
zi+5
4 SLUCAJNI
BROJEVI
Marsaglia je pokazao da niz ima period skoro 21430 vrijednosti prije ponavljanja. Meutim,
algoritam ima nedostatak. Svi brojevi su rezultati sabiranja i oduzimanja brojeva u
inicijalnom keu tako da su svi oni multiplikandi od 2 53 . U skladu sa tim, mnogi brojevi
iz intervala [0; 1] se ne dobijaju kao rezultat ovog algoritma.
Brojevi u pokretnom zarezu izmeu 1=2 i 1 su jednako rasporeeni sa razlikom od jedan
ulp i generator oduzimanja-sa-pozajmljivanjem ce generisati skoro sve od njih. Brojevi
manji od 1=2 su manje blisko razdvojeni i generator ce propustiti vecinu tih brojeva. On
generie samo polovinu mogucih brojeva iz intervala [1=4; 1=2], samo cetvrtinu brojeva iz
intervala [1=8; 1=4] itd. To je mjesto na kojem se pokazuje uticaj velicine j.
x2 =2
p
gdje je c = 1= 2 normalizacijska konstanta koja se u ovom slucaju moze ignorisati.
Ako se generiu slucajne tacke (x; y) uniformno distribuirane u ravni i ako se odbaci
bilo koja od njih koja nije ispod krive preostale vrijednosti x formiraju zeljenu normalnu
distribuciju. Ziggurat algoritam obuhvata prostor ispod funkcije gustine sa neto vecom
povrinom sa n sekcija.
41
4 SLUCAJNI
BROJEVI
4 SLUCAJNI
BROJEVI
Jednostavna rucna metoda generisanja slucajnih brojeva je tzv. metoda sredine kvadrata,
koja je sugerisana od strane Von Neumana. Mada jednostavna za implementaciju rezultat
je veoma lo kvalitet.
Ilustracija metoda ce biti napravljena tako da se odabere cetvorocifren broj npr. n =
6729. Taj broj se kvadrira pa se dobije 62792 = 39425841; iz njega se izdvoje srednje
cetiri cifre n = 4258 i to je naredni clan niza itd. U matematickom smislu, generisanje se
odvija po rekurentnom izrazu [x2k =100] xk+1 (mod 10000)
Na slici je tzv. slide rule (kolo srece). Unutranja skala ilustruje distribuciju mantisa dok
spoljna skala ilustruje distribuciju njima pripadajucih brojeva.
43
4 SLUCAJNI
BROJEVI
Bitno svojstvo koje se koristi za testiranje slucajnosti je tzv. mjerna invarijantnost. Ona
se ocituje u tome da se dinamika vodecih cifara zadrzava ako se svaki clan uzorka pomnozi
istim brojem.
Ako se cijeli uzorak 232 puta pomnozi sa 1:01 tada to odgovara mnozenju sa 10 odnosno
pomjeranju zareza za jedno mjesto udesno (1:01232
10). Isti efekat vrijedi ako se
obavlja dijeljenje. U svakom od mnozenja se biljezi dinamika odabrane vodece cifre. Na
slici je ilustracija ovog postupka na uzorku regularnih podataka, koji su uzeti iz procesa
koji se odvija bez spoljnih uticaja (npr. nansijske transakcije, mjerenja i slicno), i
uzorku slucajnih brojeva. Ako su brojevi slucajni tada se dobija valovita kriva (desno);
za podatke iz regularnih procesa dobija se kriva bez valova (lijevo). Najvaznija osobina
ovog nacina testiranja je to za njegovo provoenje nije potrebno poznavati distribuciju
podataka.
44
5 NP KOMPLEKSNOST
5 NP kompleksnost
Tokom 60-ih godina napravljeni su veliki pomaci u nalazenju ekasnih rjeenja za mnoge
kombinatorne probleme ali je nastala rastuca lista problema za koje se cinilo da ne postoji
ekasno algoritamsko rjeenje. Ljudi su poceli traziti neku nepoznatu paradigmu koja bi
vodila ka rjeenju tih problema ili dokaz da su mozda ti problemi sami po sebi teki za
rjeavanje i da ne postoje algoritamska rjeenja koja rade ispod eksponencijalnog vremena.
Krajem 60-ih napravljeno je veliko otkrice. Mnogi od ovih problema su meusobno
povezani u smislu da ako je bilo koji od njih bilo moguce rijeiti u polinomijalnom vremenu
tada bi se mogao rijeiti svaki od njih. Otkrice je skrenulo paznju na N P -kompletnost
i kreiran je mozda najveci problem u kompjuterskoj nauci : P = N P ? Cilj vie nije
dokazati da problem moze biti ekasno rijeen prezentiranjem algoritma. Umjesto toga
pokuava se pokazati da problem ne moze biti rijeen ekasno. Kako to uciniti ?
Potreban je neki nacin da se klasa ekasno rjeivih problema odvoji od problema koji
ne mogu biti ekasno rijeeni. To se moze uciniti analizom problema koji mogu biti
rijeeni u polinomijalnom vremenu. Zadatak da se dokaze da neto ne moze biti ucinjeno
ekasno mora se analizirati mnogo pazljivije kako se ne ostavila mogucnost bilo kome
da pravila kri na neprihvatljiv nacin i istovremeno tvrdi da postoji ekasno rjeenje ako
takvo rjeenje stvarno ne postoji.
Jedan od pristupa je mjerenje vremena izvrenja algoritama koritenjem scenarija kompleksnosti najgoreg slucaja kao funkcije od n, velicine ulaza. Postoji vie nacina ali im
je zajednicki imenitelj broj bitova (ili bajtova) za prezentaciju ulaza korienjem razumno
ekasnog kodiranja. Naprimjer, brojevi se mogu pisati unarnom notacijom 111111111 =
1002 = 8 umjesto binarnom; grafovi se mogu opisivati na neki neekasan nacin kao to je
lista svih njegovih ciklusa ali je to neprihvatljivo. Pretpostavka je da se brojevi prikazuju
u bazi veceg reda, da su grafovi opisani matricama ili listom itd.
Uobicajeno je da se brojevi ogranice na cijele (kao suprotnost "realnim" brojevima) pa
je jasno da se aritmeticke operacije mogu provoditi ekasno. Pretpostavka je da se operacije sa cijelim brojevima provode u konstantnom vremenu. Radi veceg opreza, moze
se pretpostaviti da aritmeticke operacije zahtijevaju barem onoliko vremena kolika je
preciznost brojeva koji su predmet pohrane.
Denicija. Za algoritam koji zavisi od prirodnih brojeva n1 ; n2 ; :::; nr od k1 ; k2 ; :::; kr
bita respektivno kaze se da radi u polinomijalnom vremenu ako postoje prirodni brojevi
d1 ; d2 ; :::; dr takvi da je broj potrebnih bit operacija za njegovo izvrenje O k1d1 ; :::; krdr .
Za problem se kaze da je rjeiv u polinomijalnom vremenu ako postoji algoritam koji ga
rjeava u polinomijalnom vremenu.
Neke funkcije koje ne "izgledaju" kao polinomijalne (kao to je O (n log n)) su ogranicne
odozgo polinomima (kao to je O (n2 )). Neke funkcije koje "izgledaju" kao polinomijalne
ustvari to nisu. Naprimjer, neka je predmet analize algoritam koji ima ulaz graf velicine
n i cijeli broj k koji radi u vremenu O nk . On nije polinomijalni jer je k ulazna velicina
takva da je korisniku omoguceno da odabere k = n to povlaci da je vrijeme izvrenja
O (nn ) a to nije polinom po n. Vazno je napomenuti da eksponent mora biti konstanta
nezavisna od n.
45
5 NP KOMPLEKSNOST
46
5 NP KOMPLEKSNOST
47
5 NP KOMPLEKSNOST
To je skup svih problema odlucivanja koji mogu biti vericirani u polinomijalnom vremenu. Ova klasa sadrzi P kao podskup. Stoga, ona sadrzi veliki broj jednostavnih
problema ali sadrzi i veliki broj problema za koje se vjeruje da ih je teko rijeiti. Oznaka
ne znaci "NePolinomijalni". Izvorno je ovo oznaka za "Nedeterministicko Polinomijalno
vrijeme". Ovaj koncept je mnogo lake objasniti i shvatiti iz perspektive verikacije.
Denicija. Klasa slozenosti N P tezak (NP-hard) se sastoji od problema za koje vrijedi
da ako se jedan od njih moze rijeiti u polinomijalnom vremenu tada bi svi NP problemi
bili rjeivi u polinomijalnom vremenu.
Unatoc nazivu, NP-teko ne znaci da je problem teko rijeiti. Ako je problem NP-tezak
to ne mora znaciti da je u NP klasi. S obzirom da se vjeruje da nisu svi NP problemi
rjeivi u polinomijalnom vremenu vjeruje se da nijedan NP-tezak problem nije rjeiv u
polinomijalnom vremenu.
Denicija. Problem je N P
To znaci da je N P C = N P \ N P
tezak.
48
5 NP KOMPLEKSNOST
Slika ilustruje jedan od mogucih nacina interpretacije kako bi mogao izgledati odnos
skupova P, NP, NP-tezak, NP-kompletan. Naglaeno je "moguci odnos" jer jo nije
poznato da li su ove klase kompleksnosti disjunktne ili su sve rjeive u polinomijalnom
vremenu. Neki od problema na slici iziskuju dublju diskusiju. Jedna od njih se odnosi na
Izomorzam grafova u kojem se postavlja pitanje da li su dva grafa identicna do nivoa
imena njihovih ivica. Poznato je da je problem NP ali nije poznato da li je u P. Drugi je
QBF to je skracenica za Quantied Boolean Formulas. U tom problemu su date bulovske
formule sa kvantikatorima 8 i 9 i potrebno je dati odgovor na pitanje da li je formula
tacna ili ne.
Na slici je primjer ciklusa koji je Hamiltonov i jednog koji to nije. Ako se poe od
pretpostavke da je graf imao Hamiltonov ciklus tada bi trebao biti jednostavan zadatak
da se to potvrdi. Ako se uzme ciklus npr. hv3 ; v7 ; :::; v13 i tada bi se graf mogao ispitati
i provjeriti da li je to stvarno legalan ciklus koji obilazi sve cvorove grafa tacno jednom.
Stoga, iako nije poznat ekasan nacin da se rijei problem Hamiltonovog ciklusa postoji
veoma ekasan nacin verikacije (provjere) da li je dati graf u HC. Dati ciklus je certikat.
To je dio informacije koji omogucava da se verikuje da je dati string jezik.
Formalno, za dati jezik L i za x 2 L algoritam verikacije je algoritam koji za dato x i
dato y, koje se naziva certikat, moze vericirati da je x u jeziku L koristeci taj certikat
kao pomoc. Ako x nije u L tada nema nicega za verikaciju.
49
5 NP KOMPLEKSNOST
Treba uociti da nemaju svi jezici svojstvo da ih je lako vericirati. Naprimjer, neka su
dati sljedeci jezici :
U HC = f(G) : G ima jedinstveni Hamiltonov ciklusg
HC = f(G) : G nema Hamiltonov ciklusg
Neka je graf G u jeziku U HC. Koja bi informacija trebala biti data koja bi omogucila
da se verikuje da je G stvarno jezik ? Moze se dati primjer jedinstvenog Hamiltonovog
ciklusa i to bi se moglo vericirati ali koja vrsta certikata je potrebna kako bi se utvrdilo
da je to jedini graf ? Moze se uzeti drugi ciklus koji nije Hamiltonov ali to ne znaci da
nema drugog ciklusa koji jeste Hamiltonov. Moze se pokuati sa svim ciklusima tezine n
ali bi to uopte ne bi bilo ekasno jer postoji ukupno n! ciklusa. Stoga je teko zamisliti
da se moze dati informacija koja bi omogucila da se ekasno uvjerimo da je dati graf u
jeziku.
5.3.1 NP klasa
Kako je receno, NP se denie kao skup svih jezika koji mogu biti vericirani algoritmom u polinomijalnom vremenu. Zato je dat naziv NP umjesto VP ? Originalan naziv
je skracenica od "Nedeterministicko Polinomijalno vrijeme". Ovo se odnosi na program
koji se izvrava na nedeterministickom racunaru koji se moze zamisliti. U osnovi, takav
kompjuter bi mogao nedeterministicki pogoditi vrijednost certikata i zatim vericirati
u polinomijalnom vremenu da je string u jeziku. Ovdje je izbjegnuta denicija nedeterminizma.
NP je, kao i u slucaju P, skup jezika zasnovan na nekoj mjeri kompleksnosti (kompleksnost verikacije). Potrebno je uociti da je P
N P . Drugim rijecima, ako se problem
moze rijeiti u polinomijalnom vremenu tada se clanstvo sigurno moze vericirati u polinomijalnom vremenu.
Nije poznato da li je P = N P . Ne cini se razumnim da ovo vrijedi. Drugim rijecima, biti
u mogucnosti da se verikuje da se ima ispravno rjeenje ne pomaze mnogo u nalazenju
stvarnog rjeenja. Mnogi eksperti vjeruju da je P 6= N P ali to niko nije dokazao.
50
5 NP KOMPLEKSNOST
5 NP KOMPLEKSNOST
Na slici su dva grafa od kojih je jedan moguce obojiti na trazeni nacin a drugi ne.
Problem bojenja sa tri boje ima ulogu H problema za koji se sumnja da je moguce
rijeiti u polinomijalnom vremenu.
Neka je U sljedeci problem. Za dati graf G = (V ; E) se kaze da podskup cvorova V 0 V
formira clique ako za svaki par cvorova u; v 2 V 0 (u; v) vrijedi da je u; v 2 E. To znaci
da je podgraf induciran sa V 0 kompletan graf.
5.4.2 Clique pokrivac (cover) (CCov)
Za dati graf G = (V ; E)[i cijeli broj k skup cvorova se moze podijeliti u podskupove
V1 ; V2 ; :::; Vk takve da je
Vi = V i da je svaki Vi clique od G.
i
Problem Clique pokrivaca se javlja u aplikacijama klasteringa2 . Ivica izmeu dva cvora
se znati da li
se stavlja ako su oni dovoljno slicni da budu klasterisani u istu grupu. Zeli
je moguce klasterisati sve cvorova u k grupa.
Pretpostavimo da se zeli rijeiti CCov problem ali nakon uzaludnih i besplodnih napora ne
moze se naci algoritam polinomijalnog vremena. Kako se moze dokazati da nije izvjesno
da CCov nema rjeenje u polinomijalnom vremenu ? Poznato je da je 3Col NP kompletan
problem pa strucnjaci vjeruju da 3Col 2
= P . Osjeca se da postoji neka veza izmeu ova
Klastering je grupisanje po nekoj osobini slicnosti. Pritom se "slicnost" denie u kontekstu problema
(Euklidska duzina, prosjek, ...)
52
5 NP KOMPLEKSNOST
Da bi se ovo dokazalo potrebno je pretpostaviti da postoji pristup podrutini CCov (G; k).
Za dati graf i cijeli broj k ova podrutina vraca odgovor "istina" ako G ima clique velicine
k i "neistina" u suprotnom, uz cinjenicu da ta rutina radi u polinomijalnom vremenu.
Kako se sada ovakva rutina koristi za rjeenje dobro poznatog tekog 3Col problema ?
Treba se napisati rutina koja radi u polinomijalnom vremenu za 3Col i koja moze zvati
rutinu CCov (G; k) za bilo koji graf i bilo koji cijeli k.
Oba problema ukljucuju particioniranje cvorova u grupe. Jedina razlika je to je u jednom
problemu broj klikova dat kao dio ulaza a u drugom je broj klasa ksiran na 3. Da bi dva
cvora u problemu clique bila u istoj grupi moraju biti susjedni. U problemu bojenja dva
cvora ne moraju biti susjedni da bi bili u istoj grupi. Na neki nacin su problemi gotovo
jednaki ali zahtjev da budu susjedni je obratan.
Tvrdimo da se problem tri boje moze reducirati na problem klika na sljedeci nacin. Za
dati graf G za koji se zeli utvrditi mogucnost bojenja sa tri boje rezultat je par G; 3
gdje G oznacava komplement od G. To znaci da je G graf na istim cvorovima ali je (u; v)
ivica u G ako i samo ako nije ivica u G. Tada se par G; 3 moze koristiti kao ulaz u
rutinu za klik.
53
5.5 NP kompletnost
5 NP KOMPLEKSNOST
L2 i L2 2 P tada L1 2 P .
Lema. Ako L1
L2 i L2 2
= P tada L1 2
= P.
L2 i L2
L3 tada L1
L3 .
5.5 NP kompletnost
Skup NP kompletnih problema su svi problemi u klasi kompleksnosti NP za koje je
poznato da ako je jedan rjeiv u polinomijalnom vremenu tada to vrijedi za sve njih i
obratno, ako jedan od njih nije rjeiv u polinomijalnom vremenu tada nijedan od njih
nije rjeiv na taj nacin. Ovo se matematicki formalizuje koritenjem oznaka redukcija
polinomijalnog vremena.
Denicija. Jezik L je NP-tezak ako
54
5.5 NP kompletnost
5 NP KOMPLEKSNOST
L0
L za sve L0 2 N P
Cinjenica
da su svi L00 2 N P reducibilni na L0 (s obzirom da je L0 NP kompletan pa time
i NP tezak) i stoga, zbog tranzitivnosti je L00 reducibilan na L povlaci da je L NP tezak.
Ovo daje nacin za dokaz da su problemi NP kompletni u slucaju da je poznato da je
jedan problem NP kompletan. Nazalost, cini se da je gotovo nemoguce dokazati da je
jedan problem NP kompletan s obzirom da denicija kaze da moramo biti u mogucnosti
svaki problem u NP reducirati na taj problem. Postoji beskonacno takvih problema pa
je teko vjerovati u tako neto. Cook je pokazao da postoji problem pod nazivom SAT
(skracenica za Satisability) da je NP kompletan. Da bi pokazali da je drugi problem NP
kompletan sve to trebamo je pokazati da je naproblem NP (a samim tim i reducibilan
na SAT) a zatim pokazati da SAT (ili generalno neki poznat NPC problem) mozemo
reducirati na na problem. Slijedi da je na problem ekvivalentan sa SAT pod uslovom
da se potuje rjeivost u polinomijalnom vremenu.
55
5 NP KOMPLEKSNOST
pL za svaki L1 2 N P .
N P potpuni problemi su najtezi problemi u klasi N P . Postojanje polinomijalnog algoritma za bilo koji od N P potpunih problema bi povlacilo da vrijedi P = N P . Kako
se vjeruje da ova jednakost ne vrijedi to je i postojanje ovakvog algoritma je jako malo
vjerovatno.
56
REFERENCES
6 Literatura
References
[1] Azali Saudi, Analysis of Algorithms, Lecture Notes, July 2008
[2] Hasan Jamak, Teorija brojeva, materijali za nastavu na postdiplomskim studijama
na PMF Tuzla
57
NP-completness,