You are on page 1of 64

AISP 2020. / 2021.

ALGORITMI I STRUKTURE PODATAKA


SADRŽAJ
„VELIKO O“ NOTACIJA ................................................................................................................................. 4
ALGORITAM LINEARNO / SEKVENCIJALNO PRETRAŽIVANJE - O(N) .............................................. 6
ALGORITAM BINARNO PRETRAŽIVANJE – O(log N) ............................................................................. 8
ALGORITAM SELECT SORT – O(𝑁2) ........................................................................................................ 10
ALGORITAM BUBBLE SORT – O(𝑁2) ....................................................................................................... 12
ALGORITAM INSERT SORT – O(𝑁2)......................................................................................................... 13
JEDNOSTRUKO POVEZANE LISTE ........................................................................................................... 14
Kreiranje povezane liste / prvog čvora ......................................................................................................... 15
Ispis i aritmetička sredina povezane liste ..................................................................................................... 15
Umetanje čvora na početak liste ................................................................................................................... 16
Umetanje čvora na kraj liste ......................................................................................................................... 16
Umetanje čvora na određeno mjesto u listi .................................................................................................. 17
Brisanje određenog čvora iz povezane liste ................................................................................................. 18
Brisanje zadnjeg čvora iz liste ...................................................................................................................... 18
Brisanje cijele liste........................................................................................................................................ 19
Pretraživanje čvorova u listi ......................................................................................................................... 19
Sortiranje cijele liste ..................................................................................................................................... 19
DVOSTRUKO POVEZANE LISTE ............................................................................................................... 20
Ispis liste / prolazak kroz listu od prvog čvora ............................................................................................. 20
Prolazak kroz listu od zadnjeg čvora ............................................................................................................ 21
Umetanje čvora na početak liste ................................................................................................................... 21
Umetanje čvora na kraj liste ......................................................................................................................... 22
Pretraživanje čvorova u dvostruko povezanoj listi ....................................................................................... 22
Brisanje predanog čvora iz dvostruko povezane liste .................................................................................. 23
STOGOVI ........................................................................................................................................................ 24
Izvedba stoga pomoću niza........................................................................................................................... 24
Izvedba stoga pomoću povezane liste .......................................................................................................... 26
Problem računanja „povrh“ .......................................................................................................................... 28
ALGORITAM QUICKSORT – O(𝑁2) ........................................................................................................... 30
ALGORITAM MERGESORT – O(N log N) .................................................................................................. 33
REDOVI .......................................................................................................................................................... 35
Izvedba reda pomoću niza ............................................................................................................................ 35

1
AISP 2020. / 2021.

Izvedba reda pomoću povezane liste ............................................................................................................ 38


STABLA .......................................................................................................................................................... 41
Opće stablo ................................................................................................................................................... 41
BINARNA STABLA ....................................................................................................................................... 42
Prikaz binarnog stabla u računalu ................................................................................................................. 42
Obilazak NLD – preorder – O(N)................................................................................................................. 43
Obilazak LND – inorder – O(N)................................................................................................................... 44
Obilazak LDN – postorder – O(N) ............................................................................................................... 45
POREDANA BINARNA STABLA ................................................................................................................ 46
Algoritam NADJI P – O(N).......................................................................................................................... 46
Algoritam DODAJ P – O(N) ........................................................................................................................ 47
Algoritam BRISICVOR – O(log N) ............................................................................................................. 48
PROŠIRENA BINARNA STABLA................................................................................................................ 49
Težinski put .................................................................................................................................................. 49
Huffmanovo stablo i Huffmanov algoritam – O(N log N) ........................................................................... 49
Huffmanovo kodiranje .................................................................................................................................. 50
POTPUNA BINARNA STABLA ................................................................................................................... 51
HRPA ............................................................................................................................................................... 52
Osnovne funkcije s max-hrpom .................................................................................................................... 52
Procedura UHRPI – O(log NH).................................................................................................................... 53
Algoritam NAPRAVI HRPU – O(NH) ........................................................................................................ 53
Algoritam DODAJUHRPU(x) – O(log NH) ................................................................................................ 54
Algoritam BRISIIZHRPE(i) – O(log NH) ................................................................................................... 54
ALGORITAM HEAPSORT – O(NH log NH) ................................................................................................ 55
GRAFOVI ........................................................................................................................................................ 56
Primjer usmjerenog težinskog grafa ............................................................................................................. 57
Planarni i neplanarni grafovi ........................................................................................................................ 57
Usmjereni aciklički grafovi .......................................................................................................................... 58
Prikaz grafa u računalu ................................................................................................................................. 58
Obilazak grafa po širini (Breadth first search) ............................................................................................. 59
Obilazak grada po dubini (Depth first search).............................................................................................. 60
BELLMAN-FORD ALGORITAM ................................................................................................................. 61
DIJKSTRIN ALGORITAM – O(𝑁2).............................................................................................................. 62
FLOYD-WARSHALLOV ALGORITAM – O(𝑁3) ....................................................................................... 62
MREŽE ............................................................................................................................................................ 63

