Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Çizge Algoritmalari 6. ders.

Benzer bir sunumlar


... konulu sunumlar: "Çizge Algoritmalari 6. ders."— Sunum transkripti:

1 Çizge Algoritmalari 6. ders

2 Derinlik öncelikli arama (Depth-First Search (DFS))
Giriş: G = (V, E) (Kaynak köşe verilmez!) Amaç: En son ziyaret edilen köşeden başlamak koşuluyla G'deki kirişleri üzerinde gezinerek V'deki her köşeyi "keşfetmek” Gezinme sırasında bir çok kaynak köşe kullanılabilir Çıkış: 2 zaman değişkeni: d[v] = keşfetme zamanı f[v] = bitiş zamanı( v’nin komşuluk listesi bitmiştir) Derinlik öncelikli orman (Depth-First Forest(DFF)) 1 2 5 4 3

3 Derinlik öncelikli arama (Depth-First Search (DFS))
Gizgede olabildiğince “derine” giderek arama yap Her adımda en son keşedilen köşeden üzerinde gezinme yapılmamış giriş üzerinden keşfedilmemiş bir köşeye gidilir (eğer mümkünse) 1 2 5 4 3 Arama bir v köşesi seçilerek başlanır ve v den ulaşılabilir tüm köşeler bitene kadar süreç devam eder. Eğer süreç bitiğinde çizgede halen keşfedilmemiş köşe kalmışsa bu defa keşfedilmemiş köşelerden birinden başlanır ve yine süreç seçilen başlangıç köşeden ulaşılabilir tüm köşeler keşfedilene kadar devam eder. DFS algoritması derinlik öncelikli orman (DFF) üretir

4 DFS için veri yapilari Global değişken: zaman-adım
Yeni bir köşe keşfedildiğinde veya keşfi bittiğinde bir artırılır color[u] – BFS’de olduğu gibidir [u] –u köşesinin velisi d[u], f[u] – keşif ve bitiş zamanı GRİ BEYAZ SİYAH 2V d[u] f[u] 1 ≤ d[u] < f [u] ≤ 2 |V|

5 DFS(G) for each u  V[G] do color[u] ← WHITE [u] ← NIL time ← 0
x y z for each u  V[G] do color[u] ← WHITE [u] ← NIL time ← 0 do if color[u] = WHITE then DFS-VISIT(u) DFS-VISIT(u) nun çağrıldığı her u köşesi DFS ormanında yeni bir ağacın kökü olur

6 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

7 Ö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

8 Örnek (Devam) DFS sonucu aşağıdakilere bağlıdır:
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 DFS sonucu aşağıdakilere bağlıdır: DFS algoritmasının aramaya hangi köşeden başlaması ve kaynak köşelere hangi sırada devam etmesine DFS-VISIT algoritmasının komşuları ziyaret sırasına

9 KİRİŞ SİNİFLANDİRMA Ağaç kirişi (Rengi BEYAZ iken keşfedilen köşelere bağlanan girişler): (u, v) ağaç kirişidir eğer v köşesine ilk defa (u, v) kirişi ile gidilmişse Geri kiriş (Back edge) (Rengi GRİ iken tekrar ziyaret edilen köşelere bağlanan girişler): (u, v), geri kiriştir eğer u dan v köşesine gidildiğinde v köşesi artık DFS ormanında bulunan bir ağaçta varsa Yönlü çizgelerde öz-döngü kirişleri de geri kirişlerdir 1/ u v w x y z 1/ 2/ 4/ 3/ u v w x y z B

10 KİRİŞ SİNİFLANDİRMA İleri kiriş(Forward edge) (u köşesinden ziyaret edildiğinde rengi SİYAH olan ve d[u] < d[v] koşulunu sağlayan v köşeleri) (u, v) kirişi ileri kiriştir eğer 1)ağaç kirişi değilse ve 2)DFS ormanındaki bir ağaçta v köşesi u köşesinin soyundan geliyorsa, yani v köşesi u köşesinin torunu, torunun çocuğu ve b. ise Çapraz kiriş (Cross edge) (u köşesinden ziyaret edildiğinde rengi SİYAH olan ve d[u] > d[v] koşulunu sağlayan v köşeleri) DFS ormanında bulunan aynı bir ağacın iki köşesi arasında ( bu durumda bu köşelerin hiçbiri diğerinin soyundan gelmez) veya farklı iki ağacın köşeleri arasında olabilir 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

