Nelinearne strukture podataka.pdf

96
Katedra za ra Katedra za ra č č unarsku unarsku tehniku i informatiku tehniku i informatiku Odsek za softversko in Odsek za softversko in ž ž enjerstvo enjerstvo [ [ SI SI ] ] Algoritmi i strukture podataka Algoritmi i strukture podataka Milo V. Toma Milo V. Toma š š evi evi ć ć

description

ASP

Transcript of Nelinearne strukture podataka.pdf

Page 1: Nelinearne strukture podataka.pdf

Katedra za raKatedra za ra ččunarsku unarsku tehniku i informatikutehniku i informatiku

Odsek za softversko inOdsek za softversko in žženjerstvoenjerstvo [[SISI]]

Algoritmi i strukture podatakaAlgoritmi i strukture podataka

Milo V. TomaMilo V. Toma šševievićć

Page 2: Nelinearne strukture podataka.pdf

NelNel inearne strukture podatakainearne strukture podatakaA

lgor

itmi i

str

uktu

re p

odat

aka

� Jedan element strukture može biti u vezisa više od dva druga elementa –višedimenzionalnost

� Vrste struktura� stabla� grafovi

� Operacije

� Memorijska reprezentacija� ulančana (češće)� sekvencijalna

Page 3: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a StablaStabla

Definicije i terminologija

A

C D

H

B

IGFE

J K L nivo 3

nivo 2

nivo 1

nivo 0

� Konačan, neprazan skup elemenata - čvorova� postoji poseban čvor - koren� ostali čvorovi se mogu razdvojiti u disjunktne

podskupove koji su stabla - podstabla

Koreno stablo

Page 4: Nelinearne strukture podataka.pdf

Alg

oritm

i i s

truk

ture

pod

atak

a TerminologijaTerminologija� grane

� stepen (ulazni, izlazni)

� čvorovi� neterminalni i terminalni (listovi)� otac, sinovi, braća� predak, potomak

� put, dužina puta

� nivo, visina (dubina)

� šuma Nelinearne strukture podataka Stabla Definicije i terminologija

Page 5: Nelinearne strukture podataka.pdf

Alg

oritm

i i s

truk

ture

pod

atak

a DefinicijeDefinicije� stabla

� slična� ekvivalentna� uređena� poziciona

� interna dužina puta - PI

� eksterna dužina puta - PE

� interni čvorovi nmax=(mh+1 - 1)/(m - 1)

� eksterni čvorovi e = n(m - 1) + 1 Nelinearne strukture podataka Stabla Definicije i terminologija

Page 6: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Interni i eksterni Interni i eksterni ččvorovivorovi

A

B C

ED F

G

A

B C

ED F

G

b)a)

Definicije i terminologija

Page 7: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Predstavljanje stablaPredstavljanje stabla

Predstavljanje stabala

AB

EJ

FCD

GHI

KL

C

A

HB E J

FG

IK L

D

b)a)

Alternativne grafičke predstave:

� ugneždeni skupovi

� identacija

Page 8: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a UlanUlanččana reprezentacijaana reprezentacijaA

B C

D E F

G

Predstavljanje stabala

� fleksibilna za proizvoljne topologije

� neefikasno korišćenje prostora

� ponekad i pokazivač na oca

Page 9: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a UlanUlanččana reprezentacijaana reprezentacija

A AB

C

D

E

F

G

A B C

D E

F

G

Predstavljanje stabala

� jedna ulančana lista za sinove svakog čvora

� efikasnije korišćenje prostora

Page 10: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Sekvencijalna reprezentacijaSekvencijalna reprezentacija

2 2 3 50 1 1V

A B C D E F G3

5

6

0

0

2

4

0

0

7

A

B

C

D

E

00F

00G

1

2

3

4

5

6

7

Predstavljanje stabala

Za čvor k u vektoru: otac - ⌊(k + m – 2)/m⌋ = ⌈(k - 1)/m⌉sinovi - m(k - 1) +2, m(k - 1) +3, ... , mk + 1

Page 11: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a BinarnaBinarna stablastabla

Binarna stabla

� Konačan skup čvorova koji je ili prazanili se sastoji od korena sa dva posebna podstabla(levim i desnim) koja su, takođe, binarna stabla

� Različito od uređenog stabla sa m=2!

� PE = PI + 2n1: PI = 0, PE =2 n : PE(n) = PI (n) + 2n

n+1:PE(n + 1) = PE(n) - k + 2(k + 1)

= PE(n) + k +2

= PI(n) + 2n + k + 2

= PI(n + 1) + 2(n + 1)

Page 12: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Vrste bVrste b inarninarn ihih stabstab aalala

Binarna stabla

� Puno stablo� svi čvorovi grananja imaju stepen 2� n0 = n2 + 1� n = 2n2 + 1

Page 13: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Vrste bVrste b inarninarn ihih stabstab aalala1

5

1110

4

98

2

7

1514

6

1312

3

1

5

10

4

98

2

76

3

a)

b)

kompletnostablo

skoro kompletnostablo

Binarna stabla

Page 14: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Vrste bVrste b inarninarn ihih stabstab aalala

Binarna stabla

� broj čvorova nmax = 2h+1 – 1

� visina hmin = ⌈log (n + 1)⌉ - 1

� vektorska reprezentacija, za čvor i� otac ⌊i/2⌋� levi sin 2i, 2i ≤ n� desni sin 2i+1, 2i +1 ≤ n

4 5 61 2 3 7 8 9 10

