600 likes | 860 Views
1. 2. 3. 4. Directed Graphs (Yonlu Graflar). Directed graph (digraph) G=(V,E) V: vertices (nodes) E: edges (directed edges,arcs). path. Bir digraftaki path bir dizi vertices den olusur oyleki bir birini izleyen iki vertex arasinda bir edge var v 1 ->v 2 ->v 3 ……… ->v n-1 ->v n
E N D
1 2 3 4 Directed Graphs (Yonlu Graflar) • Directed graph (digraph) G=(V,E) • V: vertices (nodes) • E: edges (directed edges,arcs) Algoritma Analizi
path • Bir digraftaki path bir dizi vertices den olusur oyleki bir birini izleyen iki vertex arasinda bir edge var • v1->v2->v3 ……… ->vn-1->vn • vertex v1 den vertex vn e bir path (yol) • Length of path (yolun uzunlugu) • Path uzerindeki arc larin sayisi • v den v ye (v bir vertex) olan yolun uzunlugu 0 dir • Simple path: • Eger path in uzerindeki tum vertices (ilk ve son vertex ler haric) farkli ise Algoritma Analizi
Labeled Digraph • Bazen graph in vertices veya arc larina faydali bilgiler (label) eklemek mumkun • Label isim, maliyet veya faydali herhangi bir bilgi olabilir. Algoritma Analizi
a 2 1 a b b b b a 3 4 a Labeled Digraph Algoritma Analizi
Directed Graph larin Temsili • Digraph lari temsil etmek icin cesitli data structure lar kullanilabilir • Secilen data structure arc lara ve vertices lara uygulanan operationlara baglidir • Adjacency Matrix • Adjacency List Algoritma Analizi
Adjacency Matrix • G = (V,E), V={1,2,3, ………n} • G nin Adjacency Matrix A • A nxn boyutlu bir boolean matrix • A[i,j] = true ancak ve ancak vi den vj ye bir arc var • Bazen true 1 le false 0 ile temsil edilir • Labeled Adjacency Matrix • A[i,j] vi den vj giden arc in label ini gosterir Algoritma Analizi
a 2 1 a b b b b a 3 4 a Digraph AdjacencyMatrix Algoritma Analizi
Adjacency List • Adjacency matrix kullaniminin dezavantaji • storage • Matrix uzerinde islem • O(n) arc a sahip digraphlar icin O(n2) den daha iyi performansli algoritmalarin elde edilmesini imkansizlastirir • Bu dezavantajlari gidermek icin Adjacency List kullanilabilir Algoritma Analizi
Adjacency List • G = (V,E) • HEAD • HEAD[i] vertex i icin Adjacency List e bir pointer • Storage • Vertices lerin sayi artisi arc larin sayisiyle orantilidir • Dezavantaj • Vertex i den vertex j ye bir arc olup olmadigini tespit etmek icin O(n) zaman gerekli Algoritma Analizi
1 2 3 4 Adjacency List 2 3 1 4 2 2 3 4 3 Algoritma Analizi
Single Source Shortest Paths Problem • Yaygin path finding problem (directed graflar icin) • G = (V,E) • Her bir arc bir negative olmayan bir label a sahip (cost fonksiyon) • Bir vertex source olarak belirlenir • Problem: Verilen source dan diger her bir vertex e olan en kisa yolun cost ini hesaplamak Algoritma Analizi
Dijkstra nin shortest path algorithm Procedure Dijkstra; # vertex 1 den diger vertexlere olan en kisa yolun cost ini # hesaplar Begin (1) S:={1} (2) for i:=2 to n do (3) D[i]:=C[1,i]; # initialize D (4) for i:= 1 to n-1 do begin (5) choose a vertex w in V-S such that D[w] is a minimum (6) add w to S; (7) for each vertex v in V-S do (8) D[v]:= min(D[v],D[w]+C[w,v]) end end Algoritma Analizi
Dijkstra devam… • G = (V,E) • V = {1,2,3, ……,n} ve vertex 1 source • C iki boyutlu bir dizi ve C[i,j] vertex i den vertex j ye gitmek icin maliyet (cost). Eger vertex i den vertex j ye bir arc yoksa C[i,j] = (herhangi bir maliyetten cok daha buyuk bir sayi) • Her bir adimda D[i] vertex i ye olan en kisa yolun uzunlugunu gosterir Algoritma Analizi
Ornek 1 10 100 30 2 5 50 10 60 4 3 20 Algoritma Analizi
Dijkstra’s Algorithm • Greedy Algorithm • Local olarak en iyi olan sey global olarak da en iyi dir. • Dijkstra’s shortest path algorithm bir greedy algoritmadir. Algoritma Analizi
Running Time of Dijkstra’s Algorithm • Eger adjacency matrix kullanirsak • (7) ve (8) O(n) zaman alir ve n-1 kere execute edilir. Dolaysisiyle toplam zaman O(n2) olur • Eger e n2 den oldukca kucukse, digraph i temsil icin adjacency list ve V-S kumesindeki vertices leri temsil etmek icin partially ordered tree kullanmak faydali olur. • (7) ve (8), w nin adjacency list i taranarak ve priority queue deki mesafelerin guncellenmesiyle saglanir. Toplam olarak e tane guncelleme olur ve herbiri O(logn) zaman alir. • Toplam zaman O(elogn) olur Algoritma Analizi
All-Pairs Shortest Paths Problem (APSP) • Directed Graph G=(V,E) • Her bir sirali cift vertices (v,w) icin vertex v den vertex w olan en kisa yolun mesafesini hesapla • Dijkstra’s algoritmasi her bir vertex source kabul edilerek APSP problem cozulebilir (algoritma n kere cagrilir) • Ikinci cozum • Floyd’s Algorithm Algoritma Analizi
Floyd’s Algorithm procedure Floyd (var A: array[1..n, 1..n] of real, C: array[1..n, 1..n] of real) # Floyd computes shortest path matrix A given cost matrix C begin for i:=1 to n do for j:=1 to n do A[i,j] := C[i,j] for i:= 1 to n do A[i,i]:=0 for k:=1 to n do for i:=1 to n do for j:=1 to n do if A[i,k] + A[k,j] < A[i,j] then A[i,j]:=A[i,k] + A[k,j] end Algoritma Analizi
8 2 1 3 2 2 3 5 Ornek (Floyd’s Algorithm) A0[i,j] A1[i,j] A2[i,j] A3[i,j] Algoritma Analizi
Floyd’s Algorithm vs Dijkstra’s Algorithm • Her ikisi de Adjacency Matrix kullanarak • APSP problemini O(n3) zamanda cozer • Eger e, graftaki edge sayisi, n2 den oldukca kucukse, Dijkstra nin algoritmasi O(nelogn) zamanda cozum getirebilir ( O(n3) den daha iyi oldugu umulur) Algoritma Analizi
En kisa yol uzerindeki vertex lerin belirlenmesi procedure shortest (var A: array[1..n, 1..n] of real, C: array[1..n, 1..n] of real) # C nxn boyutunda cost matrix, A nxn boyutunda en kisa yol matrix, # P nxn boyutunda shortest path lerdeki ara vertex leri tutar begin for i:=1 to n do for j:=1 to n do A[i,j] := C[i,j] P[i,j]:=0 for i:= 1 to n do A[i,i]:=0 for k:=1 to n do for i:=1 to n do for j:=1 to n do if A[i,k] + A[k,j] < A[i,j] then { A[i,j]:=A[i,k] + A[k,j] P[i,j]:=k } end Algoritma Analizi
Shortest Path Printing procedurepath(i,j: integer) begin k:=P[i,j]; if k = 0 then return path(i,k) writeln(k) path(k,j) end Algoritma Analizi
8 2 1 3 2 2 3 5 Shortest path uzerindeki vertexler Yukaridaki digraph icin P matrix i. Algoritma Analizi
Transitive Closure • vertex i den vertex j ye bir yol var mi • Cozum • Floyd’un algoritmasini biraz degistirerek • vertex i den vertex j ye bir yol var eger • Numarasi k-1 den buyuk olmayan vertex lerden gecen vi den vj ye bir yol var veya • Numarasi k-1 den buyuk olmayan vertexlerden gecen vi den vk ya bir yol ve numarasi k-1 den buyuk olmayan vertexlerden gecen vk dan vj ye bir yol var # A bir boolean matriks olmak uzere Ak[i,j]=Ak-1[i,j] || Ak-1[i,k] && Ak-1[k,j] Algoritma Analizi
Transitive Closure • Warshall Algorithm procedure Warshall(var A: array[1..n,1..n] of boolean; C: array[1..n,1..n] of boolean) # Warshall makes A the transitive closure of C begin for i:=1 to n do for j:=1 to n do A[i,j]:=C[i,j] for k:=1 to n do for i:=1 to n do for j:=1 to n do if A[i,j]=false then A[i,j]:=A[i,k] and A[k,j] end Algoritma Analizi
Bir Digraph in Center (merkezini) bulmak • G=(V,E) • Vertex v nin eccentricity si max { w den v ye olan minimum uzunluklu yolun uzunlugu) W in V • G nin center i • Minimum eccentricity e sahip vertex Algoritma Analizi
a 1 b 2 1 2 c d 3 4 5 e Ornek Center: vertex d Algoritma Analizi
a 1 b 2 1 2 c d 3 4 5 e G nin APSP cost matrix i ve nin vc ye uzakligi Graph G G nin center i vd Algoritma Analizi
Digraph larin Traversal i • Digraph (directed graph) larla ilgili bir cok problemlerin cozumunde yonlu graf in vertex ve arc larini sistematik bir sekilde dolasmayi gerektirir • Graph traversal • Depth-First Search • Bread-First Search Algoritma Analizi
Depth-First Search (DFS) A B F E D C G Algoritma Analizi
Depth-First Search (DFS) A B F E D C G Algoritma Analizi
Depth-First Search (DFS) A B F E D C G Algoritma Analizi
Depth-First Search (DFS) A B F E D C G Algoritma Analizi
A B F E D C G Depth-First Search (DFS) Algoritma Analizi
Depth First Search procedure dfs(v:vertex) w: vertex begin mark[v]:=visited for each vertex w on L[v] do if mark[w] = unvisited then dfs(w) end Algoritma Analizi
DFS nin Runnig Time • Her bir vertex in adjacency list ine bir kez bakilir • Vertex lerin adjacency list lerinin uzunluklari toplami e dir (graf in arc sayisi kadardir) • Dolayisle DFS algorithm O(e) dir. Algoritma Analizi
Depth-First Spanning Forest A B F E D C G Algoritma Analizi
Depth-First Spanning Forest A B F E D C G Algoritma Analizi
Depth-First Spanning Forest A B F E D C G Algoritma Analizi
Depth-First Spanning Forest A B F E D C G Algoritma Analizi
DFST 2 DFST 1 Depth-First Spanning Forest A B F E D C G DFSP: Depth First Spanning Tree Algoritma Analizi
Tree 2 Tree 1 Depth-First Spanning Forest A B F E D C G Tree edge: Foresteki her bir edge denir Algoritma Analizi
Depth-First Spanning Forest in Bulunmasi for v:=1 to n do mark[v]:=unvisited for v:=1 to n do if mark[v]=unvisited then dfs(v) Algoritma Analizi
Directed Acyclic Graphs • Directed Acyclic Grapg (DAC) • Cycle a sahip olmayan directed graph • Tree lerden daha genel fakat gelisiguzel graf lardan daha az genel Algoritma Analizi
A A C C B B D D E E A C B D E Tree Cycle sahipdigraph DAG Algoritma Analizi
DAG • DAG lar ortak subexpressionlara sahip aritmetik ifadelerin syntactic yapilarini gosterimde kullanilabilirler * + * * + + + c a b f e ((a+b)*c+((a+b)+e)*(e+f))*((a+b)*c) nin DAG ‘i Algoritma Analizi
Acyclic Testi • Verilen bir directed graph G nin acyclic (bir cycle icerip icermediginin) testi • DFS(depth first search) kullanilarak digrapin acyclic olup olmadigi karar verilebilir • Eger DFS sirasinda bir back edge e rastlanilirsa graph in bir cycle a sahip oldugu anlasilir Algoritma Analizi
Her bir cycle bir back arc icerir v u Algoritma Analizi
Topological Sort • Buyuk capli proje bir dizi alt projelere bolunur • Bu alt projeler belli bir siraya gore tamamlanmali • Ornegin alt proje C baslamasi A ve B nin tamamlanmasindan once olamaz • DAG bu tip durumlari modellemek icin kullanilabilir Algoritma Analizi
Topological Sort C1 C3 C5 C2 C4 Topological Sort: DAG in vertices lerine linear ordering olacak sekilde sirala oyleki eger vertex i den vertex j ye bir arc varsa, linear ordering de i, j den once gelir.Yukaridaki DAG a gore C1,C2,C3,C4,C5 bir linear ordering dir. Algoritma Analizi