2
AISP 2020. / 2021.

FORD – FULKERSONOV ALGORITAM – O(M * fmax) ........................................................................... 63


EDMONDS – KARPOV ALGORITAM – O(𝑁 ∗ 𝑀2) .................................................................................. 64
GOLDBERG – TARJANOV ALGORITAM .................................................................................................. 64

3
AISP 2020. / 2021.

„VELIKO O“ NOTACIJA
• Matematička notacija koja opisuje ograničavajuće ponašanje funkcije kada njen argument teži prema
nekoj vrijednosti ili u beskonačno.
• U računarstvu se koristi kod klasifikacije algoritma, tj. za analizu kvalitete algoritma u pogledu
njegove složenosti (kompleksnosti) i učinkovitosti (efikasnosti).
• „Veliko O“ isključivo opisuje worst – case slučaj te ima apriornu složenost – ne uzima u obzir
računalo na kojem se algoritam izvodi.
• Vrste analiza:
o analiza vremena izvođenja programa neovisno o programskom jeziku, prevoditelju ili
računalu
o stvarno testiranje programa, pokazuje stvarne podatke o vremenu koje je potrebno računalu
da izvrši program – ono ovisi o količini podataka koji se unose, o brzini procesora, kvaliteti
programa…

• O(1) – KONSTANTNA (TRENUTAČNA) SLOŽENOST


o Vrijeme izvođenja ovisi o konstanti
o Opisuje algoritam koji će se uvijek izvoditi u jednakom vremenu ili prostoru, neovisno o
veličini ili količini ulaznog skupa podataka

Primjer:

• O(N) – LINEARNA SLOŽENOST


o Vrijeme izvođenja algoritma raste s porastom ulaznih podataka.
o Opisuje algoritam čije će se performanse mijenjati linearno i proporcionalno količini /
veličini ulaznih podataka

Primjer:

4
AISP 2020. / 2021.

• O(𝑵𝑴 ) – STUPANJSKA SLOŽENOST


o Ovaj algoritam je efikasan samo za umjerene vrijednosti broja n
o Dvostruko veći niz ulaznih podataka zahtjeva četverostruko više vremena za rješavanje
o O(𝑁 2 ) – kvadratna složenost

Primjer: Ugniježđene petlje

• O(log N) – LOGARITAMSKA SLOŽENOST


o Kod svakog ponavljanja smanjuje se za red veličine baze.
o Problem se rješava tako da se transformira u jednostavniji smanjujući broj elemenata za
fiksan omjer.

Primjer: Binarno pretraživanje

5
AISP 2020. / 2021.

ALGORITAM LINEARNO / SEKVENCIJALNO PRETRAŽIVANJE - O(N)


VREMENSKA SLOŽENOST ALGORITMA: O(N)

C programski jezik:

Pseudo-jezik:

6
AISP 2020. / 2021.

Dijagram toka:

7
AISP 2020. / 2021.

ALGORITAM BINARNO PRETRAŽIVANJE – O(LOG N)


VREMENSKA SLOŽENOST ALGORITMA: O(log N)

Predani niz mora biti prethodno sortiran prije binarnog pretraživanja.

C programski jezik:

Pseudo-jezik:

