Derinlik ncelikli Arama Depthfirst Search DFS H Qunun

  • Slides: 27
Download presentation
Derinlik Öncelikli Arama (Depth-first Search - DFS) H. Qu’nun sunumlarından tercüme edilerek uyarlanmıştır.

Derinlik Öncelikli Arama (Depth-first Search - DFS) H. Qu’nun sunumlarından tercüme edilerek uyarlanmıştır.

2 Derinlik Öncelikli Arama (DFS) * DFS, diğer bir graf arama stratejisidir n *

2 Derinlik Öncelikli Arama (DFS) * DFS, diğer bir graf arama stratejisidir n * Öncekök gezmeye benzer bir mantığı vardır (Çocukları önce ziyaret et) DFS, BFS’nin graf hakkında sağlayamadığı bazı bilgileri sağlayabilir. n Bir döngüyle karşılaşıp karşılaşmadığımızı belirlemekte kullanılabilir.

3 DFS Algoritması * DFS, tekrarlamalı olarak komşuları ziyaret etmeye devam edecektir n u‘dan

3 DFS Algoritması * DFS, tekrarlamalı olarak komşuları ziyaret etmeye devam edecektir n u‘dan ne zaman v’yi ziyaret edersek, v’nin ziyaret edilmemiş komşularını tekrarlamalı olarak ziyaret ederiz. Daha sonra u’ya geri döneriz. n Not: w 1 ziyaret edildiğinde w 2 ziyaret edilmemiş olabilir , fakat tekrarlamalı çağrı ile dönünce ziyaret edilecektir. u v w 1 w 3 w 2

4 DFS Algoritması Düğümleri ziyaret edilmemiş olarak işaretle v ziyeret edildi Ziyert edilmemiş komşular

4 DFS Algoritması Düğümleri ziyaret edilmemiş olarak işaretle v ziyeret edildi Ziyert edilmemiş komşular içln, tekrarlamalı olarak RDFS(w)’yi çağır pred[ ] (önceki[ ]) kullanarak yolu da kaydedebiliriz.

5 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

5 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 F - 1 F - 2 F - 3 F - 4 F - 5 F - 6 F - 7 F - 8 F - 9 F - Önceki Ziyaret tablosunu ilklendir (hepsi False) Önceki değerlerini -1 yap.

6 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

6 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 F - 1 F - 2 T - 3 F - 4 F - 5 F - 6 F - 7 F - 8 F - 9 F - Önceki 2’yi işaretle RDFS( 2 ) ziyaret et RDFS(8)

7 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

7 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 F - 1 F - 2 T - 3 F - 4 F - 5 F - 6 F - 7 F - 8 T 2 9 F - Önceki 8’i işaretle Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) 2 önceden ziyaret edildi, ziyaret et RDFS(0) Önceki[8] işaretle

8 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

8 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 F - 2 T - 3 F - 4 F - 5 F - 6 F - 7 F - 8 T 2 9 F - Önceki 0’ı işaretle Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) RDFS(0) -> ziyaret edilemiş komşusu yok, RDFS(8)’e geri dön Önceki[0] işaretle

9 Örnek Back to 8 Komşuluk Listesi 0 8 Kaynak 2 9 1 7

9 Örnek Back to 8 Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 F - 2 T - 3 F - 4 F - 5 F - 6 F - 7 F - 8 T 2 9 F - Önceki Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) ziyaret et 9 -> RDFS(9)

10 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

10 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 F - 2 T - 3 F - 4 F - 5 F - 6 F - 7 F - 8 T 2 9 T 8 Önceki 9’u işaretle Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) RDFS(9) -> ziyaret et 1, RDFS(1) Önceki[9] işaretle

11 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

11 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 F - 4 F - 5 F - 6 F - 7 F - 8 T 2 9 T 8 Önceki 1’i işaretle Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) ziyaret et RDFS(3) Önceki[1] işaretle

12 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

12 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 F - 5 F - 6 F - 7 F - 8 T 2 9 T 8 Önceki 3’ü işaretle Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) RDFS(3) ziyaret et RDFS(4) Önceki[3] işaretle

13 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