14243 144424443123 24444443

nivo 1nivo 0 nivo 2 nivo 3

Page 15: Nelinearne strukture podataka.pdf

Alg

oritm

i i s

truk

ture

pod

atak

aMinimizacija interne duMinimizacija interne du žžine putaine puta� Najgori slučaj

� degenerisano stablo - jedan čvor po nivou� PI = n(n – 1)/2 ~ O(n2)

� Prosečan slučaj O(n √n)

� Najbolji slučaj� čvorovi što bliže koranu� PImin = 0+1+1+2+2+2+2+...

= ∑ ⌊logn ⌋⇒ O(n logn)

� svi listovi na dva susedna nivoa

Nelinearne strukture podataka Stabla Minimizacija dužine puta

Page 16: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

aTeTežžinsins ka eksterna duka eksterna du žžina putaina puta

5

117

3

3 5 117 7

11

53

Minimizacija dužine puta

� Eksternim čvorovima pridružene “težine” w

� Težinska eksterna dužina putaPWE = ∑ wi li

Page 17: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

aHuffmanHuffman --ov algoritamov algoritam

Minimizacija dužine puta

HUFFMAN(W, e)for i = 1 to e do

z = GETNODEw(z) = W[i]PQ-INSERT(H, z)

end_forfor i = 1 to e - 1 do

z = GETNODEx = PQ-MIN-DELETE(H)y = PQ-MIN-DELETE(H)w(z) = w(x)+w(y)left(z) = xright(z) = yPQ-INSERT(H, z)

end_forreturn z

~ O(e loge)

Page 18: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a HuffmanHuffman --ov algoritamov algoritam

10

B:6

27

17

F:10D:7E:4

0 0

0 1

1 1

A:42C:3110

B:6

17

F:10D:7E:4

0 01 1

A:42C:31

10

B:6E:4

0 1

A:42C:31F:10D:7

B:6E:4 F:10D:7 A:42C:31

a)

b)

c)

d)

Minimizacija dužine puta

Primena – Huffman-ovi kodovi

Page 19: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a HuffmanHuffman --ov algoritamov algoritam

10

B:6

27

100

17

F:10D:7E:4

C:31

58A:42

0 0

0

0

0 1

1

1

1 1

10

B:6

27

17

F:10D:7E:4

C:31

58A:42

0 0

0

0 1

1

1 1

e)

f)

1011100010101110010Kodovi

104731642Verovatno će

FEDCBASimboli

Minimizacija dužine puta

Page 20: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a HuffmanHuffman --ov algoritamov algoritam

27

100

17

D:7

C:31

58A:42

0

0

0

0 1

1

1

1

10

B:6E:4

0 1

F:10

Minimizacija dužine puta

Alternativno rešenje sa stablom veće visine

Page 21: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

aOperacije sa binarnim stablomOperacije sa binarnim stablom

F

IH

B

E

A

G

F

IH

B

ED

A

G

B

ED

A

G

C

H

F

I

a) b)

c)

Operacije umetanja i brisanja

Umetanje čvora D

Umetanje čvora C

Page 22: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak binarnog stablaObilazak binarnog stabla

Operacije obilaska

PREORDER(root)if (root ≠ nil) then

P(root)PREORDER(left(root))PREORDER(right(root))

end_if

INORDER(root)if (root ≠ nil) then

INORDER(left(root))P(root)INORDER(right(root))

end_if

POSTORDER(root)if (root ≠ nil) then

POSTORDER(left(root))POSTORDER(right(root))P(root)

end_if

Rekurzivne realizacije obilazaka

Page 23: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

aPreorderPreorder

PREORDER-I(root)PUSH(S, root)while (not STACK-EMPTY(S)) do

next = POP(S)while (next ≠ nil) do

P(next)if (right(next) ≠ nil) then

PUSH(S, right(next))end_ifnext = left(next)

end_whileend_while

nil

ABDEGCFHIII

nilI

ABDEGCFHHHI

ABDEGCFFF

nilF

ABDEGCCC

nilC

ABDEGGGC

ABDEEEC

nilCE

ABDDDCE

ABBBC

AAA

A

preorder poredak

posećeni čvor

nextS

Operacije obilaska

⇒ O(n)

Page 24: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a

POSTORDER-I(root)next = rootwhile (next ≠ nil) do

PUSH(S, next)next =left(next)

end_whilewhile (not STACK-EMPTY(S)) do

next = POP(S)if (next > 0) then

PUSH(S, -next)next = right(next)while (next ≠ nil) do

PUSH(S, next)next = left(next)

end_whileelse

next = - nextP(next)

end_ifend_while

Operacije obilaska

PostorderPostorder

~ O(n)

Page 25: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a

LEVEL-ORDER(root)next = rootINSERT(Q, next)while (not QUEUE-EMPTY(Q)) do

next = DELETE(Q)P(next)if (left(next) ≠ nil) then

INSERT(Q, left(next))end_ifif (right(next) ≠ nil) then

INSERT(Q, right(next))end_if

end_while

Operacije obilaska

Obilazak po nivoimaObilazak po nivoima

~ O(n)

Algoritam slične strukture i za preorder!

Page 26: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Povezana binarna stablaPovezana binarna stabla

Povezana binarna stabla

� Problemi � efikasniji obilazak� određivanje prethodnika i sledbenika

za proizvoljno zadati čvor� neiskorišćeni pokazivači

(n+1 – više od 50%)