8
AISP 2020. / 2021.

Dijagram toka:

9
AISP 2020. / 2021.

ALGORITAM SELECT SORT – O(𝑁 2 )


VREMENSKA SLOŽENOST ALGORITMA: O(𝑵𝟐 )

C programski jezik:

Pseudo-jezik:

10
AISP 2020. / 2021.

Dijagram toka:

11
AISP 2020. / 2021.

ALGORITAM BUBBLE SORT – O(𝑁 2 )


VREMENSKA SLOŽENOST ALGORITMA: O(𝑵𝟐 )

C programski jezik:

U svakoj iteraciji vanjske for petlje, najveći će element završiti zadnji!

Pseudo-jezik:

Za svaki i=1 do N-1 činiti

Za svaki j=1 do N-1-i činiti

Ako je V[j] > V[j+1] onda

Pozovi proceduru Zamjeni(V[j], V[j+1])

Dijagram toka:

Sličan kao i kod Select-sort

12
AISP 2020. / 2021.

ALGORITAM INSERT SORT – O(𝑁 2 )


VREMENSKA SLOŽENOST ALGORITMA: O(𝑵𝟐 )

• Algoritam se koristi kod sortiranja elemenata iz niza u povezanu listu

Pseudo-jezik:

13
AISP 2020. / 2021.

JEDNOSTRUKO POVEZANE LISTE


• Povezana lista (en. Linked list) je dinamička struktura.
• Elementi liste (zapisi) se stavljaju u slobodni dio memorije, a kada pojedini zapis ili pak cijela lista
više nije potrebna, zauzeti dio memorije se oslobađa.
• Elementi su međusobno povezani adresnim podacima – pokazivačima.

• Osnovni element povezane liste sastoji se od 2 dijela:


o data – dio s podacima (može biti bilo koji elementarni tip)
o next – memorijska adresa koja pokazuje idući osnovni element u memoriji
• Kod povezanih lista u ovom kolegiju koristi se isključivo operator „točkica“
• Jedino poznato kod povezane liste je varijabla head (prvi, glava,…) koja predstavlja početak
povezane liste, tj. prvi element povezane liste
o head = = NULL → povezana lista je prazna

C programski jezik:

Primjer jednog čvora (node-a):

14
AISP 2020. / 2021.

KREIRANJE POVEZANE LISTE / PRVOG ČVORA

ISPIS I ARITMETIČKA SREDINA POVEZANE LISTE

15
AISP 2020. / 2021.

UMETANJE ČVORA NA POČETAK LISTE

UMETANJE ČVORA NA KRAJ LISTE

16
AISP 2020. / 2021.

UMETANJE ČVORA NA ODREĐENO MJESTO U LISTI

17
AISP 2020. / 2021.

BRISANJE ODREĐENOG ČVORA IZ POVEZANE LISTE

BRISANJE ZADNJEG ČVORA IZ LISTE

18
AISP 2020. / 2021.

BRISANJE CIJELE LISTE

PRETRAŽIVANJE ČVOROVA U LISTI

SORTIRANJE CIJELE LISTE

19
AISP 2020. / 2021.

DVOSTRUKO POVEZANE LISTE


• Osnovni element dvostruko povezane liste sadrži tri elementa:
o data – dio s podacima
o prev – memorijska adresa, pokazivač na prethodni zapis
o next – memorijska adresa, pokazivač na sljedeći zapis

C programski jezik:

ISPIS LISTE / PROLAZAK KROZ LISTU OD PRVOG ČVORA – O(N)


Ispis dvostruko povezane liste isti je kao i ispis jednostruko povezane liste.

C programski jezik:

20
AISP 2020. / 2021.

PROLAZAK KROZ LISTU OD ZADNJEG ČVORA


Za prolazak kroz dvostruko povezanu listu od zadnjeg čvora potrebno je prvo proći kroz cijelu listu od
prvog čvora kako bismo saznali koji je zadnji čvor.

C programski jezik:

UMETANJE ČVORA NA POČETAK LISTE


C programski jezik:

Vremenska složenost ove procedure je O(1)

21
AISP 2020. / 2021.

UMETANJE ČVORA NA KRAJ LISTE


