Metricki problemi u teoriji grafova
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,001
On Slideshare
993
From Embeds
8
Number of Embeds
2

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 8

http://www.linkedin.com 6
https://www.linkedin.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Alen Selimbegović Metrički problemi u teoriji grafova Poslijediplomski studij Seminarski rad Prof. Naglić: Grafovi i mrežeZagreb, Siječanj, 2005.
  • 2. SadržajSadržaj.......................................................................................................................................... 2Uvod ............................................................................................................................................. 3Izabrani osnovni pojmovi............................................................................................................. 4 Graf........................................................................................................................................... 4 Povezanost grafa ...................................................................................................................... 6 Posebne vrste grafova............................................................................................................... 7Metrika grafa .............................................................................................................................. 10 Težinski grafovi...................................................................................................................... 11Određivanje najkraćeg i najdužeg puta u grafu.......................................................................... 13 Dijkstrin algoritam ................................................................................................................. 13 Bellman-Ford algoritam ......................................................................................................... 14 A* algoritam........................................................................................................................... 15Stablo minimalne duljine ........................................................................................................... 18 Prim-Jarnikov algoritam......................................................................................................... 18 Kruskalov algoritam............................................................................................................... 19 Usporedba algoritama ............................................................................................................ 19 Steinerov problem .................................................................................................................. 21Ostali metrički problemi............................................................................................................. 22 Problem trgovačkog putnika .................................................................................................. 22 Problem kineskog poštara ...................................................................................................... 24Zadaci ......................................................................................................................................... 25 1. Zadatak ............................................................................................................................... 25 2. Zadatak ............................................................................................................................... 26 3. Zadatak ............................................................................................................................... 27 4. Zadatak ............................................................................................................................... 29 5. Zadatak ............................................................................................................................... 29 6. Zadatak ............................................................................................................................... 34Literatura i ostali izvori .............................................................................................................. 38Metrički problemi u teoriji grafova 2
  • 3. UvodTema seminara izabrani su metrički problemi u teoriji grafova. Na početku definirani supojedini osnovni pojmovi teorije grafova koji se koriste u drugim poglavljima.Slijedeća poglavlja govore o metrici grafa, određivanju najkraćeg i najdužeg puta u grafu,sintezi stabla minimalne dužine i ostalim metričkim problemima u teoriji grafova.Na kraju su predstavljeni i riješeni izabrani zadaci iz teme seminara.Svi primjeri su obrađeni i demonstrirani koristeći Wolfram Mathematica® 5.0 okruženje, čijaje najbolja primjena u simboličkoj matematici i vizualizaciji matematičkih problema.Metrički problemi u teoriji grafova 3
  • 4. Izabrani osnovni pojmoviGrafKartezijev produkt dvaju skupova X i Y definira se kao: X × Y = {( x, y ) x ∈ X ∧ y ∈ Y } .......................................................................................... (1)Skup X × X označava se sa X 2Binarna relacija ρ u skupu X je svaki podskup skupa X 2 tj. svaki skup za koji vrijedi ρ ⊂ X 2 ............................................................................................................................ (2)Neka je V neprazan skup i ρ binarna relacija u skupu V. Uređen par G=(V, ρ) naziva se graf(graph). Elementi skupa V su čvorovi grafa G (vertices, nodes, points), a elementi skupa ρgrane grafa G (edges, arcs, lines). Označavamo čvorove grafa G sa V(G), a grane sa E(G). Primjer 1:<<DiscreteMath`Combinatorica` RandomGraph@n, pD constructs a random labeled graph on n vertices ?RandomGraph with an edge probability of p. An option Type is provided, which can take on values Directed and Undirected, and whose default value is Undirected. Type−>Directed produces a corresponding random directed graph. The usages Random@n, p, DirectedD, Random@n, p, rangeD, and Random@n, p, range, DirectedD are all obsolete. Use SetEdgeWeights to set random edge weights. More… g = RandomGraph[8,.3] Graph:< 6 , 8 , Undirected > ShowGraph@gD displays the graph g. ShowGraph@g, optionsD modifies the ?ShowGraph display using the given options. ShowGraph@g, DirectedD is obsolete and it is currently identical to ShowGraph@gD. All options that affect the look of a graph can be specified as options in ShowGraph. The list of options is: VertexColor, VertexStyle, VertexNumber, VertexNumberColor, VertexNumberPosition, VertexLabel, VertexLabelColor, VertexLabelPosition, EdgeColor, EdgeStyle, EdgeLabel, EdgeLabelColor, EdgeLabelPosition, LoopPosition, and EdgeDirection. In addition, options of the Mathematica function Plot and options of the graphics primitive Arrow can also be specified here. If an option specified in ShowGraph differ from options explicitly set within a graph object, then options specified inside the graph object are used. More…Metrički problemi u teoriji grafova 4
  • 5. ShowGraph[g,VertexNumber→True,VertexNumberColor→Red,VertexNumberPosition→UpperLeft,EdgeColor→Blue] 2 3 14 8 5 7 6 ToOrderedPairs@gD constructs a list of ordered pairs representing the ?ToOrderedPairs edges of the graph g. If g is undirected each edge is interpreted as two ordered pairs. An option called Type that takes on values Simple or All can be used to affect the constructed representation. Type −> Simple forces the removal of multiple edges and self−loops. Type −> All keeps all information and is the default option. More… ToOrderedPairs[g]{{3,2},{4,1},{4,3},{5,4},{6,2},{6,4},{7,6},{8,2},{8,7},{2,3},{1,4},{3,4},{4,5},{2,6},{4,6},{6,7},{2,8},{7,8}}Graf G=(V, ρ) je simetričan ili neorijentiran ako i samo ako ρ je simetrična relacija. GrafG=(V, ρ) je antisimetričan ili orijentiran ako i samo ako ρ je antisimetrična relacija. Druginaziv za orijentirani graf je digraf.Dva grafa G1 i G2 su izomorfni (pišemo G1 ≈ G2 ), ako postoji bijekcija čvorova koja čuvasusjednost.Zanimljivo je da nije nađen P-kompletan algoritam za testiranje izomorfizama grafova, ali nijedokazano niti da je to NP-problem. Pretpostavlja se da ovaj problem ne pripada niti u P-kompletne niti u NP-kompletne, tako da se uvodi nova klasa kompleksnosti problema –izomorfizam-grafa-kompletni problemi. Primjer 2:?IsomorphicQ IsomorphicQ@g, hD yields True if graphs g and h are isomorphic. This function takes an option Invariants −> 8f1, f2, ...<, where f1, f2, ... are functions that are used to compute vertex invariants. These functions are used in the order in which they are specified. The default value of Invariants is 8DegreesOf2Neighborhood, NumberOf2Paths, Distances<. More… ?IsomorphismMetrički problemi u teoriji grafova 5
  • 6. Isomorphism@g, hD gives an isomorphism between graphs g and h if one exists. Isomorphism@g, h, AllD gives all isomorphisms between graphs g and h. Isomorphism@gD gives the automorphism group of g. This function takes an option Invariants −> 8f1, f2, ...<, where f1, f2, ... are functions that are used to compute vertex invariants. These functions are used in the order in which they are specified. The default value of Invariants is 8DegreesOf2Neighborhood, NumberOf2Paths, Distances<. More… g=AddEdges[EmptyGraph[6],{{1,4},{1,5},{1,6},{2,5},{2,6},{3,6},{4,6},{5,6}}] Graph:< 8 , 6 , Undirected > h=AddEdges[EmptyGraph[6],{{4,1},{4,2},{4,3},{6,2},{6,3},{5,3},{1,3},{2,3}}] Graph:< 8 , 6 , Undirected > ShowGraphArray[{g,h}] GraphicsArray IsomorphicQ[g,h] True Isomorphism[g,h] {2,1,5,6,4,3}Povezanost grafaMatrica povezanosti (adjacency matrix) grafa A je kvadratna matrica čiji su stupci označeni sačvorovima grafa, a elementi poprimaju vrijednosti 1 ili 0 na poziciji (vi,vj) ako su čvorovi vi i vjpovezani ili ne. Primjer 3: ToAdjacencyMatrix@gD constructs an adjacency matrix representation for?ToAdjacencyMatrix graph g. An option Type that takes on values All or Simple can be used to affect the matrix constructed. Type −> All is the default, and Type −> Simple ignores any self−loops or multiple edges g may have. ToAdjacencyMatrix@g, EdgeWeightD returns edge weights as entries of the adjacency matrix with Infinity representing missing edges. More… MatrixForm@listD prints with the elements of list arranged in a regular array. ?MatrixForm More…MatrixForm[ToAdjacencyMatrix[g]]Metrički problemi u teoriji grafova 6
  • 7. i0 j 1y z j0 j 0z z 0 0 0 0 1 0 j j z z j0 j 0z z 0 0 0 1 0 0 j j z z j0 j 0z z 0 0 0 1 0 0 j j z z j0 j 0z z 0 0 0 1 0 0 j j z z j1 j 0z z 1 1 1 0 0 0 j j z z j0 j 0z z 0 0 0 0 0 1 j j z z k1 0{ 0 0 0 0 1 0 0 0 0 0 0 0Matrica povezanosti A neorijentiranog grafa je simetrična matrica, tj. A = At . Matricapovezanosti A orijentiranog grafa ima slijedeće svojstvo: (∀i, j ∈ {1,K, n}) aij = 1 ⇒ a ji = 0 (i ≠ j ) ................................................................... (3)Put (path) duljine k je svaki niz grana koji ima slijedeća svojstva: 1º grana e1 polazi iz proizvoljnog čvora, 2º grana ei (i = 2, ..., k) počinje u onom čvoru u kojemu završava grana ui-1.Lanac duljine k je naizmjenični niz čvorova i grana v1, e1, v2, e2,..., vk, ek, vk+1 takav da zasvaki i=1, 2, ..., k čvorovi xi i xi+1 međusobno su različiti i predstavljaju krajnje točke grane ei.Neorijentirani graf je povezan graf (connected graph) ako se svaka dva njegova čvora mogupovezati putem (ili lancem).Dva čvora neorijentiranog grafa kažemo da su susjedni čvorovi (adjacent vertices), ako suspojena granom. Stupanj čvora je broj susjednih čvorova. Neorijentiran graf je regularan(pravilan) stupnja r, ukoliko su stupnjevi svih čvorova jednaki r.Povezan graf stupnja 2 zove se ciklus, petlja ili kontura (circuit). Druga definicija ciklusa jezatvoreni put (put kojemu su isti početni i završni čvor).Eulerov ciklus je ciklus koji prolazi svakom granom točno jedamput. Graf koji ima Eulerovciklus zove se Eulerov graf (dokazuje se da je to ekvivalentno povezanom grafu kojemu su svičvorovi parnog stupnja).Hamiltonov put je put koji sadrži sve čvorove grafa, a Hamiltonov ciklus je ciklus koji sadržisve čvorove grafa.Posebne vrste grafovaGraf bez ciklusa naziva se aciklički graf (acyclic graph).Regularan graf sa n čvorova stupnja n-1 zove se potpun graf (complete graph). Kod njega susvi čvorovi međusobno povezani.Povezani graf koji ne sadrži petlju zovemo stablo (tree). Broj grana stabla je n-1.Metrički problemi u teoriji grafova 7
  • 8. Zvijezda (star) je stablo sa n+1 čvorova koje ima točno jedan čvor stupnja n i sve ostale stupnja1. Primjer 4: CompleteGraph@nD creates a complete graph on n vertices. An option Type that?CompleteGraph takes on the values Directed or Undirected is allowed. The default setting for this option is Type −> Undirected. CompleteGraph@a, b, c,...D creates a complete k−partite graph of the prescribed shape. The use of CompleteGraph to create a complete k−partite graph is obsolete; use CompleteKPartiteGraph instead. More… ShowGraph[CompleteGraph[6],EdgeColor→Blue] Graphics RandomTree@nD constructs a random labeled tree on n vertices. More…?RandomTree ShowGraph[RandomTree[10],EdgeColor→Blue] Graphics Star@nD constructs a star on n vertices, ?Star which is a tree with one vertex of degree n−1. More… ShowGraphArray[Table[Star[n],{n,7}],VertexStyle->Disk[.1],EdgeColor→Blue]Metrički problemi u teoriji grafova 8
  • 9. GraphicsArrayKomplement G grafa G je neorijentirani graf bez petlji, koji ima iste čvorove kao i graf G, pričemu su dva, međusobno različita čvora, susjedna u G ako i samo ako nisu susjedna u G.Unija grafa i njegovog komplementa čini potpuni graf.Graf G je samokomplementan (self-complementary) ako je izomorfan svom komplementu G . Primjer 5:g1 = RandomGraph[8,.3,EdgeColor→Red] Graph:< 9 , 8 , Undirected > GraphComplement@gD gives the complement of graph g. More… ?GraphComplement g2 = GraphComplement[g1] Graph:< 17 , 8 , Undirected > ShowGraphArray[{ g1, SetGraphOptions[g2,EdgeColor→Blue], SetGraphOptions[GraphSum[g1,g2], Join[Edges[g2],{EdgeColor→Blue}]]},VertexStyle→Disk[.05]] GraphicsArrayMetrički problemi u teoriji grafova 9
  • 10. Metrika grafaS obzirom na povezanost čvorova povezanog neorjentiranog grafa G, možemo definiratimetriku na ovaj način: • d (vi , vi ) = 0 ∀ vi ∈ V (G ) • d (vi , v j ) = u ∀ vi , v j ∈ V (G ) ∧ vi ≠ v j , gdje je u duljina najkraćeg puta od vi do vj.Lako je dokazati da ovako definrana metrika zadovoljava aksiome metrike:1º d (vi , v j ) = 0 ⇔ i = j (jednoznačnost)2º d (vi , v j ) = d (v j , vi ) (simetričnost)3º d (vi , vk ) + d (vk , v j ) ≥ d (vi , v j ) (nejednakost trokuta)Možemo proširiti definiciju metrike i za nepovezane grafove. Za čvorove vi i vj koji nisumeđusobno povezani, definiramo: d (vi , v j ) = +∞ ................................................................................................................... (5)Ekscentričnost čvora vi definiramo kao maksimalnu udaljenost svih čvorova grafa G od čvoravi: eks(vi ) = max {d (vi , v j ) v j ∈ V (G )}................................................................................. (6)Dijametar grafa G definiramo kao maksimalnu udaljenost dva čvora u grafu: d (G ) = max {eks(vi ) vi ∈ V (G )} ...................................................................................... (7)Odnosno: d (G ) = max {d (vi , v j ) vi , v j ∈ V (G )} ............................................................................... (8)Radijus grafa G definiramo kao minimalnu ekscentričnost svih čvorova grafa G: r (G ) = min {eks(vi ) vi ∈ V (G )} ....................................................................................... (8)Kraće pišemo: r (G ) = min max d (vi , v j ) .............................................................................................. (9) vi∈V ( G ) v j ∈V ( G ) Primjer 6:g1 = RandomGraph[12,.2] Graph:< 16 , 12 , Undirected > ShowGraph[g1,EdgeColor→Blue]Metrički problemi u teoriji grafova 10
  • 11. Graphics Eccentricity@gD gives the eccentricity of each vertex v of ?Eccentricity graph g, the maximum length among all shortest paths from v. More… Eccentricity[g1] {4,4,3,3,4,3,3,3,4,5,5,5} Max[Eccentricity[g1]] 5 Diameter@gD gives the diameter of graph g, the maximum length, among all ?Diameter pairs of vertices in g, of a shortest path between each pair. More… Diameter[g1] 5 Min[Eccentricity[g1]] 3Radius@gD gives the radius of graph g, the minimum eccentricity of any vertex of g. ?Radius More… Radius[g1] 3Težinski grafoviUkoliko svakom bridu e ∈ E (G ) pridružimo težinu w(e), graf G, zajedno sa funkcijom w, zovese težinski graf. Ukoliko su težine pozitivni realni brojevi, a graf je bez petlji, možemodefinirati udaljenost kao metriku na slijedeći način: • duljina puta je suma svih težina na putu, • udaljenost čvorova je duljina minimalnog puta između dva čvora, • udaljenost čvora od samog sebe je 0.Ako postavimo sve težine na 1, dobijamo metriku istuvjetnu kao i kod grafa bez težina.Ako imamo cikluse ili negativne težine, onda ovako definirana udaljenost nije metrika. Primjer 7:?SetEdgeWeightsMetrički problemi u teoriji grafova 11
  • 12. SetEdgeWeights@gD assigns random real weights in the range @0, 1D to edges in g. SetEdgeWeights accepts options WeightingFunction and WeightRange. WeightingFunction can take values Random, RandomInteger, Euclidean, or LNorm@nD for nonnegative n, or any pure function that takes two arguments, each argument having the form 8Integer, 8Number, Number<<. WeightRange can be an integer range or a real range. The default value for WeightingFunction is Random and the default value for WeightRange is @0, 1D. SetEdgeWeights@g, eD assigns edge weights to the edges in the edge list e. SetEdgeWeights@g, wD assigns the weights in the weight list w to the edges of g. SetEdgeWeights@g, e, wD assigns the weights in the weight list w to the edges in edge list e. More…g1=SetEdgeWeights[RandomGraph[8,.15],WeightingFunction→RandomInteger,WeightRange→{10,40}] Edges[g1,EdgeWeight] {{{1,3},14},{{1,4},28},{{3,6},24},{{2,7},35},{{4,8},27}}w1=Last/@Sort[Transpose[{Edges[g1],GetEdgeWeights[g1]}]] {14,11,21,32}ShowGraph[g1,EdgeLabel→w1,VertexNumber→True,EdgeColor→Blue] 2 3 14 1 28 354 27 8 24 5 7 6 GraphicsMetrički problemi u teoriji grafova 12
  • 13. Određivanje najkraćeg i najdužeg puta u grafuČesto se u primjeni teorije grafova treba odrediti najkraći put između dva čvora u težinskomgrafu. Najčešće primjene su u određivanju najkraće rute između dva grada (gdje se može tražitii put sa najmanjom potrošnjom goriva ili slično). Isto tako postoje i primjene gdje se tražinajduži put između dva čvora – tipično kod određivanja kritičnog puta u mrežnom planiranju.Najpopularniji algoritam ovog tipa je Dijkstrin algoritam (Edsger Dijkstra, Nizozemska, 1930-2002).Dijkstrin algoritamDijkstrin algoritam vrijedi i za orijentirane i za neorijentirane povezane grafove sanenegativnim težinama grana. Ovaj algoritam nam daje najkraći put od zadanog čvora do svihpreostalih čvorova u grafu. Opišimo algoritam u pseudo-kodu.Algoritam 1:Dijkstra_najkraći_put(Graf g, Čvor v0)početak -- početno stanje za svaki vi iz Čvorovi(g) radi početak d[vi]:= ∞ p[vi]:=Ø kraj d[v0] := 0 –- duljina puta od čvora v0 do čvora v0 je nula S := Ø -- inicijalno nismo odradili niti jedan čvor Q := Čvorovi(g) -- ostali su svi čvorovi za odraditi -- glavna petlja sve dok Q ≠ Ø radi početak izaberi u iz Q takav da je –- nađimo pivot čvor d[u] = min {d[vi]} za svaki vi iz Q S := S ∪ {u} –- pivot čvor proglasimo odrađeni Q := Q {u} –- pivot čvor izbacimo iz popisa neodrađenih za svaki vi iz Q radi –- svim preostalim čvorovima ažuriraj udaljenosti ako je d[vi] > d[u]+w(u,vi) onda početak p[v i] := u -– promijenio se prethodni čvor d[vi] := d[u]+w(u,vi) – promijenila se udaljenost kraj krajkrajMetrički problemi u teoriji grafova 13
  • 14. Proceduri predajemo graf g i čvor v0 od kojeg želimo naći sve najkraće putove. Kao rezultatalgoritma u polju d dobivamo duljine najkraćeg puta do pojedinog, a u polju p prethodnikapojedinog čvora u najkraćim putovima.U polju S čuvamo riješene, a u polju Q neriješene čvorove. U varijabli u imamo trenutni čvorod kojega gledamo udaljenosti (pivot čvor).U inicijalizaciji postavljamo da je udaljenost do svakog čvora beskonačna (tako da prvi put dotog čvora bude kraći od početne vrijednosti i da nema prethodnika), osim do početnog koja jetrivijalno nula. Skup riješenih čvorova početno je prazan (S := Ø), a skup neriješenih sviostali čvorovi (Q := Čvorovi(g)).U glavnoj petlji za slijedeći pivot čvor, izaberemo čvor sa minimalnom evidentiranomudaljenošću (d[u] = min {d[vi]} za svaki vi iz Q) , dodajemo ga u skupriješenih (S := S ∪ {u}) i izbacujemo iz skupa neriješenih (Q := Q {u}).Svakom čvoru vi iz Q koji je bliži čvoru u nego što je za dati čvor evidentirano (ako jed[vi] > d[u]+w(u,vi) onda), pridružimo čvor u kao prethodnika (p[v i] := u) iudaljenost od početnog čvora preko čvora u (d[vi] := d[u]+w(u,vi)).Ukoliko želimo da Dijkstrin algoritam radi i za nepovezane grafove, onda trebamo dodatikontrolu u traženju sljedećeg pivot čvora, da ukoliko su sve preostale evidentirane udaljenostibeskonačne, da se izađe iz petlje.Kompleksnost Dijkstrinog algoritama može se lako pronaći. Vanjska glavna petlja je reda O(n),jer se svaki čvor točno jednom uzima za pivota. Za svaki pivot čvor gledamo susjedne čvorovei određujemo nove udaljenosti (kroz cijelu glavnu petlju radimo sve skupa m puta), tako da jekompleksnost sada O(n+m). Najveći posao je u određivanju slijedećeg pivot čvora ikompleksnost ovisi o strukturi podataka koju koristimo za polje udaljenosti. Ako je poljejednostavna linearna struktura, onda je traženje pivot čvora kompleksnosti O(n) i ukupnakompleksnost algoritma je O(n2). Ako je polje složenije strukturu, (npr. red sa prioritetima,Fibonacci heap, gdje je kompleksnost traženja pivot čvora O(ln(n)), konačna kompleksnostalgoritma je O(m+n·ln(n)).Ako želimo kompleksnost izraziti ovisnu samo o broju čvorova, moramo uzeti najteži slučaj, ato je potpuni graf. Kompleksnost Dijkstrinog algoritama tada iznosi O(n2).Bellman-Fordov algoritamU slučaju kad imamo i grane sa negativnim težinama, Dijkstrin algoritam moramo zamijeniti saBellman-Fordovim algoritmom.Algoritam 2:Bellman_Ford_najkraći_put(Graf g, Čvor v0)početak -- početno stanje za svaki vi iz Čvorovi(g) radiMetrički problemi u teoriji grafova 14
  • 15. početak d[vi]:= ∞ p[vi]:=Ø kraj d[v0] := 0 –- duljina puta od čvora v0 do čvora v0 je nula Q := Čvorovi(g) -- ostali su svi čvorovi za odraditi -- glavna petlja za i od 1 do Broj_čvorova(g) radi početak za svaki ei(u,v) iz Grane(g) radi ako je d[v] > d[u]+w(u,v) onda početak p[v] := u -– promijenio se prethodni čvor d[v] := d[u]+w(u,v) – promijenila se udaljenost kraj kraj za svaki ei(u,r) iz Grane(g) radi ako je d[r] > d[u]+w(u,r) onda vrati krivo – postoji ciklus sa negativnom težinomkrajKompleksnost Bellman-Fordovog algoritma je O(m·n) (vanjska petlja se vrti n puta, a unutarnjam puta), a za najgori slučaj potpunog grafa ona iznosi O(n3).Primjena ovog algoritma je u RIP protokolu (Routing Information Protocol) koji omogućavarouterima na Internetu dinamičko prilagođivanje promjenama mrežnih veza.A* algoritamOvaj heuristički algoritam koristi se u slučajevima gdje imamo jako velik broj čvorova, ali ugrafu postoji struktura koja nam daje sugestije u kojem je smjeru najvjerojatniji najkraći put(tipično u planarnim grafovima). Ukoliko A* algoritam nikad ne pretpostavlja veću od stvarneudaljenosti od ciljnog čvora, onda on svojim heurističkim rješenjem daje ujedno i optimalniput.Algoritam 3:A_zvijezda_najkraći_put(Graf g, Čvor v0, Čvor vx)početak -- početno stanje S := Ø -- inicijalno nismo odradili niti jedan čvor Q := {v0} -- krećemo od prvog čvora f[v0] := 0 -- glavna petlja sve dok Q ≠ Ø radiMetrički problemi u teoriji grafova 15
  • 16. početak izaberi u iz Q takav da je –- nađimo slijedeći pivot čvor f[u] = min {f[vi]} za svaki vi iz Q Q := Q {u} –- pivot čvor izbacimo iz popisa neodrađenih S := S ∪ {u} – ubacimo pivot čvor u popis odrađenih ako je u = vx onda završi za svaki vi povezan sa u radi početak h_t[vi] := Heuristički(vi) -- procjena udaljenosti do ciljnog čvora g_t[vi] := g[u]+w(u,vi) f_t[vi] := g_t[vi]+g_t[vi] ako je vi iz Q i f_t[vi] < f[vi] onda ignoriraj ako je vi iz S i f_t[vi] < f[vi] onda ignoriraj inače Q := Q {vi} S := S {vi} h[vi] := h_t[vi] -- procjena udaljenosti do ciljnog čvora g[vi] := g_t[vi] f[vi] := f_t[vi] Q := Q ∪ {vi} p[vi] := u krajkraj Primjer 8:g=SetEdgeWeights[RandomGraph[8,.4],WeightingFunction→RandomInteger,WeightRange→{1,20}] Graph:< 12 , 8 , Undirected >weights=Last/@Sort[Transpose[{Edges[g],GetEdgeWeights[g]}]] {18,6,14,2,11,9,20,15,19,4,4,4}ShowGraph[g,EdgeLabel→weights, VertexNumber→True]Metrički problemi u teoriji grafova 16
  • 17. 2 3 1 11 18 19 14 24 9 15 6 8 20 4 4 5 4 7 6 Graphics ShortestPath@g, start, endD finds a shortest path between vertices start ?ShortestPath and end in graph g. An option Algorithm that takes on the values Automatic, Dijkstra, or BellmanFord is provided. This allows a choice between using Dijkstras algorithm and the Bellman−Ford algorithm. The default is Algorithm −> Automatic. In this case, depending on whether edges have negative weights and depending on the density of the graph, the algorithm chooses between Bellman−Ford and Dijkstra. More…sp=ShortestPath[g,4,3] {4,1,7,5,3}edges=Partition[sp,2,1] {{4,1},{1,7},{7,5},{5,3}}ShowGraph[Highlight[g,{edges},HighlightedEdgeColors→{Red}],EdgeLabel→weights, VertexNumber→True] 2 3 1 11 18 19 14 24 9 15 6 8 20 4 4 5 4 7 6 GraphicsGetEdgeWeights[g,edges] {18,9,6,4}Total[GetEdgeWeights[g,edges]] 37Metrički problemi u teoriji grafova 17
  • 18. Stablo minimalne duljineRazapinjujuće stablo (spanning tree) nekog grafa G je svako stablo (podgraf grafa G) kojisadrži sve čvorove iz G. Razapinjujuće stablo minimalne duljine (minimum spanning tree) jerazapinjujuće stablo sa minimalnom sumom težina na pripadajućim granama.Algoritam za ovaj problem prvi je pronašao Otakar Borůvka kao metodu za konstrukcijuefikasne električne mreže u Češkoj 1926. godine.Prim-Jarnikov algoritamPrim-Jarnikov algoritam je jedan od najpopularnijih algoritama koji određuju stablo minimalneduljine.Algoritam 4:Prim_Jarnik_stablo_minimalne_duljine(Graf g)početak -- početno stanje Izaberi bilo koji v iz Čvorovi(g) d[v]:=0 za svaki vi iz Čvorovi(g){v} radi d[v]:= ∞ t := Ø Q := Heap(d, Čvorovi(g),{})—bez grana -- glavna petlja sve dok Q ≠ Ø radi početak izvuci minimalan (u,e) iz Q takav da je –- nađimo čvor d[u] = min {d[vi]} za svaki vi iz Q t := t ∪ (u,e) –- dodajemo nađeni čvor i granu u stablo Q := Q {u} –- čvor izbacimo iz popisa neodrađenih za svaki vi iz Q povezan sa u radi –- svim preostalim čvorovima ažuriraj udaljenosti ako je d[vi] > w(u,vi) onda Ažuriraj_heap(d[vi], vi,(u,vi)) – ažuriraj heap krajkrajKoristeći binarni heap, Prim-Jarnikov algoritam je kompleksnosti O((m+n) ·ln(n)), a koristećiFibonacci heap, kompleksnost algoritma je O(m+n·ln(n)). Sa potpunim grafom, u prvomslučaju kompleksnost je O(n2·ln(n)), a u drugom O(n2).Metrički problemi u teoriji grafova 18
  • 19. Kruskalov algoritamKruskalov algoritam je još jedan od algoritama koji određuju stablo minimalne duljine.Algoritam 5:Kruskalov_stablo_minimalne_duljine(Graf g)početak -- početno stanje za svaki vi iz Čvorovi(g) radi c[v]:={v} –- skup pojedinačnih stabala t := Ø –- izlazno stablo Q := Heap(w(Grane(g)), Grane(g)) -- glavna petlja sve dok Q ≠ Ø radi početak izvuci minimalan (u,v) iz Q takav da je –- nađimo čvor w(u,v) = min { w((u,v)i)} za svaku granu (u,v)i iz Q Q := Q {(u,v)} –- čvor izbacimo iz popisa neodrađenih ako je c[v]≠c[u] onda početak t := t ∪ (u,e) –- dodajemo nađenu granu u stablo spoji pojedina stabla c[v],c[u] u jedno c[z] kraj krajkrajKompleksnost Kruskalovog algoritama je O(m·ln(n)).Usporedba algoritamaOsnovne razlike između tri algoritama su u slijedećem: • Prim-Jarnikov algoritam u svakom koraku proširuje označeno stablo sa najbližim čvorom, • Kruskalov algoritam u svakom koraku spaja dva najbliža stabla sa novom granom, • Borůvkin algoritam u svakom koraku spaja sva najbliža stabla sa novom granom.Kruskalov i Borůvkin algoritam se mogu unaprijediti tako da njihova kompleksnost budeO(m·α(n)), gdje je α inverzna Ackermanova funkcija. Primjer 9:Metrički problemi u teoriji grafova 19
  • 20. g=SetEdgeWeights[RandomGraph[8,.4],WeightingFunction→RandomInteger,WeightRange→{1,20}] Graph:< 12 , 8 , Undirected > weights=Last/@Sort[Transpose[{Edges[g],GetEdgeWeights[g]}]] {18,6,14,2,11,9,20,15,19,4,4,4} ShowGraph[g,EdgeLabel→weights, VertexNumber→True] 2 3 1 11 18 19 14 24 9 15 6 8 20 4 4 5 4 7 6 Graphics MinimumSpanningTree@gD uses Kruskals ?MinimumSpanningTree algorithm to find a minimum spanning tree of graph g. More… st=MinimumSpanningTree[g] Graph:< 7 , 8 , Undirected > edges=Edges[st] {{2,7},{5,7},{5,8},{6,8},{1,7},{3,5},{1,4}}ShowGraph[Highlight[g,{edges},HighlightedEdgeColors→{Red}],EdgeLabel→weights, VertexNumber→True] 2 3 1 11 18 19 14 24 9 15 6 8 20 4 4 5 4 7 6Metrički problemi u teoriji grafova 20
  • 21. Graphics GetEdgeWeights[g,edges] {18,9,6,2,4,4,4} Total[GetEdgeWeights[g,edges]] 47Steinerov problemUkoliko je u sintezi stabla minimalne duljine dozvoljeno uvođenje novih čvorova, može sedobiti i efikasnije rješenje od stabla minimalne duljine. Problem određivanja ovakve najkraćemreže zove se Steinerov problem.U praksi su najzanimljivije varijante Euklidskog Steinerovog problema i Rectlinear Steinerovogproblema, gdje su u prvoj dozvoljene grane pod svim kutevima, a u drugoj samo grane podpravim kutem (tzv. Manhattan metrika). Slika 1:Algoritmi za traženje Steinerovog stabla su NP-kompletni i samim time dovelo je do razvojaraznih heurističkih algoritama koji daju aproksimativna rješenja.Metrički problemi u teoriji grafova 21
  • 22. Ostali metrički problemiProblem trgovačkog putnikaJoš jedan od bitnih metričkih problema u teoriji grafova traženje je optimalnog Hamiltonovogciklusa. Ako se predstavi graf kao trgovačka mreža, grane kao moguće veze između gradova, atežine kao udaljenosti gradova, onda se ovaj problem može predstaviti kao želja trgovačkogputnika, koji mora obići sve gradove, za traženjem najkraćeg puta.Koliko god izgledao jednostavan kao i prethodni, ovaj problem je NP-kompletan. Postoji velikiniz heurističkih algoritama koji se većinom vode na nalaženje neoptimalnog Hamiltonovogciklusa i naknadno modificiranje u svrhu postizanja manje ukupne duljine.Sa druge strane razvilo se veliki broj paralelnih i distribuiranih algortama i sustava kojeegzaktno riješavaju ovaj problem. Trenutni rekord je rješavanje problema na 24.978 gradova uŠvedskoj 2004. godine, a prethodni rekord je postavljen na 15.112 gradova u Njemačkoj 2001.godine. U toku je rješavanje problema na 1.904.711 gradova na Zemlji. Na slici je dano jednoheurističko rješenje.Slika 1Metrički problemi u teoriji grafova 22
  • 23. Na kompletnom grafu sa n čvorova (npr. n gradova na mapi) postoji (n-1)!/2 mogućihHamiltonovih ciklusa, tako da složenost trivijalnog algoritma, koji provjerava sve moguće ture,na kompletnom grafu sa n čvorova (npr. n gradova na mapi) iznosi O(n!). Held i Karp su 1962.pronašli algoritam složenosti O(n22n) i do danas nije pronađen algoritam manje složenosti. Primjer 10:g=SetEdgeWeights[RandomGraph[7,.5],WeightingFunction→RandomInteger,WeightRange→{10,40}] Graph:< 12 , 7 , Undirected > HamiltonianQ@gD yields True if there exists ?HamiltonianQ a Hamiltonian cycle in graph g, or in other words, if there exists a cycle that visits each vertex exactly once. More… HamiltonianQ[g] True TravelingSalesman@gD finds an optimal traveling salesman tour in graph g. More… ?TravelingSalesman t=TravelingSalesman[g] {1,5,2,4,6,3,7,1} edges=Partition[t,2,1] {{1,5},{5,2},{2,4},{4,6},{6,3},{3,7},{7,1}} ShowGraph[Highlight[g,{edges},HighlightedEdgeColors→{Red}], VertexStyle→Disk[.05]] Graphics SetOptions[Arrow,HeadShape→Automatic,HeadScaling→Absolute,HeadCenter→.8]{HeadScaling→Absolute,HeadLength→Automatic,HeadCenter→0.8,HeadWidth→0.5,HeadShape→Automatic,ZeroShape→Automatic} weights=Last/@Sort[Transpose[{Edges[g],GetEdgeWeights[g]}]] {17,20,14,13,39,10,30,40,12,31,31,27} Show[GraphicsArray[ Block[{$DisplayFunction=Identity}, {ShowGraph[g,EdgeLabel→weights,VertexColor→Black,VertexStyle→Disk[.07]],Graphics[{PointSize[.06],ShowGraph[g,VertexColor→Black,VertexStyle→Disk[.07]][[1]],ShowGraph[FromOrderedPairs[edges],EdgeColor→Red][[1]]/.Point[l_] {}},AspectRatio→Automatic,PlotRange→All] }Metrički problemi u teoriji grafova 23
  • 24. ] ]] 17 10 20 12 39 30 31 40 13 14 31 27 GraphicsArrayGetEdgeWeights[g,edges] {30,14,40,31,27,39,31} Total[GetEdgeWeights[g,edges]] 212Problem kineskog poštaraKineski poštar mora od poštanskog ureda proći svakom ulicom i vratiti se u ured. U teorijigrafova ovaj problem se svodi na traženje optimalnog ciklusa koji sadrži sve grane grafa.Iza ovaj problem postoji veliki niz raznih algortama. Većina se svodi na rješavanje problema uEulerovom grafu koji se dobije konstrukcijom iz postojećeg grafa. Na takvom grafu traži seEulerov ciklus.I ovaj problem u općem slučaju je NP-kompletan, a kompleksnost jako ovisi o broju čvorovaneparnog stupnja.Metrički problemi u teoriji grafova 24
  • 25. Zadaci1. Zadatak[8.4.2] Drvo sa n ≥ 3 čvorova ima dijametar 2 ako i samo ako je zvijezda.Dokaz se provodi u dva smjera:1º Svaka zvijezda je dijametra 2. Neka je v0 čvor stupnja n, a v1, ..., vn čvorovi stupnja 1 u zvijezdi T [ n +1] sa n+1 čvorova. d (v0 , vi ) = 1 ∀ i = 1, ..., n d (vi , v j ) = d (vi , v0 ) + d (v0 , v j ) = 2 ∀ i, j = 1, ..., n ⎧0 ∀ i = j ⎪ d (vi , v j ) = ⎨1 ∀ i = 0 ∧ j = 1, ..., n ∨ i = 1, ..., n ∧ j = 0 ⎪2 ∀ i, j = 1, ..., n ⎩ d [G] = max d(vi, vj) = 22º Svako stablo dijametra 2 je zvijezda. Dokaz provodimo matematičkom indukcijom. • n = 3, jedino stablo je ujedno i zvijezda, dijametra 2: Zadatak 1: g=RandomTree[3] Graph:< 2 , 3 , Undirected > ShowGraph[g,EdgeColor→Blue,VertexStyle→Disk[.08]] Diameter[g] 2 • Pretpostavimo da tvrdnja vrijedi za graf sa n čvorova, dokažimo da vrijedi za graf sa n+1 čvorova. Kako stablo T [ n +1] sa n+1 čvorova ima n grana, možemo odabrati čvor xn koji je spojen sa ostatkom stabla sa samo jednom granom. Ukoliko iz stabla T izbacimo taj čvor sa pripadajućom granom dobijamo stablo T [ n ] koje je dijametra 2, a po pretpostavku indukcije T [ n ] je zvijezda. Neka je v0 čvor stupnja n, a v1, ..., vn-1 čvorovi stupnja 1 u zvijezdi T [ n ] . Da je čvor vn u stablu T [ n+1] povezan granom sa čvorom vi , i ∈ {1, ...., n − 1} , udaljenost d (vn , v j ) = 3 ∀ j = 1, ..., n ∧ j ≠ i , odnosnoMetrički problemi u teoriji grafova 25
  • 26. d [T [ n+1] ] = 3 . Znači čvor vn u stablu T [ n+1] povezan je granom sa čvorom v0 time je i T [ n+1] zvijezda. QED2. Zadatak[8.4.3] Pokaži da samokomplementarni grafovi ( n > 1 ) imaju dijametar 2 ili 3.1º Ako graf G ima dijametar 1, onda je onda je kompletan, a njegov komplement graf bez grana, tako da graf G nije samokomplementaran graf.2º Pokažimo samokomplementarne grafove sa dijametrom 2 i 3: Zadatak 2: g5=Select[Graphs[5],SelfComplementaryQ] { Graph:< 5 , 5 , Undirected > , Graph:< 5 , 5 , Undirected > } ShowGraphArray[g5] GraphicsArray Map[Diameter,g5] {3,2} g8=Select[Graphs[8],SelfComplementaryQ] { Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > , Graph:< 14 , 8 , Undirected > } ShowGraphArray[Take[g8,3]] GraphicsArray Map[Diameter,g8] {3,3,3,2,3,3,3,3,2,3}3º Dokažimo da ako je d (G ) ≥ 3 ⇒ d (G ) ≤ 3Metrički problemi u teoriji grafova 26
  • 27. Ako vrijedi d (G ) ≥ 3 , postoje čvorovi vi i vj između kojih je udaljenost minimalno 3 d (vi , v j ) ≥ 3 . U komplementarnom grafu G ova dva čvora su susjedna d (vi , v j ) = 1 (kako u grafu G nije grana (vi, vj), onda je u grafu G ). Gledajmo sada ostale čvorove. Niti jedan preostali čvor vk ne smije biti povezan sa oba čvora vi i vj (jer bi postojao put vi, vk, vj duljine 2 što se kosi sa pretpostavkom d (vi , v j ) ≥ 3 ). Znači da je i u komplementarnom grafu G , vk povezan barem sa jednim od čvorova vi , v j . Neka je skup Vi skup čvorova povezanih sa vi , a V j skup čvorova povezanih sa v j . Vrijedi da je skup svih čvorova komplementarnog grafa G V = Vi ∪ V j ∪ {v i , v j } Za udaljenosti čvorova u komplementarnom grafu imamo: • d (vl , vm ) = 1 za l = i i m = j • d (vl , vm ) = 1 za l = i i m ∈ Vi • d (vl , vm ) ≤ 2 za l = i i m ∈ V j , jer postoji put vm , v j , vi • d (vl , vm ) = 1 za l = j i m ∈ V j • d (vl , vm ) ≤ 2 za l = j i m ∈ Vi , jer postoji put vm , vi , v j • d (vl , vm ) ≤ 3 za l ∈ Vi i m ∈ V j , jer postoji put vm , vi , v j , vm Kako smo ovime pokrili sve kombinacije čvorova, slijedi da je i d (G ) ≤ 3 .4º Kada je G samokomplementaran graf, grafovi G i G su izomorfni, tako da vrijedi d (G ) = d (G ) . Kako sa druge strane vrijedi tvrdnja 3º, slijedi da d (G ) ≤ 35º Iz točki 1º, 2º i 4º slijedi da je dijametar samokomplementarnog grafa 2 ili 3. QED3. Zadatak[8.4.8] Dokazati da u proizvoljno orijentiranom potpunom grafu (turniru) postoji čvor iz kojeg su svi čvorovi grafa dostupni putem ne dužim od 2.Dokaz provodimo matematičkom indukcijom.1º Tvrdnja vrijedi za turnir TU [ 2 ] TU[2] sa brojem čvorova n = 2.2º Pretpostavimo da tvrdnja vrijedi za svaki turnir TU[n] sa n čvorova. Dokažimo da tvrdnja vrijedi za turnir TU[n+1] sa n+1 čvorova. Izdvojimo čvor vn+1 i pripadajuće grane. Preostali podgraf TU[n] je turnir sa n čvorova. Prema pretpostavci matematičke indukcije u podgrafu TU[n] postoji čvor (označimo ga sa v0) koji ima svojstvo: d (v0 , vi ) ≤ 2 ∀ i = 1, ..., nMetrički problemi u teoriji grafova 27
  • 28. Podijelimo ostale čvorove u T[n] na čvorove koji su od v0 udaljeni 1 (skup V1) i one koji su udaljeni 2 (skup V2). Put duljine 2 od v0 do svakog čvora iz V2 vodi preko nekog čvora iz V1, znači za svaki čvor v j ∈ V2 postoji čvor vi ∈ V1 za kojeg je d (vi , v j ) = 1 . U ovisnosti od usmjerenja grana prema čvoru vn+1 imamo slijedeća 3 slučaja: 1. Grana ev0 ,vn +1 od čvora v0 je usmjerena prema čvoru vn+1. U ovom slučaju d(v0,vn+1) = 1, tj. d (v0 , vk ) ≤ 2 ∀ k = 1, ..., n, n + 1 . Znači da je čvor v0 čvor sa traženim svojstvom. 2. Grana ev0 ,vn +1 od čvora vn+1 je usmjerena prema čvoru v0 i postoji čvor vi ∈ V1 kod kojeg je grana evi ,vn +1 usmjerena prema čvoru vn+1. Onda je: d (v0 , vn+1 ) = d (v0 , vi ) + d (vi , vn+1 ) = 1 + 1 = 2 , tj. d (v0 , vk ) ≤ 2 ∀ k = 1, ..., n, n + 1 . Znači da je čvor v0 čvor sa traženim svojstvom. 3. Grana ev0 ,vn +1 od čvora vn+1 je usmjerena prema čvoru v0 i za sve čvorove vi ∈ V1 grana evi ,vn +1 je usmjerena prema čvoru vi. Znači da je: d (vn+1 , v0 ) = 1 d (vn+1 , vi ) = 1 ∀ vi ∈ V1 Kako za svaki čvor v j ∈ V2 postoji čvor vi ∈ V1 za kojeg je d (vi , v j ) = 1 slijedi: d (vn+1 , v j ) = d (vn+1 , vi ) + d (vi , v j ) = 1 + 1 = 2 ∀ v j ∈ V2 , odnosno d (vn+1 , vk ) ≤ 2 ∀ k = 0, ..., n Znači da je čvor vn+1 čvor sa traženim svojstvom. Kako smo sa ove tri varijante pokrili sve moguće slučaje i u svakom našli čvor sa traženim svojstvom (u 1. i 2. slučaju v0, a u 3. slučaju vn+1), ovim smo dokazali teorem i za korak matematičke indukcije. QED Zadatak 3:Tournaments[n_]:=Select[ListGraphs[n,Binomial[n,2],Directed],CompleteQ[MakeUndirected[#]]&]TournamentQ[g_Graph]:=OrientedQ[g]&&CompleteQ[MakeUndirected[g]]TO=OrientGraph[CompleteGraph[6]] Graph:< 15 , 6 , Directed >SetOptions[Arrow,HeadShape→Automatic,HeadCenter→1,HeadScaling→Automatic];ShowGraph[TO,EdgeColor→Blue,VertexStyle→Disk[.03]]Metrički problemi u teoriji grafova 28
  • 29. Graphicsdist=Map[BreadthFirstTraversal[TO,#,Level]&,Range[1,V[TO]]]{{0,2,4,1,3,2},{1,0,3,2,2,1},{1,1,0,1,2,1},{2,1,3,0,2,1},{1,1,1,1,0,2},{1,2,2,2,1,0}} Max/@dist {4,3,2,3,2,2}4. Zadatak[8.4.9] Na jednom turniru svaki igrač je igrao protiv svakog i nijedna utakmica (partija) nije završena neriješeno. Dokazati da postoji učesnik, koji će da spomene sve ostale takmičare, ako spomene one koje je pobijedio, kao i one koji su bili pobijeđeni od strane takmičara koje je on pobijedio.Postavimo graf kojemu su čvorovi učesnici turnira a grane partije usmjerene od stranepobjednika prema poraženom. Dobijemo orijentirani potpuni graf – turnir. Prema prethodnomzadatku u turniru postoji čvor iz kojeg su svi čvorovi grafa dostupni putem ne dužim od 2. Toznači da postoji učesnik koji je pobijedio neke učesnike (najkraći put u grafu jednak 1), a sveostale učesnike su pobijedili učesnici koje je on pobijedio (najkraći put u grafu jednak 2).5. Zadatak[8.4.11] Želimo da izgradimo vodovodnu mrežu bez kontura između određenog broja gradova. Za izgradnju mreže konkuriše veći proj preduzeća. Posao može da radi i veći broj preduzeća u kooperaciji ali između svaka dva grada mora da radi samo jedno preduzeće. Zato od svih konkurenata tražimo plan sa naznakom troškova izgradnje pojedinih veza. Na osnovu predatih planova sastaviti najekonomičniji plan izgradnje.Postavimo graf G kojemu su čvorovi gradovi, a grane ponude svakog poduzeća za izgradnjudionice između dva čvora (grada) koje veže grana. Za težinu pojedine grane postavimo cijenuizgradnje te dionice (ukoliko postoji ponuda od više poduzeća za pojedinu dionicu, ostavimogranu sa najmanjom težinom). Najekonomičniji plan nam daje razapinjuće stablo grafa G,minimalne duljine. Zadatak 5:Metrički problemi u teoriji grafova 29
  • 30. g = SetEdgeWeights[RandomGraph[8,.3],WeightingFunction→RandomInteger,WeightRange→{20,40}] Graph:< 12 , 8 , Undirected > g=SetGraphOptions[g,Append[Edges[g],EdgeColor→Red]] Graph:< 12 , 8 , Undirected > Edges[g,EdgeWeight]{{{1,3},23},{{3,4},36},{{1,6},33},{{5,6},24},{{2,7},27},{{5,7},34},{{6,7},37},{{2,8},31},{{3,8},28},{{4,8},31},{{5,8},25},{{7,8},30}} gw=Last/@Sort[Transpose[{Edges[g],GetEdgeWeights[g]}]] {23,33,27,31,36,28,31,24,34,25,37,30}ShowGraph[g,EdgeLabel→gw,VertexStyle→Disk[Large],VertexNumberColor→White,VertexNumber→True,VertexNumberPosition→Center] 2 3 23 1 31 36 28 27 4 8 31 33 25 30 5 7 34 24 37 6 Graphics h = SetGraphOptions[SetEdgeWeights[RandomGraph[8,.3],WeightingFunction→RandomInteger,WeightRange→{10,80}]] Graph:< 9 , 8 , Undirected > h=SetGraphOptions[h,Append[Edges[h],EdgeColor→Blue]] Graph:< 9 , 8 , Undirected > Edges[h,EdgeWeight]{{{4,5},31},{{1,6},24},{{3,6},36},{{4,6},67},{{2,7},37},{{3,7},76},{{5,7},67},{{6,7},42},{{3,8},39}} hw=Last/@Sort[Transpose[{Edges[h],GetEdgeWeights[h]}]] {24,37,36,76,39,31,67,67,42}ShowGraph[h,EdgeLabel→hw,VertexStyle→Disk[Large],VertexNumberColor→White,VertexNumber→True,VertexNumberPosition→Center] 2 3 1 39 37 4 8 76 36 24 31 67 5 7 67 42 6Metrički problemi u teoriji grafova 30
  • 31. Graphics i =SetEdgeWeights[RandomGraph[8,.3],WeightingFunction→RandomInteger,WeightRange→{1,90}] Graph:< 8 , 8 , Undirected > i=SetGraphOptions[i,Append[Edges[i],EdgeColor→Green]] Graph:< 8 , 8 , Undirected > Edges[i,EdgeWeight]{{{1,3},25},{{2,5},3},{{3,5},58},{{1,6},11},{{3,6},59},{{4,6},65},{{5,6},32},{{1,7},87}} iw=Last/@Sort[Transpose[{Edges[i],GetEdgeWeights[i]}]] {25,11,87,3,58,59,65,32}ShowGraph[i,EdgeLabel→iw,VertexStyle→Disk[Large],VertexNumberColor→White,VertexNumber→True,VertexNumberPosition→Center] 2 3 25 1 3 4 8 58 87 59 11 65 5 7 32 6 Graphics j=GraphSum[g,h,i] Graph:< 29 , 8 , Undirected > Edges[j,EdgeWeight]{{{1,3},23},{{3,4},36},{{1,6},33},{{5,6},24},{{2,7},27},{{5,7},34},{{6,7},37},{{2,8},31},{{3,8},28},{{4,8},31},{{5,8},25},{{7,8},30},{{4,5},31},{{1,6},24},{{3,6},36},{{4,6},67},{{2,7},37},{{3,7},76},{{5,7},67},{{6,7},42},{{3,8},39},{{1,3},25},{{2,5},3},{{3,5},58},{{1,6},11},{{3,6},59},{{4,6},65},{{5,6},32},{{1,7},87}} jw=Last/@Sort[Transpose[{Edges[j],GetEdgeWeights[j]}]]{23,25,11,24,33,87,3,27,37,31,36,58,36,59,76,28,39,31,65,67,31,24,32,34,67,25,37,42,30}ShowGraph[j,EdgeLabel→jw,VertexStyle→Disk[Large],VertexNumberColor→White,VertexNumber→True,VertexNumberPosition→Center]Metrički problemi u teoriji grafova 31
  • 32. 2 3 1 25 23 31 36 39 28 3 37 27 4 8 58 31 76 87 59 36 33 24 11 31 25 30 67 65 5 7 67 34 32 24 42 37 6 GraphicsAlenRemoveMultipleEdges[g_Graph]:=ChangeEdges[g,Map[First,Split[Sort[Edges[g,All]],(First[#1] First[#2])&]]] j=AlenRemoveMultipleEdges[j] Graph:< 19 , 8 , Undirected > Edges[j,EdgeWeight]{{{1,3},23},{{1,6},11},{{1,7},87},{{2,5},3},{{2,7},27},{{2,8},31},{{3,4},36},{{3,5},58},{{3,6},36},{{3,7},76},{{3,8},28},{{4,5},31},{{4,6},65},{{4,8},31},{{5,6},24},{{5,7},34},{{5,8},25},{{6,7},37},{{7,8},30}} jw=Last/@Sort[Transpose[{Edges[j],GetEdgeWeights[j]}]] {23,11,87,3,27,31,36,58,36,76,28,31,65,31,24,34,25,37,30}ShowGraph[j,EdgeLabel→jw,VertexStyle→Disk[Large],VertexNumberColor→White,VertexNumber→True,VertexNumberPosition→Center] 2 3 1 23 31 36 28 3 27 4 8 58 31 76 87 36 11 31 25 30 65 5 7 34 24 37 6 GraphicsMetrički problemi u teoriji grafova 32
  • 33. k=MinimumSpanningTree[Edges[j,EdgeWeight],j] Graph:< 7 , 8 , Undirected > Edges[k,EdgeWeight] {{{2,5},1},{{1,6},1},{{1,3},1},{{5,6},1},{{5,8},1},{{2,7},1},{{4,5},1}}ShowGraph[k,VertexStyle→Disk[Large],VertexNumberColor→White,VertexNumber→True,VertexNumberPosition→Center] 2 3 1 4 8 5 7 6 Graphics l=GraphIntersection[j,k] Graph:< 7 , 8 , Undirected > Edges[l,EdgeWeight]{{{1,3},23},{{1,6},11},{{2,5},3},{{2,7},27},{{4,5},31},{{5,6},24},{{5,8},25}} lw=Last/@Sort[Transpose[{Edges[l],GetEdgeWeights[l]}]] {23,11,3,27,31,24,25}ShowGraph[l,EdgeLabel→lw,VertexStyle→Disk[Large],VertexNumberColor→White,VertexNumber→True,VertexNumberPosition→Center] 2 3 1 23 3 27 4 8 11 31 25 5 7 24 6 Graphics Total[GetEdgeWeights[l]] 144Metrički problemi u teoriji grafova 33
  • 34. 6. Zadatak[8.4.1] Date su tri posude: prva, čija zapremina iznosi 8 litara, napunjena je tečnošću, druga i treća koje imaju 5 odnosno 3 litra su prazne. Presipajući tečnost iz jedne u drugu od ovih posuda, postići na najbrži način da se u prvoj posudi nalazi 4 litra i u drugoj takođe 4 litra tečnosti.Postavimo usmjereni graf kojemu su čvorovi stanja u posudama, a usmjerene grane dozvoljenekombinacije presipavanja. Ako čvorove označimo sa stanjima posuda (x, y, z), onda je traženorješenje minimalan put između čvora (8, 0, 0) i (4, 4, 0). Zadatak 6:a=8; b=5;c=3; a_poc=8; b_poc=0; c_poc=0 0?GridGraph GridGraph@n, mD constructs an n∗ m grid graph, the product of paths on n and m vertices. GridGraph@p, q, rD constructs a p∗q∗r grid graph, the product of GridGraph@p, qD and a path of length r. More… g=GridGraph[b+1,c+1] Graph:< 38 , 24 , Undirected > cs=Quotient[Range[0,(b+1) (c+1)-1],b+1] {0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3} bs=Mod[Range[0,(b+1) (c+1)-1],b+1] {0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5} as=8-cs-bs {8,7,6,5,4,3,7,6,5,4,3,2,6,5,4,3,2,1,5,4,3,2,1,0} s=100 as+10 bs+cs{800,710,620,530,440,350,701,611,521,431,341,251,602,512,422,332,242,152,503,413,323,233,143,53} Stanje[ul_Integer]:=Block[ {cx=Quotient[ul-1,b+1],bx=Mod[ul-1,b+1],ax=8-cx-bx},100 ax+10 bx+cx] Cvor[ul_Integer]:= Block[ { at=Quotient[ul,100],bt=Quotient[ul-at*100,10],ct=ul-100*at-10*bt}, bt+ct*6+1 ] Stanje/@Cvor/@s{800,710,620,530,440,350,701,611,521,431,341,251,602,512,422,332,242,152,503,413,323,233,143,53} g=OrientGraph[SetVertexLabels[g,s]] Graph:< 38 , 24 , Directed > g=DeleteEdges[g,Edges[g]] Graph:< 0 , 24 , Directed > Potez[ul_Integer]:= Block[ { at=Quotient[ul,100],bt=Quotient[ul-at*100,10],ct=ul-100*at-10*bt}, {If[at>0, If[bt<b, If[at>=b-bt,{100*at+10*bt+ct,100*( at-(b-bt))+10*b+ct},{100*at+10*bt+ct,100*0+10*(at+b)+ct}]]], If[at>0, If[ct<c, If[at>=c-ct,{100*at+10*bt+ct,100*( at-(c-ct))+10*bt+c},{100*at+10*bt+ct,100*0+10*bt+at+ct}]]],Metrički problemi u teoriji grafova 34
  • 35. If[bt>0, If[at<a, If[bt>=a-at,{100*at+10*bt+ct,100*a+10*(bt-(a-at))+ct},{100*at+10*bt+ct,100*(at+bt)+10*0+ct}]]], If[bt>0, If[ct<c, If[bt>=c-ct,{100*at+10*bt+ct,100*at+10*(bt-(c-ct))+c},{100*at+10*bt+ct,100*at+10*0+bt+ct}]]], If[ct>0, If[at<a, If[ct>=a-at,{100*at+10*bt+ct,100*a+10*bt+(ct-(a-at))},{100*at+10*bt+ct,100*(at+ct)+10*bt+0}]]], If[ct>0, If[bt<b, If[ct>=b-bt,{100*at+10*bt+ct,100*at+10*b+(ct-(b-bt))},{100*at+10*bt+ct,100*at+10*(bt+ct)+0}]]] }] potezi=DeleteCases[Flatten[Map[Potez,s],1],Null]{{800,350},{800,503},{710,350},{710,413},{710,800},{710,701},{620,350},{620,323},{620,800},{620,602},{530,350},{530,233},{530,800},{530,503},{440,350},{440,143},{440,800},{440,413},{350,53},{350,800},{350,323},{701,251},{701,503},{701,800},{701,710},{611,251},{611,413},{611,701},{611,602},{611,710},{611,620},{521,251},{521,323},{521,701},{521,503},{521,620},{521,530},{431,251},{431,233},{431,701},{431,413},{431,530},{431,440},{341,251},{341,143},{341,701},{341,323},{341,440},{341,350},{251,53},{251,701},{251,233},{251,350},{602,152},{602,503},{602,800},{602,620},{512,152},{512,413},{512,602},{512,503},{512,710},{512,530},{422,152},{422,323},{422,602},{422,413},{422,620},{422,440},{332,152},{332,233},{332,602},{332,323},{332,530},{332,350},{242,152},{242,143},{242,602},{242,233},{242,440},{242,251},{152,53},{152,602},{152,143},{152,350},{503,53},{503,800},{503,530},{413,53},{413,503},{413,710},{413,440},{323,53},{323,503},{323,620},{323,350},{233,53},{233,503},{233,530},{233,251},{143,53},{143,503},{143,440},{143,152},{53,503},{53,350}} putevi=Map[{Cvor[First[#]],Cvor[Last[#]]}&,potezi]{{1,6},{1,19},{2,6},{2,20},{2,1},{2,7},{3,6},{3,21},{3,1},{3,13},{4,6},{4,22},{4,1},{4,19},{5,6},{5,23},{5,1},{5,20},{6,24},{6,1},{6,21},{7,12},{7,19},{7,1},{7,2},{8,12},{8,20},{8,7},{8,13},{8,2},{8,3},{9,12},{9,21},{9,7},{9,19},{9,3},{9,4},{10,12},{10,22},{10,7},{10,20},{10,4},{10,5},{11,12},{11,23},{11,7},{11,21},{11,5},{11,6},{12,24},{12,7},{12,22},{12,6},{13,18},{13,19},{13,1},{13,3},{14,18},{14,20},{14,13},{14,19},{14,2},{14,4},{15,18},{15,21},{15,13},{15,20},{15,3},{15,5},{16,18},{16,22},{16,13},{16,21},{16,4},{16,6},{17,18},{17,23},{17,13},{17,22},{17,5},{17,12},{18,24},{18,13},{18,23},{18,6},{19,24},{19,1},{19,4},{20,24},{20,19},{20,2},{20,5},{21,24},{21,19},{21,3},{21,6},{22,24},{22,19},{22,4},{22,12},{23,24},{23,19},{23,5},{23,18},{24,19},{24,6}} e=AddEdges[g,putevi] Graph:< 106 , 24 , Directed > SetOptions[Arrow,HeadShape→Automatic,HeadScaling→Absolute,HeadCenter→.8];ShowGraph[e,VertexStyle→Disk[.04],VertexLabelColor→White,VertexLabelPosition→Center, EdgeColor→Blue]Metrički problemi u teoriji grafova 35
  • 36. 503 413 323 233 143 53 602 512 422 332 242 152 701 611 521 431 341 251 800 710 620 530 440 350 Graphics stanjeput=Map[Stanje,ShortestPath[e,Cvor[800],Cvor[440]]] {800,350,323,620,602,152,143,440} cvorput=Cvor/@stanjeput {1,6,21,3,13,18,23,5} tura=Partition[stanjeput,2,1] {{800,350},{350,323},{323,620},{620,602},{602,152},{152,143},{143,440}} cvortura=Partition[cvorput,2,1] {{1,6},{6,21},{21,3},{3,13},{13,18},{18,23},{23,5}}ShowGraph[Highlight[e,{cvortura},HighlightedEdgeColors→{Red}],VertexStyle→Disk[.04],VertexLabelColor→White,VertexLabelPosition→Center, EdgeColor→Blue] 503 413 323 233 143 53 602 512 422 332 242 152 701 611 521 431 341 251 800 710 620 530 440 350 Graphicsf=DeleteVertices[DeleteEdges[e,Complement[Edges[e],cvortura]],Complement[Range[1,(b+1) (c+1)],cvorput]]Metrički problemi u teoriji grafova 36
  • 37. Graph:< 7 , 8 , Directed >ShowGraph[f,VertexStyle→Disk[.04],VertexLabelColor→White,VertexLabelPosition→Center, EdgeColor→Blue] 323 143 602 152 800 620 440 350 GraphicsMetrički problemi u teoriji grafova 37
  • 38. Literatura i ostali izvori[1] Dragoš Cvetković, Mirko Milić: Teorija grafova i njene primene, Naučna knjiga, Beograd, 1977[2] www.wikipedia.com[3] www.mathworld.wolfram.com[4] www.diku.dk/geosteiner[5] Darko Veljan; Kombinatorika sa teorijom grafova, Školska knjiga, Zagreb, 1989[6] Bernard Chazelle: A Minimum Spanning Tree Algorithm with Inverse-Ackermann Type Complexity, 1999Original ovog dokumenta i pripadajuća Mathematica bilježnica nalazi se na: • www.selimbegovic.com/alen.htmlMetrički problemi u teoriji grafova 38