� Povezana (threaded) binarna stabla� strukturni pokazivači � veze po izabranom načinu obilaska

Page 27: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Povezana binarna stablaPovezana binarna stabla

Povezana binarna stabla

A

B C

D E F

H IG

lf = 1 pokazivač na levo podstablo

lf = 0 veza na prethodnika

rf = 1 pokazivač na desno podstablo

rf = 0 veza na sledbenika

Page 28: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a

INSUCC(x)s = right(x)if (rf(x) = 1) then

while (lf(s) = 1) dos = left(s)

end_whileend_ifreturn s

INORDER-THR(root)next = rootwhile (lf(next) = 1) do

next = left(next)end_whilerepeat

P(next)next = INSUCC(next)

until next = nil

Povezana binarna stablaPovezana binarna stabla

Povezana binarna stabla

Obilazak povezanog stabla po inorderu

Nalaženje sledbenika zadatog čvora po inorderu

Page 29: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a

X

Z

Z

X

Y

a) b) V

V

INSERT-RT(x, y)right(y) = right(x)rf(y) = rf(x)left(y) = xlf(y) = 0right(x) = yrf(x) = 1if (rf(y) = 1) then

s = INSUCC(y)left(s) = y

end_if

Povezana binarna stablaPovezana binarna stabla

Povezana binarna stabla

Umetanje u povezano stablo

Page 30: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Stabla viStabla vi ššeg stepenaeg stepena

Stabla višeg stepena

� Problem u stablima stepena m > 2� neefikasno korišćenje prostora

u ulančanoj reprezentaciji� neiskorišćeni pokazivači n(m-1)+1

iskorišćeni pokazivači n-1

� Rešenje� odgovarajuće binarno stablo

iste semantike � binarna relacija “najlevlji sin – desni brat”� svi sinovi istog oca u ulančanoj listi

Page 31: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Stabla viStabla vi ššeg stepenaeg stepena

Stabla višeg stepena

A

C D

I

B

HG JFE

A

C

GFE H I J

B D

a)

b)

Page 32: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Stabla viStabla vi ššeg stepenaeg stepenaCON-M2BIN(P)m = INPUT(P)root = b = GETNODEinfo(b) = info(m)PUSH(S, (level(m), b))

while (m = INPUT(P)) dob = GETNODEinfo(b) = info(m)pred_level = level(TOP(S))pred_addr = addr(TOP(S))if (level(m) > pred_level) then

left(pred_addr) = belse

while (pred_level > level(m)) doPOP(S)pred_level = level(TOP(S))pred_addr = addr(TOP(S))

end_whileright(pred_addr) = bPOP(S)

end_ifPUSH(S, (level(m), b))

end_whil ereturn root

Stabla višeg stepena

Konverzija m-arnog stabla u

odgovarajuće binarno stablo

Page 33: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a Stabla viStabla vi ššeg stepenaeg stepena

right (I) = J0,A 1,D 2,J2,J

right (H) = I0,A 1,D 2,I2,I

left (D) = H0,A 1,D 2,H2,H

right (C) = D0,A 1,D1,D

left (C) = G0,A 1,C 2,G2,G

right (B) = C0,A 1,C1,C

right (E) = F0,A 1,B 2,F2,F

left (B) = E0,A 1,B 2,E2,E

left (A) = B0,A 1,B1,B

0,A0,A

Pokaziva čSTekući čvor

Stabla višeg stepena

Page 34: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

aPredstavljanje aritmetiPredstavljanje aritmeti ččkih izrazakih izraza

Primene stabala

E

/

DC

*

BA

+

-

D

+

/A

*

B C

a) b)

� Binarno stablo predstavlja aritmetički izraz � čvorovi grananja – unarni i binarni operatori� listovi - operandi

(A+B/C)(D-E) A*B+C/D

Page 35: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Stabla

Alg

oritm

i i s

truk

ture

pod

atak

a

CALC-EXP(r)case (info(r)) of

op__add:return (CALC-EXP(left(r)) + CALC-EXP(right(r))op__sub:return (CALC-EXP(left(r)) - CALC-EXP(right(r)). . .operand:return (VAL(right(r)))

end_case

Primene stabala

Predstavljanje aritmetiPredstavljanje aritmeti ččkih izrazakih izraza� Obilazak stabla

� preorder daje prefiksni izraz� postorder daje postfiksni izraz� inorder daje infiksni izraz (ako nema zagrada!)

Izračunavanje izraza predstavljenog stablom

Page 36: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a GrafoviGrafovi

Definicije i terminologija

a)

2 4 5

1 3 6

1 4

3 5

2

b)

G1 G2

� Modeliranje proizvoljnih nelinearnih relacija

� Graf G je par skupova (V, E)

�V (čvorovi ) - konačan neprazan skup

�E (grane ) - binarne relacije između čvorova

�grana (u, v) incidentna na čvorovima

Page 37: Nelinearne strukture podataka.pdf

Alg

oritm

i i s

truk

ture

pod

atak

a TerminologijaTerminologija� Usmereni, neusmereni i mešoviti grafovi

� Susednost čvorova

� Ulazni i izlazni stepen čvora

� Petlje i paralelne grane

� Prosti graf, multigraf, hipergraf, podgraf

� Težinski graf

� Put, prost put, dostižnost

Nelinearne strukture podataka Grafovi Definicije i terminologija

Page 38: Nelinearne strukture podataka.pdf

Alg

oritm

i i s

truk

ture

pod

atak

a TerminologijaTerminologija