C programski jezik:

PRETRAŽIVANJE ČVOROVA U DVOSTRUKO POVEZANOJ LISTI – O(N)


C programski jezik:

Vremenska složenost ove procedure je O(N)

22
AISP 2020. / 2021.

BRISANJE PREDANOG ČVORA IZ DVOSTRUKO POVEZANE LISTE – O(N)


C programski jezik:

Vremenska složenost ove procedure je O(N)

23
AISP 2020. / 2021.

STOGOVI
• Princip rada stoga je LIFO – „Last in first out“
• Stog je kao struktura podataka definiran pomoću četiri funkcije:
o push(x) – dodaje element x na stog
o pop() – vraća kao rezultat zadnji element stoga i briše ga
o clear() – briše sve elemente stoga
o is_empty() – vraća TRUE ako je stog prazan, inače FALSE

IZVEDBA STOGA POMOĆU NIZA


Nije dovoljan samo niz V od N elemenata, već i dodatni pokazivač Sp – cijeli broj koji pokazuje na zadnji
element u stogu.
Stog je prazan ako je Sp = 0, a pun ako je Sp = N.

Sve četiri operacije su „atomske“. Vremenska složenost svake je O(1)

24
AISP 2020. / 2021.

25
AISP 2020. / 2021.

IZVEDBA STOGA POMOĆU POVEZANE LISTE


• Dovoljna je jedna povezana lista za izvedbu stoga.
• Vrh stoga mora biti na početku povezane liste ako želimo biti efikasni.
• Sve četiri osnovne funkcije mogu se izvesti kao „atomske“, osim procedure Clear() koja u svojoj
pravilnoj izvedbi može zahtijevati O(N) operacija – gdje N predstavlja broj elemenata na stogu.
• Razlog zašto je pogodnije izabrati povezanu listu za implementaciju stoga leži u tome što ne moramo
unaprijed definirati veličinu stoga, tj. Veličinu polja (koja se kasnije ne može mijenjati) u slučaju
takve implementacije.

26
AISP 2020. / 2021.

27
AISP 2020. / 2021.

PROBLEM RAČUNANJA „POVRH“

Pseudo-jezik:

28
AISP 2020. / 2021.

29
AISP 2020. / 2021.

ALGORITAM QUICKSORT – O(𝑁 2 )


VREMENSKA SLOŽENOST ALGORITMA: O(𝑵𝟐 )

• Algoritam quicksort funkcionira na način da uzmemo jedan element u nizu (pivot) i nađemo mu
konačno mjesto, tako da svi lijevo od njega budu manji od njega, a svi desno od njega veći

Pseudo-jezik: Quicksort sa stogovima

30
AISP 2020. / 2021.

Dijagram toka: Quicksort pomoću stoga

31
AISP 2020. / 2021.

Dijagram tijeka: REKURZIVNI QUICKSORT

Pseudo-kod: Rekurzivni quicksort

32
AISP 2020. / 2021.

ALGORITAM MERGESORT – O(N LOG N)


VREMENSKA SLOŽENOST ALGORITMA: O(N log N)

• Spajanje podnizova (procedura MERGE) izvršava se u linearnom vremenu


• Ukupni broj elemenata koje se treba spajati u svakoj od razina je najviše N

Pseudo-kod: MERGESORT REKURZIJOM

Pseudo-kod: Algoritam procedure MergeSort(dg,gg)

Pseudo-kod: Algoritam procedure MERGE(dg, gg)

33
AISP 2020. / 2021.

Dijagram tijeka: REKURZIVNI MERGESORT

34
AISP 2020. / 2021.

REDOVI
• Princip rada kod redova (eng. queues) je FIFO – „First in first out“
• Red je kao struktura podataka definiran pomoću četiri funkcije:
o Push(x) – dodaje element x na kraj reda; zove se još i Enqueue(x)
o Pop() – vraća kao rezultat element s početka reda i briše ga; zove se još i Dequeue()
o Clear() – briše sve elemente reda
o Is_empty() – vraća TRUE ako je red prazan, inače FALSE

IZVEDBA REDA POMOĆU NIZA