11 DFS(G) Zaman analizi for each u  V[G] do color[u] ← WHITE (V)
[u] ← NIL time ← 0 do if color[u] = WHITE then DFS-VISIT(u) (V) – defa DFS-VISIT çağrılacaktır

12 DFS-VISIT(u) zaman 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 her köşe için bir defa çağrılır Her döngü |Adj[v]| defa döner Toplam:ΣvV |Adj[v]| + (V) = (V + E) (E)

13 Topolojik siralama Yönlü ve döngüsüz bir G = (V, E) çizgesinin köşelerini bir doğru üzerinde öyle yerleştirebiliriz ki eğer çizgede (u, v) kirişi varsa doğru üzerinde u köşesi v den önce gelir. Bu tür bir sıralamaya topolojik sıralama denir.

14 Topolojik siralama TOPOLOGICAL-SORT(V, E) Running time: (V + E)
Her v köşesi için f[v] yi hesaplamak için DFS(V, E) cağır Köşeleri bitiş zamanlarının azalan sırası ile sırala ve bir bağlı listeye yerleştir Çizgedeki kirişleri bu listede göster H 11/ 16 17/ 18 İ 12/ 15 G F 13/ 14 D 1/ 8 6/ 7 C E 9/ 10 B 2/ 5 A 3/ 4 İ H G F E D C B A Running time: (V + E)

15 Topological Sort H 11/ 16 17/ 18 İ 12/ 15 G F 13/ 14 C 1/ 8 6/ 7 D E
9/ 10 B 2/ 5 A 3/ 4 İ H G F E D C B A

16 Özellik Yönlü bir çizge döngüsüzdür  Bu çizgeye uygulanan DFS algoritması geri kiriş üretmez. İspat: “”: çizge döngüsüz olsun  geri giriş yok Geri kiriş olduğunu varsayalım  döngü olduğunu gösterelim Bir geri kiriş olsun (u, v) u köşesi v nin soyundan geliyor  Yani v den u ya yol var: G de (v  u) yolu  v  u + (u, v) döngüdür v u (u, v)

17 İspat devam “”: geri giriş yoktur  döngüsüzdür
Döngü olduğunu varsayalım  geri kiriş olduğunu gösterelim G de c döngü olsun v köşesi c de ilk keşfedilen köşe ve (u, v) kirişi c de son kiriş olsun d[v] zamanında c de v  u beyaz yolu vardır Yani u köşesi v nin soyundandır  (u, v) geri kirişdir. v (u, v) u

18 Kuvvetli Bağlantili Bileşenler
Yönlü bir çizge verilmiş olsun:G = (V, E): C  V olan ve her u, v  C için u  v ve v  u yollarının var olduğu maksimum elemanlı <C> alt çizgesine G nin kuvvetli bağlantılı bir bileşeni (strongly connected component (SCC) ) denir.

19 Çizgenin transpozu GT = G nin transposu
GT çizgesinin kirişlerinin tümü G nin kirişlerinin yönünün ters yöne değiştirilmesi ile oluşmuştur GT = (V, ET), ET = {(u, v) : (v, u)  E} GT yi (V + E) işlem zamanında oluşturabiliriz. 1 2 5 4 3 1 2 5 4 3

20 Kuvvetli bağlantılı bileşenleri bulma
Gözlem: G ve GT kuvvetli bağlantılı bileşenleri aynıdır. u ve v köşeleri G de birbirinden ulaşılabilirdir bu köşeler GT de de birbirinden ulaşılabilirdir. Yönlü döngüsüz G = (V, E) de kuvvetli bağlantılı bileşenleri bulmak için : G ve GT de DFS uygulamak yeterlidir 1 2 5 4 3 1 2 5 4 3

21 Örnek a b c d e f g h DFS G de ve bitiş zamanlarına göre sırala 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 GT: b de başla: a, e keşfet c de başla: d yi keşfet g de başla: f yi keşfet h de başla Kuvvetli bağlantılı bileşenler: C1 = {a, b, e}, C2 = {c, d}, C3 = {f, g}, C4 = {h}


"Çizge Algoritmalari 6. ders." indir ppt

Benzer bir sunumlar


Google Reklamları