� Ciklus, ciklični i aciklični grafovi

� Kompletni, gusti i retki grafovi

� Bipartitni graf

� Povezani graf, povezane komponente

� Slobodno stablo � acikličan, povezan, neusmeren graf

Nelinearne strukture podataka Grafovi Definicije i terminologija

Page 39: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a MatriMatri ččna reprezentacijana reprezentacija

Predstavljanje grafova

0

0

0

0

1

0

0

1

0

1

0

1

0

0

0

0

0

0

1

1

0

0

0

0

A =

0 0 0 0 0 1

0 0 0 0 0 0

0

0

1

1

0

0

0

0

1

0

0

1

1

0

1

0

1

0

0

0

A =

1 0 0 0 0

a) b)

� Matrica susednosti A

� a[i, j] = 1 ako (i, j) ∈ E� a[i, j] = 0 ako (i, j) ∉ E

� a[i, j] = w(i, j) za težinske grafove

Page 40: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a UlanUlanččana reprezentacijaana reprezentacija

Predstavljanje grafova

� Liste susednosti� vektor zaglavlja� ulančane liste suseda� element liste odgovara grani

6

1

2

3

4

5

3

5

6

AL

2

3 5

a)

2

1

2

3

4

5 1

AL

3 4 5

1 4

1 3

b)

Page 41: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a UlanUlanččana reprezentacijaana reprezentacija

Predstavljanje grafova

� Inverzne liste susednosti� lista za čvor sadrži sve čvorove kojima je sused� pogodno za izračunavanje ulaznog stepena

1

A2

3

4

5

6

1

2

3

5

4

4

4

IAL

� Multiliste� element koji predstavlja granu ulančan u dve liste � identifikacija oba čvora i dva pokazivača

Page 42: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Predstavljanje grafovaPredstavljanje grafova

Predstavljanje grafova

neusmereni

usmereni

n + 6en + 4en(n + 1)/2

n + 3en + 2en2

liste (težinski)liste (netežinski )matrica

� Prostorna složenost

� Matrična reprezentacija pogodnija za� dinamičku promenu broja grana� za direktan pristup grani

� Ulančana reprezentacija pogodnija za� dinamičku promenu broja čvorova� za određivanje suseda

Page 43: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak grafaObilazak grafa

Obilazak grafa

� Svi čvorovi se posete samo jednom u nekom linearnom poretku

� Poredak zavisi od izbora početnog čvora

� Ako se ne posete svi zbog nedostižnosti, nastavlja se sa nekim od neposećenih

� Na čvor se može naići više puta, ali samo prvi put se poseti

� Osnovni algoritmi zasnovani na susednosti: � obilazak po širini (BFS)� obilazak po dubini (DFS)

Page 44: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak grafa po Obilazak grafa po šširiniirini

Obilazak grafa

� Strategija algoritma � poseti početni čvor� poseti njegove susede� poseti njihove neposećene susede istim redom, ...

� Posete u “talasima”, po nivoima iste udaljenosti

� Koristi se neprioritetni red za čekanje ivektor posećenosti

� Vremenska složenost � O(n2) za matričnu reprezentaciju� O(max(n, e)) za ulančanu reprezentaciju

Page 45: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak grafa po Obilazak grafa po šširiniirini

Obilazak grafa

BFS(G, v)for i = 1 to n do

visit [i] = falseend_forvisit [v] = trueINSERT(Q, v) while (not QUEUE-EMPTY(Q)) do

v = DELETE(Q)for { u : (v, u) ∈ E} do

if (not visit [u]) thenvisit [u] = trueINSERT(Q, u)

end_ifend_for

end_while

Page 46: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak grafa po Obilazak grafa po šširiniirini

A

B C D

E F G

H

I

J

l = 0

l = 1

l = 2

l = 3

A A

B C D ABCD

C D E ABCDE

D E F ABCDEF

E F G ABCDEFG

F G I ABCDEFGI

G I ABCDEFGI

I H J ABCDEFGIHJ

Obilazak grafa

Page 47: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak grafa po dubiniObilazak grafa po dubini

Obilazak grafa

� Strategija algoritma � poseti početni čvor� poseti jednog njegovog suseda� poseti jednog neposećenog suseda prethodnog � ako ga nema, vraća se do poslednjeg prethodnika

koji ima neposećenog suseda

� Slično preorderu kod stabla

� Vremenska složenost � O(n2) za matričnu reprezentaciju� O(max(n, e)) za ulančanu reprezentaciju

Page 48: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak grafa po dubiniObilazak grafa po dubini

DFS-VISIT(v)visit [v] = truefor { u, (v, u) ∈ E } do

if (not visit [u]) thenDFS-VISIT(u)

end_ifend_for

DFS(G, v)for i = 1 to n do

visit [i] = falseend_forDFS-VISIT(v)

Obilazak grafa

� Rekurzivna realizacija

� Može i iterativna realizacija korišćenjem steka

Page 49: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Obilazak grafa po dubiniObilazak grafa po dubini

A B C

D E F

G

1/14 2/13 8/9

10/11

7/123/64/5

ABEDFCG

Obilazak grafa

� Primer

Page 50: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a PrimenPrimen ee obilaska grafaobilaska grafa

Obilazak grafa

� Određivanje najkraćeg rastojanja između dva čvora (i i j) u netežinskom grafu � rastojanje do j jednako broju nivoa l[j]� BFS se startuje od polaznog čvora i (l[i] = 0)� pri poseti nekog čvora u preko drugog čvora v