• Nije dovoljan samo niz od V do N elemenata, potrebna su i dva dodatna podatka Ulaz i Izlaz – dva
cijela broja koji pokazuju na početak i kraj reda.
• Postoje dvije osnovne izvedbe reda pomoću niza:
o Konačni red, koji se ne koristi u praksi
o Ciklički red
• Konačni red
o Prilikom stavljanja podataka u red i vađenja iz reda, Ulaz i Izlaz se povećavaju
o Nakon N uzastopnih korištenja Push i Pop funkcija, konačni red postaje neupotrebljiv iako
još uvijek ima velik nepopunjeni dio

• Ciklički red
o Nakon što se popuni N-ti podatak, red se i dalje puni od početka, tj. Od prvog mjesta
o Ulazni se pokazivač povećava izrazima: Ulaz = Ulaz + 1
o Ciklički red je prazan ako je Ulaz = Izlaz – 1 i zadnja promjena bio je Pop()
o Ciklički red je pun ako je Ulaz = Izlaz – 1 i zadnja promjena bio je Push(x)

35
AISP 2020. / 2021.

C programski jezik:

Pseudo-jezik:

36
AISP 2020. / 2021.

Sve četiri operacije su „atomske“, vremenske složenosti O(1)


Općenito, nedostatak cikličkih redova, kao i kod stogova je ograničen broj od N mjesta za podatke.

37
AISP 2020. / 2021.

IZVEDBA REDA POMOĆU POVEZANE LISTE


• Dovoljna je jedna povezana lista za izvedbu reda, pokazivač na prvi i pokazivač na zadnji zapis liste
• Sve četiri osnovne funkcije mogu se izvesti kao „atomske“ (O(1)), međutim procedura Clear() u
svojoj pravilnoj izvedbi može zahtijevati O(N) operacija, gdje je N broj elemenata u redu

C programski jezik:

38
AISP 2020. / 2021.

Pseudo-jezik:

39
AISP 2020. / 2021.

40
AISP 2020. / 2021.

STABLA
• Stabla pripadaju nelinearnim strukturama podataka
• Definira se kao hijerarhijska struktura koja se sastoji od čvorova i grana
• Čvorovi mogu imati više podređenih čvorova, ali samo jedan nadređeni čvor
• Svi čvorovi osim korijenskog čvora imaju jedan nadređeni čvor, korijen nema.

OPĆE STABLO
• Stablo na slici ispod naziva se općim stablom jer broj podređenih čvorova može biti proizvoljan
• Opća stabla mogu biti uređena (redoslijed podređenih čvorova je bitan – okta-stablo) i neuređena
(redoslijed podređenih čvorova nije bitan)

Primjer prikaza općeg stabla u C-u:

41
AISP 2020. / 2021.

BINARNA STABLA
• Binarno stablo je stablo kod kojeg svaki čvor može imati najviše dva nasljednika (lijevi i desni
nasljednik)
• Svaka razina binarnog stabla ima zato ograničen maksimalan broj čvorova:
o i-ta razina može imati najviše 𝟐𝒊 čvorova

Primjer binarnog stabla:

PRIKAZ BINARNOG STABLA U RAČUNALU


• Dva su osnovna načina prikaza binarnog stabla u računalu:
o Statički način pomoću matrice s 3 stupca
o Dinamički način
• Kod prikaza binarnog stabla pomoću matrice vrijede sljedeća pravila:
o U prvi stupac stavlja se vrijednost elementa (čvora)
o U drugi stupac stavlja se broj retka gdje je lijevi nasljednik
o U treći stupac stavlja se broj retka gdje je desni nasljednik
o Matrica ima onoliko redaka koliko ima čvorova!
o U prvi redak prvog stupca obavezno se stavlja korijenski čvor!

42
AISP 2020. / 2021.

• Kod prikaza binarnog stabla pomoću dinamičke strukture vrijedi sljedeće:

OBILAZAK NLD – PREORDER – O(N)


• Vremenska složenost izvođenja NLD obilaska je linearna - O(N)

Pseudo-jezik: NLD korištenjem stoga

Pseudo-jezik: NLD korištenjem rekurzija

