Transcript BFS-DFS

İç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)
1
Graflar
•
Graf, matematiksel anlamda, tepelerden ve bu
düğümler arasındaki ilişkiyi gösteren
ayrıtlardan oluşan bir kümedir.
–
•
Bir G grafı V ile gösterilen tepelerden (node
veya vertex) ve E ile gösterilen ayrıtlardan
(Edge) oluşur.
–
•
Bağlantılı listeler ve ağaçlar grafların özel
örneklerindendir.
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.
2
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)}
B
C
F
A
D
E
3
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.
B
C
F
A
D
E
6
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
•
Komşuluk Matrisi Gösterimi:
M(u, v) =
B
1
0
(u,v) E’nin içindeyse
diğer
C
F
A
D
E
A
B
C
D
E
F
A
0
1
0
1
0
0
B
0
0
1
0
0
0
C
0
0
0
1
1
0
D
0
0
0
0
1
0
E
0
0
0
0
0
0
F
0
0
0
0
0
0
Bellek? O(n2)
9
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
M(u, v) =
∞
diğer
10
A
B
20
30
5
D
15
C
50
E
F
A
B
C
D
E
F
A
∞
10
∞
5
∞
∞
B
∞
∞
20
∞
∞
∞
C
∞
∞
∞
30 50
∞
D
∞
∞
∞
∞
15
∞
E
∞
∞
∞
∞
∞
∞
F
∞
∞
∞
∞
∞
∞
10
Komşuluk Listesi Gösterimi
• Komşuluk Listesi: (Yönsüz Graflar)
B
C
F
A
D
E
A
B
D
B
A
C
C
B
D
E
D
A
C
E
E
C
D
F
Yer? n + 2*m = O(n+m)
11
Komşuluk Listesi Gösterimi
• Komşuluk Listesi (Yönlü Graflar)
B
C
F
A
D
E
A
B
B
C
C
D
D
E
D
E
E
F
Yer?
n + m = O(n+m)
12
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
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.
14
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
15
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
16
Breadth-First Search
Sample Graph:
s
FIFO
queue Q
0
a
d
c
b
a
-
e
f
g
just after
processing vertex
i
h
17
Breadth-First Search
s
d
FIFO
queue Q
e
a
a,b,c
0
a
1
c
1
b
f
g
just after
processing vertex
a
i
h
18
Breadth-First Search
s
FIFO
queue Q
0
a
d
1
c
a
a,b,c
a,b,c,f
1
b
e
2
f
g
just after
processing vertex
a
b
i
h
19
Breadth-First Search
s
FIFO
queue Q
0
a
d
1
c
1
2
b
e
2
f
g
i
a
a,b,c
a,b,c,f
a,b,c,f,e
just after
processing vertex
a
b
c
h
20
Breadth-First Search
s
FIFO
queue Q
0
a
d
1
c
1
2
b
e
2
f
g
i
just after
processing vertex
a
a,b,c
a,b,c,f
a,b,c,f,e
a,b,c,f,e,g,h
a
b
c
f
h
3
3
21
Breadth-First Search
s
0
a
FIFO
queue Q
3
d
1
c
1
2
b
e
2
f
i
3
g
h
3
just after
processing vertex
a
a,b,c
a,b,c,f
a,b,c,f,e
a,b,c,f,e,g,h
a,b,c,f,e,g,h,d,i
a
b
c
f
e
3
all distances are filled in after processing e
22
Breadth-First Search
s
0
a
FIFO
queue Q
3
d
1
c
1
2
b
e
2
f
i
3
g
h
3
just after
processing vertex
a
a,b,c
a,b,c,f
a,b,c,f,e
a,b,c,f,e,g,h
a,b,c,f,e,g,h,d,i
a
b
c
f
g
3
23
Breadth-First Search
s
0
a
FIFO
queue Q
3
d
1
c
1
2
b
e
2
f
i
3
g
h
3
just after
processing vertex
a
a,b,c
a,b,c,f
a,b,c,f,e
a,b,c,f,e,g,h
a,b,c,f,e,g,h,d,i
a
b
c
f
h
3
24
Breadth-First Search
s
0
a
FIFO
queue Q
3
d
1
c
1
2
b
e
2
f
i
3
g
h
3
just after
processing vertex
a
a,b,c
a,b,c,f
a,b,c,f,e
a,b,c,f,e,g,h
a,b,c,f,e,g,h,d,i
a
b
c
f
d
3
25
Breadth-First Search
s
0
a
FIFO
queue Q
3
d
1
c
1
2
b
e
2
f
i
3
g
h
3
just after
processing vertex
a
a,b,c
a,b,c,f
a,b,c,f,e
a,b,c,f,e,g,h
a,b,c,f,e,g,h,d,i
a
b
c
f
i
3
algorithm terminates: all vertices are processed
26
Breadth-First Search Algorithm
Running time: O(VE)  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
 | Adj[u ] | ( E )
uV
27
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
Depth-First Search
DFS(G)
for each uV do
color[u] white
pred[u]  NIL
time  0
for each uV do
if color[u]  white
then
DFS-VISIT(G, u)
CS 473
DFS-VISIT(G, u)
color[u] gray
d[u] time  time 1
for 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
Lecture 14
30
Depth-First Search
A
Adjacency Lists
B
H
C
I
D
F
E
G
A:
B:
C:
D:
E:
F:
G:
H:
I:
F G
A H
A D
C F
C D G
E:
:
B:
H:
31
Depth-First Search
A
B
H
C
G
I
D
F
E
dfs(A)
A-F A-G
Function call stack:
32
Depth-First Search
A
B
H
C
G
I
D
F
E
visit(F)
F-E
dfs(A)
A-F A-G
Function call stack:
33
Depth-First Search
A
B
H
C
G
I
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
34
Depth-First Search
A
B
H
C
G
dfs(C)
I
C-A C-D
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
35
Depth-First Search
A
B
H
C
G
dfs(C)
I
C-A C-D
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
36
Depth-First Search
A
dfs(D)
B
H
C
G
D-C D-F
dfs(C)
I
C-A C-D
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
37
Depth-First Search
A
dfs(D)
B
H
C
G
D-C D-F
dfs(C)
I
C-A C-D
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
38
Depth-First Search
A
dfs(D)
B
H
C
G
D-C D-F
dfs(C)
I
C-A C-D
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
39
Depth-First Search
A
B
H
C
G
dfs(C)
I
C-A C-D
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
40
Depth-First Search
A
B
H
C
G
I
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
41
Depth-First Search
A
B
H
C
G
I
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
42
Depth-First Search
A
B
H
C
G
dfs(G)
I
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
43
Depth-First Search
A
B
H
C
G
I
D
dfs(E)
E-C E-D E-G
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
44
Depth-First Search
A
B
H
C
G
I
D
F
E
dfs(F)
F-E
dfs(A)
A-F A-G
Function call stack:
45
Depth-First Search
A
B
H
C
G
I
D
F
E
dfs(A)
A-F A-G
Function call stack:
46
Depth-First Search
A
B
H
C
G
I
D
F
E
dfs(A)
A-F A-G
Function call stack:
47
Depth-First Search
A
B
H
C
G
I
D
F
E
Nodes reachable from A: A, C, D, E, F, G
48