postavi se njegov nivo na l[u] = l[v] + 1 � kad se poseti čvor j rastojanje je nađeno

kao minimalni broj grana od čvora i

� Provera cikličnosti� postojanje poprečnih ili povratnih grana

Page 51: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a PrimenPrimen ee obilaska grafaobilaska grafa

Obilazak grafa

CONN-COMP(G)n_cc = 0for i = 1 to n do

visit[i] = falseend_forfor i = 1 to n do

if (not (visit[i]) thenn_cc = n_cc + 1DFS-VISIT(i) → CC(n_cc)

end_ifend_for

� Određivanje povezanih komponenata u neusmerenom grafu

Page 52: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a PrimenPrimen ee obilazaka grafaobilazaka grafa

Obilazak grafa

C D

F E

A B C D

H G F E

A B

H G

ABH CD

GF E

1/16 2/15 3/12 4/7

13/14

9/10 8/11 5/6a)

c)b)

Page 53: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a ObuhvatnaObuhvatna stasta blabla

Obuhvatna stabla

a) b) c) d)

� Obuhvatno stablo ST = (U, E') neusmerenog, povezanog grafa G = (V, E) � sadrži sve čvorove grafa, U = V

� sadrži određen broj grana, E' ⊆ E,tako da su svi čvorovi povezani,ali da nema ciklusa

Page 54: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a ObuhvatnaObuhvatna stasta blabla

Obuhvatna stabla

� Obuhvatno stablo – slobodno stablo

� Za nepovezan graf – obuhvatna šuma STi = (Vi, Ei)

� Generiše se pomoću algoritama obilaska BFS ili DFS� na početku E' prazan skup� kada se dođe do neposećenog čvora u,

dolazna grana (v, u) se uključi u stablo(E' = E' + {(v, u)} u then delu algoritma

� Broj grana u obuhvatnom stablu - n - 1

� Primene

Page 55: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a ObuhvatnaObuhvatna stasta blabla

H

GFED

B C

A

H

GFED

B C

A

H

GFED

B C

Aa) b)

c)

Obuhvatna stabla

DFS stablo

BFS stablo

Page 56: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Minimalna obuhvatna stablaMinimalna obuhvatna stabla

u

x

v

y

UV - U

Obuhvatna stabla

� Cena obuhvatnog stabla – ∑ w(u, v) (u, v) ∈ E'

� MST – obuhvatno stablo čija je cena minimalna

� Ako je U ⊆ V i ako je (u, v) grana najmanje težinetakva da je u ∈ U i v ∈ (V – U),onda postoji MST koje sadrži (u, v)

Page 57: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a PrimPrim --ov algoritamov algoritam

PRIM(G, s)U = {s}E' = ∅while (U ≠ V) do

find (u, v) ⇒ min {w(u, v) : (u ∈ U) and (v ∈ (V- U)) }U = U + {v}E' = E' + {(u, v)}

end_whileMST = (U, E')

Obuhvatna stabla

� Inkrementalno gradi MST počevši od polaznog čvoradodajući po jednu granu i jedan čvor

� Bira granu najmanje težine od onih koje povezuju čvorove koji su već uključeni u MST i čvorove koji još nisu uključeni

Page 58: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a PrimPrim --ov algoritamov algoritam

18

E F

C D

A B

16

5

10

611

21

1933

14

E

F

C

10

61933

14

18

D

E

BA

19 C

16

5

10

611

33

14

18

D

E

BA

F

C

16

5

611

3314

18

E

BA

F

D

16

5

611

21

18

E

BA

F

DC

16

5

6

11

18BA

F

DC

b)a)

c) d)

f)e) 19

19

Obuhvatna stabla

Page 59: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a KruskalKruskal --ov algoritamov algoritamKRUSKAL(G)E' = ∅for each (u, v) ∈ E do

PQ-INSERT(PQ, w(u, v))end_fornum = 0while (num < n - 1) do

w(u,v) = PQ-MIN-DELETE(PQ)if ((u ∈ Ti) and (v ∈ Tj) and (i ≠ j)) then

E' = E' + {(u, v)}Tk = Ti + Tjnum = num + 1

end_ifend_whileMST = (V, E')

Obuhvatna stabla

Page 60: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a KruskalKruskal --ov algoritamov algoritam

Obuhvatna stabla

� Polazi od šume nepovezanih čvorova - podstabala

� Inkrementalno dodaje po jednu granu

� Bira granu koja:� ima najmanju težinu od preostalih, neuključenih� ne zatvara ciklus

� Završava kada se uključi n - 1 grana

� Vremenska složenost - O(e log e)

Page 61: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a KruskalKruskal --ov algoritamov algoritamE F

C

A B

5

18

E F

C D

A B

16

5

10

611

21

1933

14

D

E F

C D

A B

5

6

E F

C D

A B

5

611

E F

C D

A B

16

5

611

18

E F

C D

A B

16

5

611

(D,F)+(B,F)

+

(B,D)-(C,F)

+

(B,C)-(E,F)

+

(A,B)+

a) b)

d)c)

f)e)

Obuhvatna stabla

Page 62: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a OdreOdređivanje dostiđivanje dosti žžnostinosti

Određivanje dostižnosti

� Matrica puta (dostižnosti) P� p[i, j] = 1 ako postoji put od i do j� p[i, j] = 0 ako ne postoji put od i do j

� a[i, k]a[k, j] = 1 ako postoji put od i do j preko k