43
AISP 2020. / 2021.

C programski jezik: NLD korištenjem rekurzija

OBILAZAK LND – INORDER – O(N)


• Vremenska složenost izvođenja NLD obilaska je linearna - O(N)

C programski jezik: LND korištenjem rekurzija

Pseudo-jezik: LND korištenjem rekurzija

44
AISP 2020. / 2021.

OBILAZAK LDN – POSTORDER – O(N)


• Vremenska složenost izvođenja NLD obilaska je linearna - O(N)

C programski jezik: LDN korištenjem rekurzija

Pseudo-jezik: LDN korištenjem rekurzija

45
AISP 2020. / 2021.

POREDANA BINARNA STABLA


• Ako su čvorovi binarnog stabla označeni međusobno usporedivim oznakama te je oznaka lijevog
nasljednika strogo manja, a strogo manji su i svi čvorovi u lijevom podstablu, a oznaka desnog
nasljednika strogo veća od oznake nadređenog čvora, a isto vrijedi i za sve čvorove u desnom
podstablu, takvo stablo se naziva poredano binarno stablo
• L<N<D
o L – predstavlja cijelo lijevo podstablo
o N – predstavlja nadređeni čvor
o D – predstavlja cijelo desno podstablo
• Kod poredanog binarnog stabla dva čvora ne mogu imati istu vrijednost! (zbog relacije strogo
manje)
• INORDER (LND) obilazak kod poredanog binarnog stabla uvijek kao rezultat daje poredani
(sortirani) niz

ALGORITAM NADJI P – O(N)


Vremenska složenost : O(N)

Pseudo-jezik:

46
AISP 2020. / 2021.

Pseudo-jezik: NADJI P koristeći rekurzije

ALGORITAM DODAJ P – O(N)


Vremenska složenost : O(N)

Pseudo-jezik:

47
AISP 2020. / 2021.

ALGORITAM BRISICVOR – O(LOG N)


Vremenska složenost : O(log N)

• Kako bismo lakše manipulirali stablom, najprije ćemo pomoću funkcije NajmanjiCvor(cvor) naći
adresu čvora koji ima najmanju vrijednost u podstablu koje počinje čvorom cvor.

48
AISP 2020. / 2021.

PROŠIRENA BINARNA STABLA


• Binarno stablo u kojem svaki čvor može imati ili dva ili niti jedan nasljednik naziva se prošireno
binarno stablo
• Čvorovi bez nasljednika su vanjski čvorovi, a oni koji imaju dva nasljednika nazivaju se
unutarnjim čvorovima

Primjer proširenog binarnog stabla:

TEŽINSKI PUT
• Dužina puta l(i) do vanjskog čvora i definirana je brojem grana koje treba proći od korijena do
vanjskog čvora
• Težinski put do čvora i tj. W(i) definiran je umnoškom l(i)*w(i)
• Ukupni težinski put stabla definiran je s: W = SUMA(l(i)*w(i)) za sve vanjske čvorove i

Primjer za prošireno binarno stablo sa slike iznad:

W = (9+7)•2+(8+6+4)•3+(12+14)•4 = 190

HUFFMANOVO STABLO I HUFFMANOV ALGORITAM – O(N LOG N)


• Za zadane vanjske čvorove i njihove težine može se naći stablo s najmanjim težinskim putem tako da
čvorovi s većom težinom dođu što bliže korijenu, a čvorovi s malom težinom što dalje od korijena.
• Huffmanovo stablo je prošireno binarno stablo koje se iz zadanih vanjskih čvorova generira pomoću
Huffmanovog algoritma
o Huffmanov algoritam naziva se još i algoritam najmanjeg težinskog puta

49
AISP 2020. / 2021.

Pseudo-kod: HUFFMANOV ALGORITAM

Primjer Huffmanovog stabla:

HUFFMANOVO KODIRANJE
• Grane prema lijevim nasljednicima označe se s 0
• Grane prema desnim nasljednicima označe se s 1
• Znakovima koje se češće pojavljuju dodjeljuje se kraći binarni niz, a rjeđe pojavljivanim znakovima
dodjeljuje se duži binarni niz

