480 likes | 827 Views
İçerik : Gra flar. Tanım Yönlü ve yönsüz graflar Ağırlıklı graflar Gösterim Komşuluk Matrisi Komşuluk Listesi Dolaşma Algoritmaları BFS ( Breath F irst Search ) DFS ( Depth-First Search ). Graflar.
E N D
İçerik: Graflar • Tanım • Yönlü ve yönsüz graflar • Ağırlıklı graflar • Gösterim • Komşuluk Matrisi • Komşuluk Listesi • Dolaşma Algoritmaları • BFS (BreathFirst Search) • DFS (Depth-First Search)
Graflar • Graf, matematiksel anlamda, tepelerden ve bu düğümler arasındaki ilişkiyi gösteren ayrıtlardan oluşan bir kümedir. • Bağlantılı listeler ve ağaçlar grafların özel örneklerindendir. • Bir G grafı V ile gösterilen tepelerden (node veya vertex) ve E ile gösterilen ayrıtlardan (Edge) oluşur. • Her ayrıt iki tepeyi birleştirir. • Her ayrıt, iki bilgi (tepe) arasındaki ilişkiyi gösterir ve (u,v) şeklinde ifade edilir. • (u,v) iki tepeyle gösterilen bir ayrıttır.
Graflar - Örnek • G = (V, E) grafı aşağıda verilmiştir. • V = {A, B, C, D, E, F} • E = {(A, B), (A, D), (B, C), (C, D), (C, E), (D, E)} C B F A D E
Uygulama Alanları • Elektronik devreler • Baskı devre kartları (PCB) • Entegre devreler • Ulaşım Ağları • Otoyol Ağı • Havayolu Ağı • Bilgisayar Ağları • Lokal alan ağları • İnternet • Veritabanları • Entity-relationship diyagram
Graflar – Ayrıt Türleri • Yönlü Ayrıt (Directed Edge) • Sıralı tepe çiftleri ile ifade edilir. • (u, v) ile (v, u) aynı değildir. • İlk tepe orijin ikinci tepe ise hedef olarak adlandırılır. • Yönsüz Ayrıt (Undirected Edge) • Sırasız tepe çiftleri ile ifade edilir. • (u, v) ile (v, u) aynı şeyi ifade ederler. • Yönlü Graf (Directed Graphs) • Bütün ayrıtları yönlü olan graftır. • Digraph şeklinde de ifade edilirler. • Yönsüz Graf (Undirected Graphs) • Tüm ayrıtları yönsüz olan bir graftır.
Graflar - Tanımlar • Komşu(Adjacent): Eğer (u, v) ∈ E ise u ve v tepeleri komşudur. • (A, B) komşudur. • (B, D) komşu değildir. • (C, F) komşu değildir. C B F A D E
Graflar - Tanımlar • Grafın ayrıtları üzerinde ağırlıkları olabilir. Eğer ayrıtlar üzerinde ağırlıklar varsa bu tür graflara ağırlıklı/maliyetli graf (Weighted Graphs) denir. • Ağırlık uygulamadan uygulamaya değişir. • Şehirler arasındaki uzaklık. • Routerler ararı bant genişliği. • İstasyonlar(petrol, elektirik vs.) arasındaki kurulum maliyeti
Graf Gösterimi • Zaman ve yer karmaşıklığı aşağıdaki her iki ifade ile de ölçülür. • Düğüm sayısı = |V| = n • Ayrıt sayısı = |E| = m • Graf gösterimi için iki farklı yol vardır. • Komşuluk matrisi • Komşuluk listesi
Komşuluk Matrisi Gösterimi • Komşuluk Matrisi Gösterimi: • 1 (u,v) E’nin içindeyse • 0 diğer M(u, v) = C B F A D E Bellek? O(n2)
Komşuluk Matrisi Gösterimi • Komşuluk Matrisi Gösterimi (Ağırlıklı Graf): ağırlık(u, v) (u, v) E’nin içindeyse ∞ diğer M(u, v) = 20 C B 10 30 50 F A 5 15 D E
Komşuluk Listesi Gösterimi • Komşuluk Listesi:(Yönsüz Graflar) B D A B A C C B B E D C F A D A C E D E E C D F n + 2*m= O(n+m) Yer?
Komşuluk Listesi Gösterimi • Komşuluk Listesi(Yönlü Graflar) B A D C B B C F A C E D D E D E E F n + m= O(n+m) Yer?
Graf Üzerinde Dolaşma • Graf üzerinde dolaşma grafın düğümleri ve kenarları üzerinde istenen bir işi yapacak veya bir problemi çözecek biçimde hareket etmektir. • Graf üzerinde dolaşma yapan birçok yaklaşım yöntemi vardır. En önemli iki tanesi aşağıda listelenmiştir. • BFS (Breadth First Search) Yöntemi • DFS (Depth First Search ) Yöntemi
Graf Üzerinde Dolaşma • Breath-First Search (BFS): • Başlangıç düğümünden başla ve tüm komşuları ziyaret et. • Daha sonra komşunun komşularını ziyaret et. • Başlangıç düğümünden başlayıp dışa doğru dalga gibi. • Depth-First Search (DFS) • Bir düğümden başla düğümün bir kenarında o kenar üzerinde gidilebilecek en uzak düğüme kadar sürdür. • Geri gel ve düğer kenarı dene • Tüm düğümler gezilene kadar devam et.
Breadth-First Search Algorithm • Maintains the following fields for each u V • color[u]: color of u • WHITE : not discovered yet • GRAY : discovered and to be or being processed • BLACK: discovered and processed • pred[u]: parent of u (NIL of u s or u is not discovered yet) • d[u]: distance of u from s • Processing a vertex scanning its adjacency list
Breadth-First Search Algorithm • BFS(G, s) • for each u V {s} do • color[u] WHITE • pred[u] NIL; d [u] • color[s] GRAY • pred[s] NIL; d [s] 0 • Q {s} • while Q do • u head[Q] • for each v in Adj[u] do • if color[v] WHITE then • color[v] GRAY • pred[v] u • d [v] d [u] 1 • ENQUEUE(Q, v) • DEQUEUE(Q) • color[u] BLACK
Breadth-First Search Sample Graph: FIFO just after queue Qprocessing vertex a -
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b a,b,c,f,e c
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b a,b,c,f,e c a,b,c,f,e,g,h f
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b a,b,c,f,e c a,b,c,f,e,g,h f a,b,c,f,e,g,h,d,i e all distances are filled in after processing e
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b a,b,c,f,e c a,b,c,f,e,g,h f a,b,c,f,e,g,h,d,i g
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b a,b,c,f,e c a,b,c,f,e,g,h f a,b,c,f,e,g,h,d,i h
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b a,b,c,f,e c a,b,c,f,e,g,h f a,b,c,f,e,g,h,d,i d
Breadth-First Search FIFO just after queue Qprocessing vertex a - a,b,c a a,b,c,f b a,b,c,f,e c a,b,c,f,e,g,h f a,b,c,f,e,g,h,d,i i algorithm terminates: all vertices are processed
Breadth-First Search Algorithm • Running time: O(VE) considered linear time in graphs • initialization: (V) • queue operations: O(V) • each vertex enqueued and dequeued at most once • both enqueue and dequeue operations take O(1) time • processing gray vertices: O(E) • each vertex is processed at most once and
Breath-First Search (BFS) • Sonuçların gösterilmesi • Her bir v düğümü için, d[v]’yi (s ve v arasındaki uzaklığı) kaydetmemiz gerekiyor. • “v” ve “s” düğümleri arasındaki uzaklık, “s” den “v” ye giden yol üzerindeki minimum düğüm sayısıdır. • Dolayısıyla d[s] = 0 • Ayrıca aile (parent) düğümünü de tutmamız gerekiyor. v den s ye giderken yoldaki ilk düğüm • pred[s] = 0 (pred predecessor önceki)
Depth-First Search (DFS) • Bir v düğümüne gidildikten sonra v düğümünün bir komşusu seçilir ve ziyaret edilir. • Ardından onun bir komşusu seçilir ve ard arda komşu seçimi yapılarak devam edilir. • Komşu kalmadığında geri dönülür.
Depth-First Search DFS(G) for eachuVdo color[u] white pred[u] NIL time 0 for eachuVdo if color[u] whitethen DFS-VISIT(G, u) DFS-VISIT(G, u) color[u] gray d[u] time time1 for eachv Adj[u] do if color[v] whitethen pred[v] u DFS-VISIT(G, v) color[u] black f[u] time time1 Lecture 14
Depth-First Search A Adjacency Lists A: F GB: A HC: A DD: C FE: C D GF: E:G: :H: B:I: H: B H C G I D E F
Depth-First Search A B H C G I D E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G I D visit(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A dfs(C) C-A C-D B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A dfs(C) C-A C-D B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A dfs(D) D-C D-F dfs(C) C-A C-D B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A dfs(D) D-C D-F dfs(C) C-A C-D B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A dfs(D) D-C D-F dfs(C) C-A C-D B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A dfs(C) C-A C-D B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A dfs(G) B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G dfs(E) E-C E-D E-G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G I D dfs(F) F-E E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G I D E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G I D E F dfs(A) A-F A-G Function call stack:
Depth-First Search A B H C G I D E F Nodes reachable from A: A, C, D, E, F, G