� aij(2) = ∑ a[i, k]a[k, j] - broj puteva dužine 2 od i do j

� A(2) = A2

� aij(3) = ∑ a[i, k](2)a[k, j] - broj puteva dužine 3 od i do j

� A(3) = A3 , ... , A(m) , ...

Page 63: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a OdreOdređivanje dostiđivanje dosti žžnostinosti

Određivanje dostižnosti

Algoritam za određivanje matrice puta

� Naći B(n) = A +A(2) + ... + A(n) = A +A2 + ... + An

� Članovi matrice puta P se određuju kao:� p[i, j] = 1 ako je b[i, j](n) > 0� p[i, j] = 0 ako je b[i, j](n) = 0

� Optimizacije:� u prostoru - matrica bitova� u vremenu – or i and umesto * i +

� Vremenska složenost - O(n4)

Page 64: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a WarshallWarshall --ov algoritamov algoritamWARSHALL(A)P = Afor k = 1 to n do

for i = 1 to n dofor j = 1 to n do

p[i, j] = p[i, j] or (p[i, k] and p[k, j])end_for

end_forend_for

if (p[i, k] = 1) thenfor j = 1 to n do

p[i, j] = p[i, j] or p[k, j]end_for

end_if

Određivanje dostižnosti

Page 65: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a WarshallWarshall --ov algoritamov algoritam

Određivanje dostižnosti

� Složenost:� vremenska - O(n3)� prostorna - O(n2)

� U neusmerenom grafu može lakše:� naći povezane komponente� prostorna - O(n2)� p[i, j] = p[j, i] = 1 za sve parove i i j

u istoj povezanoj komponenti� p[i, j] = p[j, i] = 0 za sve parove i i j

u različitim povezanim komponentama� vremenska složenost - O(n2)

Page 66: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a NajkraNajkra ćća rastojanjaa rastojanja

v1 v i v j vk

p1i

p ij

p' ij

p jk

Određivanje najkraćih rastojanja

� G = (V, E) – usmereni težinski graf� w(i, j) - težina grane od i do j� w(p1k) = ∑ w(i, j) – dužina puta od 1 do k

� Najkraće rastojanje između čvorova i i j je:� d(i, j) = min{w(p)} po svim putevima od i do j

� ∞ ako j nije dostižan iz i

Page 67: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a NajkraNajkra ćća rastojanjaa rastojanja

A

B E

G

C F

D

5

12

-4

6

1 -93

2

1

Određivanje najkraćih rastojanja

� Grane mogu imati i negativne težine

� Nisu dozvoljeni ciklusi sa negativnom težinom

Page 68: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a FloydFloyd --ov algoritamov algoritam

Određivanje najkraćih rastojanja

� Najkraća rastojanja i putevi između svih parova čvorova

� Ulaz – matrica težina W� w[i, j] = 0 ako je i = j

� w[i, j] = w(i, j) ako je i ≠ j i (i, j) ∈ E

� w[i, j] = ∞ ako je i ≠ j i (i, j) ∉ E

� Izlaz – matrica najkraćih rastojanja D imatrica prethodnika T

� Inicijalizacija matrice prethodnika T

� t[i, j] = 0 ako je i = j ili w[i, j] = ∞� t[i, j] = i ako je i ≠ j ili w[i, j] < ∞

Page 69: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a FloydFloyd --ov algoritamov algoritam

p ik(k-1)

i

k

j

pkj(k-1)

p ij(k)

FLOYD(W)D = Wfor k = 1 to n do

for i = 1 to n dofor j = 1 to n do

if (d[i, j] > d[i, k] + d[k, j]) thent[i, j] = t[k, j]d[i, j] = d[i, k] + d[k, j]

end_ifend_for

end_forend_for

Određivanje najkraćih rastojanja

Princip relaksacije ~ O(n3)

Page 70: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a FloydFloyd --ov algoritamov algoritam

PATH(i, j)if (i = j) then

PRINT(i)return

elseif (t[i, j] = 0) then

PRINT(Nema puta između i i j)else

PATH(i, t[i, j])PRINT(j)

end_ifend_if

Određivanje najkraćih rastojanja

� Rekonstrukcija puta

Page 71: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a FloydFloyd --ov algoritamov algoritam

0

3

∞∞∞∞

8

0

2

5

0

D(1) = 8

0

2

0

1

0

3

1

0

T(1) = 1

0

3

5

8

0

2

5

0

D(2) = 8

0

2

2

1

0

3

1

0

T(2) = 1

0

3

5

7

0

2

5

0

D(3) = 8

0

2

2

3

0

3

1

0

T(3) = 1

5 2

8

3

3

1 2

0

2

0

1

0

3

1

0

T(0) = 0

0

3

∞∞∞∞

8

0

2

5

0

D(0) = ∞∞∞∞

Određivanje najkraćih rastojanja

Page 72: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a FloydFloyd --ov algoritamov algoritam

Određivanje najkraćih rastojanja

� Primena – određivanje središta grafa

� ecc(v) = max {d[i, v] : i ∈ V } - ekscentričnost čvora

� min {ecc(v), v ∈ V } - središte

� Određivanje središta:� naći matricu najkraćih rastojanja D� naći maksimume kolona� naći minimume od ovih maksimuma� čvor koji odgovara minimumu - središte

Page 73: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a DijkstDijkst rraa--in algoritamin algoritam

Određivanje najkraćih rastojanja

� Najkraća rastojanja i putevi između jednog čvora (1) i svih ostalih