50
AISP 2020. / 2021.

POTPUNA BINARNA STABLA


• Potpuno binarno stablo je stablo u kojem su sve razine popunjene, a jedino posljednja razina ne
mora biti popunjena
• Svaka se razina popunjava s lijeva na desno

Primjer potpunog binarnog stabla:

• Osnovna svojstva potpunog binarnog stabla


o Lijevi nasljednik ima parni i, a desni ima neparni i
o Korijenski čvor ima i=1
o Nadređeni i-tom čvoru ima redni broj i/2
o Lijevi nasljednik i-tog čvora ima redni broj 2*i
o Desni nasljednik i-tog čvora ima redni broj 2*i+1

• Prikaz potpunog binarnog stabla u računalu moguće je pomoću jednog niza V s N elemenata

Primjer za stablo iznad:

51
AISP 2020. / 2021.

HRPA
• Hrpa (en. heap) je potpuno binarno stablo za koje dodatno vrijedi za svaki čvor osim korijenskog:
vrijednost čvora je manja ili jednaka vrijednosti njemu nadređenog čvora – to je definicija
MAX-HRPE
• MIN-HRPA – Za svaki čvor osim korijenskog: vrijednost čvora je veća ili jednaka od vrijednosti
nadređenog
• Hrpu u računalu prikazujemo nizom. Osim duljine niza N važno svojstvo hrpe je i koliko ona
elemenata ima – NH

OSNOVNE FUNKCIJE S MAX-HRPOM

52
AISP 2020. / 2021.

PROCEDURA UHRPI – O(LOG NH)


• Procedura UHRPI je rekurzivna procedura
• Vremenska složenost O(log NH)

Pseudo-kod:

ALGORITAM NAPRAVI HRPU – O(NH)


Vremenska složenost algoritma: O(NH)

Pseudo-kod:

53
AISP 2020. / 2021.

ALGORITAM DODAJUHRPU(X) – O(LOG NH)


Vremenska složenost algoritma: O(log NH)

Pseudo-kod:

ALGORITAM BRISIIZHRPE( I) – O(LOG NH)


Vremenska složenost algoritma: O(log NH)

54
AISP 2020. / 2021.

ALGORITAM HEAPSORT – O(NH LOG NH)


Vremenska složenost algoritma: O(NH log NH)

C programski jezik:

Pseudo-kod:

55
AISP 2020. / 2021.

GRAFOVI
• Graf G(V,E) se sastoji od:
o skupa čvorova (vrhova) : V(G)
o skupa grana (bridova) : E(G)
• Ako se skup E(G) sastoji od neuređenih parova e{u,v}, u i v su čvorovi iz V(G), onda kažemo da se
radi o neusmjerenom grafu
• Ako se radi o uređenim parovima e(u,v) onda govorimo o usmjerenom grafu

Primjer neusmjerenog grafa:

• Grana e s istim krajnjim točkama naziva se petlja (primjer e8)


• Stupanj deg(u) čvora u određen je brojem grana pridruženih čvoru.
o Čvor za kojeg je deg(u) = 0 naziva se izolirani čvor (primjer čvor 6)
• Kod usmjerenih grafova razlikujemo broj grana koje ulaze u čvor indeg(u) i broj grana koje izlaze
iz čvora outdeg(u)
o Vrijedi sljedeće: deg(u) = indeg(u) + outdeg(u)
• Put dužine n je niz P(v0,v1,v2,…,vn) za koje vrijedi da su vi i vi+1 susjedni čvorovi
o Ako je v0 = vn onda se takav put naziva ciklus
• Ako između svaka dva čvora grafa G postoji put, takav se graf naziva povezani graf

56
AISP 2020. / 2021.

PRIMJER USMJERENOG TEŽINSKOG GRAFA


• Kod usmjerenih grafova grane dodatno označavamo strelicama
• Čvorovi mogu imati pridodane vrijednosti, ali također se i granama može dodati neka vrijednost
• U primjeru ispod svakoj grani dodijeljena je određena vrijednost

Primjer usmjerenog težinskog grafa:

PLANARNI I NEPLANARNI GRAFOVI


