Upload
ngohanh
View
225
Download
3
Embed Size (px)
Citation preview
1
İç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 (Breath First Search)– DFS (Depth-First Search)
2
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)}
3
A
B C
D
F
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
4
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. 5
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.
6
A
B C
D
F
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
7
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
8
Komşuluk Matrisi Gösterimi
9
• Komşuluk Matrisi Gösterimi: 1 (u,v) E’nin içindeyse 0 diğerM(u, v)
=
A
B C
D
F
E
A B C D E FA 0 1 0 1 0 0B 0 0 1 0 0 0C 0 0 0 1 1 0D 0 0 0 0 1 0E 0 0 0 0 0 0F 0 0 0 0 0 0
Bellek?
O(n2)
10
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) =
A
B C
D
F
E
A B C D E FA ∞ 10 ∞ 5 ∞ ∞ B ∞ ∞ 20 ∞ ∞ ∞ C ∞ ∞ ∞ 30 50 ∞ D ∞ ∞ ∞ ∞ 15 ∞ E ∞ ∞ ∞ ∞ ∞ ∞ F ∞ ∞ ∞ ∞ ∞ ∞
1020
530 50
15
11
Komşuluk Listesi Gösterimi• Komşuluk Listesi: (Yönsüz Graflar)
A
B C
D
F
E
Yer? n + 2*m = O(n+m)
B D
A
D E
E
C
B
A C
C D
A
B
C
D
E
F
12
Komşuluk Listesi Gösterimi• Komşuluk Listesi (Yönlü Graflar)
A
B C
D
F
E
Yer? n + m = O(n+m)
B D
C
D E
E
A
B
C
D
E
F
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
13
14
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.
15
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
16
Breadth-First Search AlgorithmBFS(G, s)
for each u V {s} docolor[u] WHITEpred[u] NIL; d [u]
color[s] GRAYpred[s] NIL; d [s] 0Q {s}while Q do
u head[Q]for each v in Adj[u] do
if color[v] WHITE thencolor[v] GRAYpred[v] ud [v] d [u] 1ENQUEUE(Q, v)
DEQUEUE(Q)color[u] BLACK
17
Breadth-First SearchSample Graph:
a
b
g
c
f
d
e
h
i
0 s
FIFO just afterqueue Q processing vertex
a -
18
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
s FIFO just afterqueue Q processing vertex
a -a,b,c a
19
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
s FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f b
20
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
2
s FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f ba,b,c,f,e c
21
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
2
s
3 3
FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f ba,b,c,f,e ca,b,c,f,e,g,h f
22
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
2
s
3 3
3
3
FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f ba,b,c,f,e ca,b,c,f,e,g,h fa,b,c,f,e,g,h,d,i e
all distances are filled in after processing e
23
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
2
s
3 3
3
3
FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f ba,b,c,f,e ca,b,c,f,e,g,h fa,b,c,f,e,g,h,d,i g
24
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
2
s
3 3
3
3
FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f ba,b,c,f,e ca,b,c,f,e,g,h fa,b,c,f,e,g,h,d,i h
25
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
2
s
3 3
3
3
FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f ba,b,c,f,e ca,b,c,f,e,g,h fa,b,c,f,e,g,h,d,i d
26
Breadth-First Search
a
b
g
c
f
d
e
h
i
0
1
1
2
2
s
3 3
3
3
FIFO just afterqueue Q processing vertex
a -a,b,c aa,b,c,f ba,b,c,f,e ca,b,c,f,e,g,h fa,b,c,f,e,g,h,d,i i
algorithm terminates: all vertices are processed
27
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
Vu
EuAdj )(|][|
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)
28
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.
29
Lecture 14 30CS 473
Depth-First SearchDFS(G)
for each uV docolor[u] white pred[u] NIL
time 0for each uV do
if color[u] white then DFS-VISIT(G, u)
DFS-VISIT(G, u)color[u] gray d[u] time time 1for each v Adj[u] do
if color[v] white then pred[v] u
DFS-VISIT(G, v)
color[u] black f[u] time time 1
31
Adjacency ListsA: F GB: A HC: A DD: C FE: C D GF: E:G: :H: B:I: H:
F
A
B C G
D
E
H
I
Depth-First Search
32
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
Depth-First Search
33
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
visit(F)F-E
Depth-First Search
34
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
Depth-First Search
35
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
dfs(C)C-A C-D
Depth-First Search
36
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
dfs(C)C-A C-D
Depth-First Search
37
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
dfs(C)C-A C-D
dfs(D)D-C D-F
Depth-First Search
38
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
dfs(C)C-A C-D
dfs(D)D-C D-F
Depth-First Search
39
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
dfs(C)C-A C-D
dfs(D)D-C D-F
Depth-First Search
40
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
dfs(C)C-A C-D
Depth-First Search
41
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
Depth-First Search
42
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
Depth-First Search
43
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
dfs(G)
Depth-First Search
44
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
dfs(E)E-C E-D E-G
Depth-First Search
45
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
dfs(F)F-E
Depth-First Search
46
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
Depth-First Search
47
F
A
B C G
D
E
H
I
dfs(A)A-F A-G
Function call stack:
Depth-First Search
48
F
A
B C G
D
E
H
I
Nodes reachable from A: A, C, D, E, F, G
Depth-First Search