� Ne dozvoljava negativne težine grana

� Ulaz – matrica težina grana W

� Izlaz – vektor najkraćih rastojanja D ivektor prethodnika T

� Inicijalizacija:� vektora D sa prvom vrstom matrice W

� vektora T (t[i, j] = 1 ako je w[1, i] < ∞)

Page 74: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a DijkstDijkst rraa--in algoritamin algoritamDIJKSTRA(W)S = {1}for i = 2 to n do

d [i] = w [1, i]if (w [1, i] ≠ ∞) then

t [i] = 1else

t [i] = 0end_if

end_for

for k = 1 to n - 1 dofind min {d [i] : i ∈ (V – S) } S = S + {i}for each j ∈ (V – S) do

if (d [i] + w [i, j] < d [j]) thend [j] = d [i] + w [i, j]t [j] = i

end_ifend_for

end_for

Određivanje najkraćih rastojanja

Page 75: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a DijkstraDijkstra --in algoritamin algoritam

PATH(i)if (i = 1) then

PRINT(1)return

elseif (t [i ] = 0) then

PRINT(Nema puta do i )else

PATH(t [i ])PRINT(i)

end_ifend_if

Određivanje najkraćih rastojanja

� Rekonstrukcija puta od čvora 1 do i

Page 76: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a DijkstDijkst rraa--in algoritamin algoritam

10

60

100

20

1050

1

2 5

43

30

Određivanje najkraćih rastojanja

0 1 11100101 - 30

2 1 11101,2 2 60 30

4 1 4190101,2,4 4 50 30

4 1 3160101,2,4,3 3 50 30

4 1 3160101,2,4,3,5 5 50 30

2 3 4 5 2 3 4 5

∞∞∞∞100

d[i] t[i]

Page 77: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a DijkstDijkst rraa--in algoritamin algoritam

p ix

pxjS

v1

x

v i

v j

d[i]

S

v1

v i

x

Određivanje najkraćih rastojanja

� Dokaz korektnosti:� korektnost postupka relaksacije� korektnost određivanja najkraćeg rastojanja

Page 78: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a DijkstDijkst rraa--in algoritamin algoritam

Određivanje najkraćih rastojanja

� Vremenska složenost:� za matricu susednosti - O(n2)� za liste susednosti - O(e + n log n)

� Algoritam se može iskoristiti i za određivanje:� najkraćih rastojanja između svih parova čvorova � najkraćeg rastojanja između dva čvora

� Bellman-Ford algoritam – ako su dozvoljene igrane sa negativnom težinom

Page 79: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Protok u grafovimaProtok u grafovima� Problem optimizacije protoka u distributivnom sistemu

� Protočni graf – težinski, usmereni graf:� protok f(u, v) i kapacitet grane c(u, v) ≥ 0� izvor S i odredišteT neograničenog kapaciteta

� Ograničenje kapacitetaf(u, v) ≤ c(u, v) za sve (u, v) ∈ E

� Simetrijaf(u, v) = -f(v, u) za sve (u, v) ∈ E

� Održanje protoka:� ∑ f(u, v) = 0 za sve u ∈ V, osim za S i T� ∑ f(S, v) = ∑ f(u, T) za S i T

Protok u grafovima

Page 80: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

Protok u grafovima

� Određivanje najvećeg protoka od S do Tkoji protočni graf G = (V, E) može da propusti uz data ograničenja

� Polazi se od nultih početnih protoka grana

� Iterativno se traži put povećanog protoka

Page 81: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

Protok u grafovima

2/0

B

A

S T7/0

3/05/0

5/0 2/0

B

A

S T7/5

3/05/5

5/5

a)

B

A

S T7/3

3/25/5

5/5

b)

c)

2/2

Page 82: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

Protok u grafovima

� Rezidualni kapacitet grane cf(u, v) = c(u, v) - f(u, v)

� Rezidualni graf Gf = (V, Ef)Ef = { (u,v) : u, v ∈ V , cf(u, v) > 0 }

� U početku rezidualni graf isti kao protočni

� Rezidualni graf može da sadrži i grane kojih nema u protočnom (ef ≤ 2e)

� Traži se put povećanog protoka od S do T u Gf

� Rezidualni kapacitet putacf(p) = min {cf(u, v) : (u,v) ∈ p }

Page 83: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

2

B

A

S T2

35

5 2

B

A

S T4

25

5

5 3

1

a) b)

Protok u grafovima

� Rezidualni graf

Page 84: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

FORD-FULKERSON (G)for each (u,v) ∈ E do

f(u,v) = 0f(v,u) = 0

end_forwhile exists p(S, T) in Gf do

cf(p) = min {cf(u, v) : (u,v) ∈ p}for each (u, v) ∈ p do

f(u, v) = f(u, v) + cf(p)f(v, u) = - f(u, v)

end_forend_while

Protok u grafovima

Page 85: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

16

S 10

13

B

A

7

14

12D

C

T

4

20

a)

16/12

S 10/0

13/0

B

A

7/0

14/0

12/12D

C

T

4/0

20/12

b)

16/12

S 10/0

13/7

B

A

7/7

14/7

12/12D

C

T

4/0

20/19

c)

16/12

S 10/0

13/11

B

A

7/7

14/11

12/12D

C

T

4/4

20/19

d)

4

S 10

B

A

7

12D

C

T

4

1

12

112

3

11

19

e)

16/14

S 10/2

13/9

B

A

7/7

14/11

12/12D

C