13 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 F - 6 F - 7 F - 8 T 2 9 T 8 Önceki Tekrarlamalı çağrı RDFS( 2 ) 4’ü işaretle RDFS(8) RDFS(9) Önceki[4] işaretle RDFS(1) RDFS(3) RDFS(4) DUR 4’ün bütün komşuları ziyaret edildi RDFS(3)’e geri dön

14 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

14 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Back to 3 Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 F - 6 F - 7 F - 8 T 2 9 T 8 Önceki Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) RDFS(3) ziyaret et 5 -> RDFS(5)

15 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

15 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 F - 7 F - 8 T 2 9 T 8 Önceki Tekrarlamalı çağrı RDFS( 2 ) RDFS(8) 5’i işaretle RDFS(9) RDFS(1) Önceki[5] işaretle RDFS(3) RDFS(5) 3 önceden ziyaret edildi, 6’yı ziyaret et -> RDFS(6)

16 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı

16 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı çağrı 6 5 RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) RDFS(3) RDFS(5) RDFS(6) ziyaret et 7 -> RDFS(7) Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 F - 8 T 2 9 T 8 Önceki 6’yı işaretle Önceki[6] işaretle

17 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı

17 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı çağrı 6 5 Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki RDFS( 2 ) RDFS(8) 7’yi işaretle RDFS(9) RDFS(1) Önceki[7] işaretle RDFS(3) RDFS(5) RDFS(6) RDFS(7) -> Dur –Ziyaret edilmemiş komşu yok

18 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı

18 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı çağrı 6 5 RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) RDFS(3) RDFS(5) RDFS(6) -> Dur Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

19 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı

19 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı çağrı 6 5 RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) RDFS(3) RDFS(5) -> Dur Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

20 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı

20 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı çağrı 6 5 RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) RDFS(3) -> Dur Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

21 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı

21 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı çağrı 6 5 RDFS( 2 ) RDFS(8) RDFS(9) RDFS(1) -> Dur Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

22 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı

22 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 Tekrarlamalı çağrı 6 5 RDFS( 2 ) RDFS(8) RDFS(9) -> Dur Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

23 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

23 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 RDFS( 2 ) RDFS(8) -> Dur Tekrarlamalı çağrı Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

24 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6

24 Örnek Komşuluk Listesi 0 8 Kaynak 2 9 1 7 3 4 6 5 RDFS( 2 ) -> Dur Tekrarlamalı çağrı Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

25 Örnek 0 Komşuluk Listesi 8 2 9 Kaynak 1 7 3 4 6

25 Örnek 0 Komşuluk Listesi 8 2 9 Kaynak 1 7 3 4 6 5 Yolu (Path) kontrol ediniz, DFS geçerli bir yol buluyor mu? Evet. Bazı örnekler. Path(0) -> Path(6) -> Path(7) -> Ziyaret Tablosu (T/F) 0 T 8 1 T 9 2 T - 3 T 1 4 T 3 5 T 3 6 T 5 7 T 6 8 T 2 9 T 8 Önceki

DFS’nin Zaman Karmaşıklığı 26 (Komşuluk Listesi Kullanarak) * Bir düğüm birden fazla ziyaret edilmedi

DFS’nin Zaman Karmaşıklığı 26 (Komşuluk Listesi Kullanarak) * Bir düğüm birden fazla ziyaret edilmedi * Düğümlerin bütün kenarlarını incelemeliyiz n * DFS’nın çalışma zamanı kenar sayısı ve düğüm sayısı ile orantılıdır (BFS’de de durum aynı idi. ) n * Σdüğüm v derece(v) = 2 m olduğunu biliyoruz. Burada m kenar sayısıdır. O(n + m) Bu durum ayrıca aşağıdaki şekilde de yazılabilir: n O(|v|+|e|) |v| = düğüm sayısı (n) |e| = kenar sayısı (m)

27 DFS Ağacı Üretilen DFS-ağacı BFS-ağacından daha derindir. Tekrarlamalı çağrıların yapısını yakalar. - v’nin

27 DFS Ağacı Üretilen DFS-ağacı BFS-ağacından daha derindir. Tekrarlamalı çağrıların yapısını yakalar. - v’nin bir w komşusunu ziyaret ettiğimizde w’yi v’nin çocuğu olarak ekleriz. - DFS, v düğümünden döndüğü zaman, v’den onun ebevynine çıkarız