Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanYağmur Adıvar Değiştirilmiş 6 yıl önce
1
Çizge gösterimleri G = (V, E) çizgesinin komşuluk listesi gösterimi
V sayıda listenin bir dizisi(array), V deki her köşe için bir tane liste Her Adj[u] listesi u köşesinin bağlı olduğu tüm v köşelerini içerir (rastgele sıralı olarak) Yönlü veya yönsüz çizgeler için kullanılabilir 1 2 5 / 1 2 5 4 3 2 1 5 3 4 / 3 2 4 4 2 5 3 / 5 4 1 2 Yönsüz çizge
2
Komşuluk listesi gösteriminin özellikleri
Tüm komşuluk listelerinin toplamı Yönlü çizgelerde: Her (u, v) kirişi listede sadece bir defa olacağından sayısına Yönsüz çizgelerde: Her uv kirişi listede 2 defa olacağından sayısna eşittir 1 2 3 4 Directed graph E 1 2 5 4 3 2 E Undirected graph
3
Komşuluk listesi gösteriminin özellikleri
Hafiza gereksinimi (V + E) Tercih edildiği çizgeler Seyrek çizgelerde: E << V 2 Eksik yönü u ile v arasında kiriş olup olmadığını hızlı kontrol etmenin bir yolu yoktur u ya komşu tüm köşelerin listesini bulmak için gerekli süre: (degree(u)) (u, v) E için kontrol süresi: O(degree(u)) 1 2 5 4 3 Undirected graph 1 2 3 4 Directed graph
4
Çizge gösterimi G = (V, E) çizgesinin komşuluk matrisi gösterimi
Köşelerin numaraları 1, 2, … V olsun. Komşuluk matrisi A V x V nın terimleri aij = eğer (i, j) E 0 aksi durumda 1 2 3 4 5 A matrisi simetriktir: aij = aji A = AT 1 1 1 2 5 4 3 2 1 3 1 4 1 Yönsüz çizge 5 1
5
Komşuluk matrisi gösteriminin özellikleri
Hafiza gereksinimi (V2), G nin kiriş sayısına bağlı değil Ne zaman tercih edilir Çizge yoğunsa, yani E sayısı V 2 sayısına çok yakınsa 2 köşe arasında kiriş olup olmadığını hızlı bulma gereksinimi varsa u ya komşu tüm köşelerin bulunması süresi: (V) (u, v) E kontrol süresi: (1)
6
Ağırlıklı çizgeler Ağırlıklı çizgeler = Her kiriş için atanmış w(u, v) ağırlığı vardır w: E R, ağırlık fonksiyonu Ağırlıkların hafızada tutulması Komşuluk listesinde: w(u,v) sayısı u nun komşuluk listesinde v köşesi ile birlikte tutulur Komşuluk matrisinde: w(u, v) saysı matrisin (u, v) ye karşılık gelen yerinde tutulur
7
Çizgelerde arama Çizgelerde arama = Çizgenin kirişlerini sistemli bir biçimde takip ederek mümkün olan tüm köşelerinde bulunmak İki temel arama algoritması vardır: Genişlik öncelikli arama (Breadth-first search) Derinlik öncelikli arama (Depth-first search) Bu iki algoritma arasındaki en önemi fark çizgenin üzerinden geçilmemiş kirişlerini hangi sıra ile takip edilmesindedir
8
Breadth-First Search (BFS)
Giriş: Bir G = (V, E) çizgesi(yönlü veya yönsüz) Bir s V kaynak köşesi Amaç: s köşesinden ulaşılabilir tüm köşelerde öncelikle s e daha yakın olan köşelere kirişlerle gitme koşuluyla bulunmak Çıkış: d[v] = s den v ye olan uzaklık (en kısa yoldaki kiriş sayısı), tüm v V ler için Kökü s de olan BFS ağacı
9
Breadth-First Search (devam.)
Köşeleri s den olan uzaklığın artan sırası ile keşfet-genişlemesine ara, derinlemesine değil Önce s den 1 kiriş uzakta olan köşeler, sonra 2 kiriş uzakta olan köşeler,… bulunur 1 2 5 4 3 11 12 6 7 9
10
Breadth-First Search (devam.)
Her köşe beyaz, gri veya siyah renkte olur Başlangıçta, tüm köşeler beyaz olur Keşfedilen köşenin rengi hemen griye dönüşür Tüm komşuları keşfedilen köşenin rengi sıayaha dönüşür FIFO ile çalışan Q kuyruğu gri köşeleri içerir kaynak 1 2 5 4 3 1 2 5 4 3 1 2 5 4 3
11
BFS ağacı BFS algoritması BFS ağacı üretir
Başlangıçta sadece kökü vardır(kaynak köşe s) v köşesi u köşesinin komşusu olarak keşfedildiyse (u, v) kirişi ağaca eklenir u köşesi v nin velisi olur Her köşe sadece 1 defa keşfedilebilir yani her köşenin sadece 1 velisi vardır Kaynak 1 2 5 4 3
12
BFS için Veri yapıları G = (V, E) çizgesi komşuluk listesi ile ifade edilir color[u] – u V nin rengi [u] – u nun velisi Eğer u = s (kök) veya u köşesi henüz keşfedilmemişse [u] = NIL d[u] – s den u ya olan uzaklık FIFO mantıklı Q kuyruğu (gri köşeleri içerir) kaynak d=1 =1 1 2 5 4 3 d=2 =2 d=1 =1 d=2 =5
13
BFS(G, s) for each u V[G] - {s} do color[u] WHITE d[u] ←
x y for each u V[G] - {s} do color[u] WHITE d[u] ← [u] = NIL color[s] GRAY d[s] ← 0 [s] = NIL Q Q ← ENQUEUE(Q, s) r s t u v w x y r s t u v w x y Q: s
14
BFS(V, E, s) while Q do u ← DEQUEUE(Q) for each v Adj[u]
r s t u v w x y while Q do u ← DEQUEUE(Q) for each v Adj[u] do if color[v] = WHITE then color[v] ← GRAY d[v] ← d[u] + 1 [v] = u ENQUEUE(Q, v) color[u] BLACK Q: s 1 r s t u v w x y Q: w 1 r s t u v w x y Q: w, r
15
Örnek r s t u v w x y 1 r s t u v w x y v w x y 1 2 r s t u Q: s
r s t u v w x y 1 r s t u v w x y v w x y 1 2 r s t u Q: s Q: w, r Q: r, t, x 1 2 r s t u v w x y 1 2 3 r s t u v w x y 1 2 3 r s t u v w x y Q: t, x, v Q: x, v, u Q: v, u, y 1 2 3 r s t u v w x y 1 2 3 r s t u v w x y r s t u 1 2 3 v w x y Q: u, y Q: y Q: COSC3101A
16
BFS analizi for each u V - {s} do color[u] WHITE d[u] ←
[u] = NIL color[s] GRAY d[s] ← 0 [s] = NIL Q Q ← ENQUEUE(Q, s) O(V) (1)
17
BFS analizi Total running time for BFS = O(V + E) while Q
do u ← DEQUEUE(Q) for each v Adj[u] do if color[v] = WHITE then color[v] = GRAY d[v] ← d[u] + 1 [v] = u ENQUEUE(Q, v) color[u] BLACK Scan Adj[u] for all vertices in the graph Each vertex is scanned only once, when the vertex is dequeued Sum of lengths of all adjacency lists = (E) Scanning operations: O(E) (1) (1) Total running time for BFS = O(V + E)
18
En kısa yol özelliği BFS algoritması s V köşesinden ulaşılabilir tüm köşeler en kısa yolları buluyor En kısa yol uzunluğu (s, u) s den u ya minimum kiriş sayısıdır kaynak r s t u 1 2 3 v w x y
19
Derinlik öncelikli arama (DFS)
Giriş: G = (V, E) (Kaynak köşe verilmez!) Amaç: G nin herhangi bir köşesinden başlayarak ve kirişleri üzerinde hareket ederek tüm köşelerini keşfetmek Çıkış: 2 zaman değişkeni: d[v] = v nin keşfedildiği zaman f[v] = v nin tüm komşularının ziyareti bittiği zaman DFS ormanı 1 2 5 4 3
20
DFS Veri yapıları Global değişken: time-step( zaman-adım)
Köşeler keşfedildikçe ve keşfi bittiğinde birer artırılır color[u] – BFS dekinin aynısı [u] – u nun velisi d[u], f[u] – keşfedildiği zaman ve keşfin bittiği zaman Gri Beyaz Siyah 2V d[u] f[u] 1 ≤ d[u] < f [u] ≤ 2 |V|
21
DFS(G) for each u V[G] do color[u] ← WHITE [u] ← NIL time ← 0
do if color[u] = WHITE then DFS-VISIT(u) Every time DFS-VISIT(u) is called, u becomes the root of a new tree in the depth-first forest u v w x y z
22
DFS-VISIT(u) color[u] ← GRAY time ← time+1 d[u] ← time
for each v Adj[u] do if color[v] = WHITE then [v] ← u DFS-VISIT(v) color[u] ← BLACK time ← time + 1 f[u] ← time u v w x y z time = 1 1/ u v w x y z 1/ 2/ u v w x y z
23
Örnek u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v
1/ u v w x y z 1/ 2/ u v w x y z 1/ 2/ 3/ u v w x y z 1/ 2/ 4/ 3/ u v w x y z 1/ 2/ 4/ 3/ u v w x y z B 1/ 2/ 4/5 3/ u v w x y z B 1/ 2/ 4/5 3/6 u v w x y z B 1/ 2/7 4/5 3/6 u v w x y z B 1/ 2/7 4/5 3/6 u v w x y z B F
24
Örnek (devam) The results of DFS may depend on:
1/8 2/7 4/5 3/6 u v w x y z B F 1/8 2/7 9/ 4/5 3/6 u v w x y z B F 1/8 2/7 9/ 4/5 3/6 u v w x y z B F C 1/8 2/7 9/ 4/5 3/6 10/ u v w x y z B F C 1/8 2/7 9/ 4/5 3/6 10/ u v w x y z B F C 1/8 2/7 9/ 4/5 3/6 10/11 u v w x y z B F C 1/8 2/7 9/12 4/5 3/6 10/11 u v w x y z B F C The results of DFS may depend on: The order in which nodes are explored in procedure DFS The order in which the neighbors of a vertex are visited in DFS-VISIT
25
Kiriş sınıflandırma Ağaç kirişleri (beyaz köşeye giden kirişler):
(u, v) ağaç kirişidir eğer v köşesi ilk defa first (u, v) kirişi ile gelinerek ziyaret edilmişse Geri kiriş (Back edge) (Gri köşeye giden kirişler): (u, v) geri kiriştir eğer u köşesi v nin soyundan geliyorsa Döngü kirişler de geri kirişlerdir 1/ u v w x y z 1/ 2/ 4/ 3/ u v w x y z B
26
Kiriş sınıflandırma İleri kirişler (Forward edges) (Siyah köşelere giden d[u] < d[v] olan kirişler): (u, v) kirişi ağaç kirişi değilse ve v köşesi u nun soyundan geliyorsa bu kiriş ileri kiriştir Çapraz kiriş (Cross edge) (Siyah köşelere giden d[u] > d[v] olan kirişler): Ağaç, ileri, geri olmayan tüm kirişler 1/ 2/7 4/5 3/6 u v w x y z B F 1/8 2/7 9/ 4/5 3/6 u v w x y z B F C
27
DFS(G) analizi for each u V[G] do color[u] ← WHITE [u] ← NIL
time ← 0 do if color[u] = WHITE then DFS-VISIT(u) (V) (V) – exclusive of time for DFS-VISIT
28
DFS-VISIT(u) analizi color[u] ← GRAY time ← time+1 d[u] ← time
for each v Adj[u] do if color[v] = WHITE then [v] ← u DFS-VISIT(v) color[u] ← BLACK time ← time + 1 f[u] ← time DFS-VISIT is called exactly once for each vertex Each loop takes |Adj[v]| Total: ΣvV |Adj[v]| + (V) = (V + E) (E)
29
Topological Sort Topological sort of a directed acyclic graph G = (V, E): a linear order of vertices such that if there exists an edge (u, v), then u appears before v in the ordering. Directed acyclic graphs (DAGs) Used to represent precedence of events or processes that have a partial order a before b b before c b before c a before c What about a and b? a before c Topological sort helps us establish a total order
30
Topological Sort TOPOLOGICAL-SORT(V, E) Running time: (V + E)
Call DFS(V, E) to compute finishing times f[v] for each vertex v When each vertex is finished, insert it onto the front of a linked list Return the linked list of vertices undershorts 11/ 16 17/ 18 socks 12/ 15 pants shoes 13/ 14 shirt 1/ 8 6/ 7 belt watch 9/ 10 tie 2/ 5 jacket 3/ 4 socks undershorts pants shoes watch shirt belt tie jacket Running time: (V + E)
31
Topological Sort undershorts 11/ 16 17/ 18 socks Topological sort:
an ordering of vertices along a horizontal line so that all directed edges go from left to right. 12/ 15 pants shoes 13/ 14 shirt 1/ 8 6/ 7 belt watch 9/ 10 tie 2/ 5 jacket 3/ 4 socks undershorts pants shoes watch shirt belt tie jacket
32
Strongly Connected Components
Given directed graph G = (V, E): A strongly connected component (SCC) of G is a maximal set of vertices C V such that for every pair of vertices u, v C, we have both u v and v u.
33
The Transpose of a Graph
GT = transpose of G GT is G with all edges reversed GT = (V, ET), ET = {(u, v) : (v, u) E} If using adjacency lists: we can create GT in (V + E) time 1 2 5 4 3 1 2 5 4 3
34
Finding the SCC Observation: G and GT have the same SCC’s
u and v are reachable from each other in G they are reachable from each other in GT Idea for computing the SCC of a DAG G = (V, E): Make two depth first searches: one on G and one on GT 1 2 5 4 3 1 2 5 4 3
35
Example a b c d e f g h DFS on the initial graph G 13/ 14 11/ 16 1/ 10
8/ 9 b 16 e 15 a 14 c 10 d 9 g 7 h 6 f 4 12/ 15 3/ 4 2/ 7 5/ 6 a b c d e f g h DFS on GT: start at b: visit a, e start at c: visit d start at g: visit f start at h Strongly connected components: C1 = {a, b, e}, C2 = {c, d}, C3 = {f, g}, C4 = {h}
36
Component Graph The component graph is a DAG
b c d e f g h a b e c d f g h The component graph GSCC = (VSCC, ESCC): VSCC = {v1, v2, …, vk}, where vi corresponds to each strongly connected component Ci There is an edge (vi, vj) ESCC if G contains a directed edge (x, y) for some x Ci and y Cj The component graph is a DAG
37
Notations Extend notation for d (starting time) and f (finishing time) to sets of vertices U V: d(U) = minuU { d[u] } (earliest discovery time) f(U) = maxuU { f[u] } (latest finishing time) C1 C2 a b c d d(C2) f(C2) =1 =10 d(C1) f(C1) =11 =16 13/ 14 11/ 16 1/ 10 8/ 9 12/ 15 3/ 4 2/ 7 5/ 6 e f g h C3 C4 d(C3) f(C3) =2 =7 d(C4) f(C4) =5 =6
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.