• Ako se graf može prikazati u ravnini tako da se nijedan njegov brid ne siječe, govorimo o
planarnom grafu
• U suprotnom govorimo o neplanarnom grafu

Primjeri neplanarnih grafova:

57
AISP 2020. / 2021.

USMJERENI ACIKLIČKI GRAFOVI


• Usmjereni graf je aciklički graf ako u njemu ne postoji niti jedan ciklus!
• U suprotnom govorimo o cikličkom grafu

Primjeri usmjerenih acikličkih grafova:

PRIKAZ GRAFA U RAČUNALU


• Dva su načina prikaza grafa u računalu
o Prikaz pomoću matrice susjedstva (ili matrice težina)
o Prikaz pomoću niza povezanih lista

• Prikaz grafa pomoću matrice susjedstva:


o Matrica susjedstva je kvadratna matrica i može se potencirati
o K-ta potencija te matrice daje broj puteva dužine k

58
AISP 2020. / 2021.

• Prikaz grafa pomoću niza povezanih lista:

OBILAZAK GRAFA PO ŠIRINI (BREADTH FIRST SEARCH)


Vremenska složenost obilaska je O(M+N)
Ukoliko se radi o prikazu grafa pomoću matrice onda je O(𝑵𝟐 )

Pseudo-jezik:

59
AISP 2020. / 2021.

OBILAZAK GRADA PO DUBINI (DEPTH FIRST SEARCH)


Vremenska složenost obilaska je O(M+N)
Ukoliko se radi o prikazu grafa pomoću matrice onda je O(𝑵𝟐 )

Pseudo-jezik:

60
AISP 2020. / 2021.

BELLMAN-FORD ALGORITAM
Vremenska složenost algoritma je O(M*N)
Ukoliko se radi o prikazu grafa pomoću matrice težina onda je O(𝑵𝟑 )

61
AISP 2020. / 2021.

DIJKSTRIN ALGORITAM – O(𝑁 2 )


Vremenska složenost algoritma je O(𝑵𝟐 )

FLOYD-WARSHALLOV ALGORITAM – O(𝑁 3 )


Vremenska složenost algoritma je O(𝑵𝟑 )

62
AISP 2020. / 2021.

MREŽE
• Mreža je poseban graf s dodatnim čvorom s koji predstavlja izvor (source), on nema ulaznih
bridova, samo izlazne i čvorom t koji predstavlja ponor (sink), on nema izlaznih bridova, samo
ulazne
• U općem slučaju bridovima osim funkcije kapaciteta može biti dodijeljena i funkcija težine (problem
najkraćih puteva)

Primjer mreže:

FORD – FULKERSONOV ALGORITAM – O(M * FMAX)


Vremenska složenost algoritma : O(M * fmax)

• Rezidualna mreža G' na početku jednaka je originalnoj mreži G.


No, prilikom svakog uvećavanja toka duž puta π, ažurira se i mreža G' tako da joj mijenjamo njen
rezidualni kapacitet za svaki brid s obzirom na to koliko je još preostalo toka za prenijeti.
• Ovo nije algoritam polinomijalne, nego „pseudopolinomijalne“ složenosti, zato što ovisi o iznosu
rezultata fmax!

Pseudo-jezik:

63
AISP 2020. / 2021.

EDMONDS – KARPOV ALGORITAM – O(𝑁 ∗ 𝑀2 )


Vremenska složenost algoritma : O(𝑵 ∗ 𝑴𝟐 )

• Edmond – Karpov algoritam je strogo polinomijalni algoritam za problem maksimalnog protoka.


• Ovaj algoritam je izveden iz Ford – Fulkersonovog tako da se prilikom traženja puta od s do t uvijek
traži najkraći put s obzirom na broj bridova

GOLDBERG – TARJANOV ALGORITAM


• U svojoj osnovnoj izvedbi (PUSH – RELABEL) vremenska složenost ovog algoritma je O(𝑵 ∗ 𝑴𝟐 )
• U svojoj posebnoj izvedbi (RELABEL – TO – FRONT) postiže najbolje asimptotsko vrijeme za
problem maksimalnog toka koje iznosi O(𝑵𝟑 )

64

You might also like