T

4/4

20/19

f)

Protok u grafovima

Page 86: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

F/0

B

A

S T1/0

F/0F/0

F/0 F/F

B

A

S T1/0

F/FF/F

F/F

a) b)

Protok u grafovima

� Vremenska složenost zavisi od načina traženja puta povećanog protoka

� Ako se traži preko obilaskom po širini ili dubini,gornja granica O(efmax)

� Edmonds-Karp-ov algoritam traži put od S do Tsa najmanjim brojem grana po BFS - O(en2)

Page 87: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Maksimizacija protokaMaksimizacija protoka

Protok u grafovima

� Generalizacija :� više izvora S1, ..., Sm

� više odredišta T1, …, Tn

� “Superizvor” S i “superodredište” T

� c(S, Si) = ∞ i = 1, …, m

� c(Ti , T) = ∞ i = 1, …, n

� Primeni se Ford-Fulkerson-ov algoritam

Page 88: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Uparivanje grafaUparivanje grafa

Protok u grafovima

� Problemi uparivanja dva skupa “jedan na jedan”

� Bipartitni neusmereni graf G = (V, E):� V = V1 + V2� (u, v) ∈ E ⇒ (u ∈ V1 ⇒ v ∈ V2) ⇒

(u ∈ V2 ⇒ v ∈ V1)

� Upareni skup grana – podskup grana Mtako da je za svaki čvor grafa najviše jedna grana iz M incidentna na njemu

� Maksimalni upareni skup – upareni skupsa najviše grana

Page 89: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Uparivanje grafaUparivanje grafa

Protok u grafovima

� Određivanje maksimalnog uparenog skupa se svodi na maksimizaciju protoka

� Za bipartitni graf G = (V, E)definiše se protočni graf G' = (V', E‘ )� V' = V + {S} + {T}� E' = {(S, u) : u ∈ V1 } + E + {(v, T) : v ∈ V2}� c(u,v) = 1 za sve (u, v) ∈ E'

� Na G' se primeni Ford-Fulkerson-ov algoritam

� Grane (u, v) ∈ E po kojima teče protokulaze u maksimalni upareni skup grana

� fmax = min (n1, n2) ~ O(n e)

Page 90: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Uparivanje grafaUparivanje grafaA 1

B 2

C 3

D 4

11

B 2

C 3

D 4

A

S T

11

1

B 2

C 3

D 4

A

S T

1

B 2

C 3

D 4

A

S T

a) b)

d)c)

Protok u grafovima

Page 91: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a TopoloTopolo šško sortiranjeko sortiranje� Modeliranje složenih projekata

usmerenim acikličnim grafovima

� Usmereni aciklični graf G = (V, E):� čvorovi - događaji� grane - aktivnosti

� Topološki poredak – linearni poredak čvorovatako da se, za svaku granu (u, v) ∈ E ,čvor u pojavljuje ispred čvora v

Topološko sortiranje

Page 92: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a TopoloTopolo šško sortiranjeko sortiranje

Topološko sortiranje

TOP-SORT(G)A = VB = Efor i = 1 to n do

find u ∈ A : din(u) = 0T[i] = uA = A – {u}for all v, (u, v) ∈ B do

B = B - {(u, v)}end_for

end_for

� Vremenska složenost:� za matricu susednosti - O(n2)� za liste susednosti - O(e + n )

Page 93: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a TopoloTopolo šško sortiranjeko sortiranje

Topološko sortiranje

A

C

B

E

D

F

A A B

C

B

E

D

F

a) b)

A B C

C E

D

F

E

D

F

A B C D

c) d)

E

F

A B C D E A B C D E

F

F

e) f)

A B C D E F

g)

Page 94: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Određivanje kritiOdređivanje kriti ččnog putanog puta

Određivanje kritičnog puta

� Težina grane – trajanje aktivnosti

� Čvor – događaj uslovljen završetkom svih aktivnostisimuliranih ulaznim granama,pa mogu početi aktivnosti simulirane izlaznim granama

� Kritični put – put najveće dužine od početnog do završnog čvora

� Najranije vreme početka izlaznih aktivnostiEST[i] = max{EST[j] + w(j, i) : j ∈ P(i) }

� Najkasnije vreme početka izlaznih aktivnostiLST[i] = min{LST[j] - w(i, j) : j ∈ S(i) }

Page 95: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Određivanje kritiOdređivanje kriti ččnog putanog puta

Određivanje kritičnog puta

CRITICAL-PATH(G)TOP-SORT(G)for u = 1 to n do

i = T[u]for each j ∈ P(i) do

EST[i] = max{EST[j] + w(j, i) }end_for

end_forLST[n] = EST[n]for u = n downto 1 do

i = T[u]for each j ∈ S(i) do

LST[i] = min{EST[j] - w(i, j) }end_for

end_forfor i = 1 to n do

L[i] = LST[i] – EST[i]end_for

~ O(e + n)

Page 96: Nelinearne strukture podataka.pdf

Nelinearne strukture podataka Grafovi

Alg

oritm

i i s

truk

ture

pod

atak

a Određivanje kritiOdređivanje kriti ččnog putanog puta

1

3

2

5

4

6

a1=5

a2=3a5=6

a4=9

a3=2

a7=8

a8=4

a9=5

a6=7

019196

014145

11094

1433

0552

0001

LLSTESTi

0a9

1a8

2a7

4a6

1a5

0a4

3a3

1a2

0a1

lAktivnost

Određivanje kritičnog puta