560 likes | 877 Views
Graf. Graflar. Problemlerin modellenmesinde çok kullanışlıdır İçeriği : Düğümler - Vertices Kenarlar - Edges. Kenarlar bağlantıları gösterir. D. E. C. A. F. B. düğüm. kenar. Uygulamalar. Uçuş sistemi. Herbir düğüm bir şehri gösterir
E N D
Graflar • Problemlerin modellenmesinde çok kullanışlıdır • İçeriği: • Düğümler - Vertices • Kenarlar - Edges Kenarlar bağlantıları gösterir. D E C A F B düğüm kenar
Uygulamalar Uçuş sistemi • Herbir düğüm bir şehri gösterir • Herbir kenar iki şehir arasındaki doğrudan uçuşu gösterir • Doğrudan uçuşların sorgulanmasında cevap bir kenardır. • Bir yere ulaşmak için “A’ dan B’ ye yol varmı” sorusu sorulur. • Maaliyetleri kenarlara bile ekleyebiliriz. (ağırlıklı - weighted graflar), daha sonra “A’dan B’ ye en ucuz yol hangisidir” diye sorabiliriz.
Another application • Wireless communication • Can be represented by a weighted complete graph (every two vertices are connected by an edge). • Each edge represents the Euclidean distancedij between two stations. • Each station uses a certain power i to transmit messages. Given this power i, only a few nodes can be reached (bold edges). A station reachable by i then use its own power to relay the message to other stations not reachable by i. • A typical wireless communication problem is: how to broadcast between allstations such that they are all connected and the power consumption is minimized.
{a,b} {a,c} {b,d} {c,d} {b,e} {c,f} {e,f} Tanım • Yönlendirilmemiş Graf • Bir yönlendirilmemiş graf sıralı bir ikili ile gösterilir (V,E), V düğümler kümesidir ve E kenarlar kümesidir.
Terminoloji • Eğerv1ve v2bağlantılı iseler, bitişik düğümler olarak isimlendirilirler. • v1vev2, {v1, v2} kenarının son noktalarıdır. • Eğer bir kenare is v’ ye bağlı ise , v, e’ ye gelen (incident) olarak isimlendirilir. Ayrıca, kenar e, v’ye gelen olarak isimlendirilir. • {v1, v2} = {v2, v1}*
Graf Gösterimi • İki popüler gösterim vardır. Her ikisi de farklı yönlerden düğüm ve kenar kümelerini gösterir. • Komşuluk Matrisi Grafı göstermek için ‘D matris kullanılır. • Komşuluk Listesi Bağlantılı listelerin bir boyutlu dizisi kullanılır.
Komşuluk Matrisi • Alan karmaşıklığı Θ(n2).Eğer graf az kenara sahipse etkili değil . • O(1) zamanda iki düğümün bağlı olup olmadığını bulur.
0 8 2 9 1 7 3 6 4 5 Örnek
0 8 2 9 1 7 3 6 4 5 Örnek
Komşuluk matrisinin depolanması • Dizi Θ(n) kadar alan tutar. • v derecesini tanımla, deg(v), v’ye gelen (giriş) kenarların sayısını tutar. Öyleyse, grafı depolamak için gereken alan aşağıdaki ile orantılıdır. • Grafın bir kenarı e={u,v}, deg(u) değerini bir attırır ve deg(v) değerini 1 arttırır. • Böylece , Σvertex vdeg(v) = 2m, m kenarların toplamıdır. • Sonuç olarak, komşuluk listesi Θ(n+m) kadar yer tutar. • Eğer m = O(n2), komşuluk matrisinin ve listesinin herikiside Θ(n2) kadar alan kullanır. • Eğer m = O(n), komşuluk listesi, komşuluk matrisinden daha avantajlıdır. • Buna karşılık, hiçkimse O(1) zaman biriminde iki düğümün bağlı olup olmadığını söyleyemez.
Komşulık Listesinin ve Matrisinin Karşılaştırılması • Komşuluk Listeleri • Komşuluk matrislerinden daha az yer kaplar eğer graf az kenara sahipse • Eğer bir kenar varsa, kenarın bulunması için daha fazla zaman harcanır. • Komşuluk Matrisi • Her zaman n2alan gerektirir • Eğer kenarlar seyrekse, alan israfına yol açar • Eğer bir kenar varsa kolaylıkla bulunabilir
Düğümler arası yol • Bir yol (path) düğümlerin bir sırasıdır (v0, v1, v2,… vk) öyleki: • 0 ≤ i < k için , {vi, vi+1}bir kenardır • 0 ≤ i < k-1 için, vi ≠ vi+2 Yani, kenarlar {vi, vi+1} ≠ {vi+1, vi+2} Not: bir yolun aynı düğüm veya aynı kenar üzerinden herhangi bir sayıda geçmesine izin verilmiştir. • Bir yolun uzunluğu (length) yol üzerindeki kenar sayısının toplamıdır.
Yol Tipleri • Bir yol basittir (simple) ancak ve ancak bir düğüm bir yolda birden fazla kullanılmamışsa. • Bir yol döngüdür (cycle) ancak ve ancak v0= vk • Başlangıç ve bitiş aynı düğüm! • Bir yol birden fazla döngü içerebilir eğer bazı düğümler iki veya daha fazla görünürse
Örnekler Bunlar bir yol mu? Döngü var mı? Yolun uzunluğu nedir? • {a,c,f,e} • {a,b,d,c,f,e} • {a, c, d, b, d, c, f, e} • {a,c,d,b,a} • {a,c,f,e,b,d,c,a}
Graf Gezme • Örnek • Verilen bir graf gösterimi ve bir s düğümü için grafta s ‘ ten diğer düğümlere olan bütün yolları bul. • En çok bililen iki bilinen graf gezme algoritması • Genişlik Öncelikli Arama - (Breadth-First Search (BFS)) • Ağırlıklandırılmamış grafta en kısa yolu bul • Derinlik Öncelikli Arama (Depth-First Search (DFS)) • Topolojik Sıralama • Sıkı bağlanmış elemanları bul (strongly connected components)
0 8 2 9 1 7 3 6 4 5 2 s 1 1 2 1 2 2 1 BFS ve En kısa Yol Problemi • Verilen herhangi bir düğüm s için,, BFS s’ ten artan (uzaklaşan) bir şekilde diğer düğümleri ziyaret eder. Bunu yaparken, BFS s’ten diğer düğümlere olan yolları bulur. • Uzaklık ile kastedilen şey nedir? S’ten başlayan yol üzerindeki kenar sayısıdır. Örnek s=vertex 1 için 1 uzaklığında bulunan düğümler 2, 3, 7, 9 2 uzaklığında bulunan düğümler? 8, 6, 5, 4 3 uzaklığında bulunan düğümler? 0
BSF algoritması Neden Kuyruk Kullanıyoruz? FIFO ya ihtiyaç var
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret tablosu (T/F) kaynak Ziyaret tablosunu ilklendir (hepsi False) { } Q = Q ‘ yu boş olarak ilklendir
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk listesi Ziyaret Tablosu (T/F) kaynak 2 ziyaret edildiği için bayrak koy { 2 } Q = Kuyruğa 2 yi ekle.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Neighbors kaynak Komşuları ziyaret edildi diye işaretle {2} → { 8, 1, 4 } Q = Çıkar 2. 2’ nin ziyaret edilmemiş komşularını kuyruğa ekle
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak komşular Yeni ziyaret edilen komşuları işaretle { 8, 1, 4 } → { 1, 4, 0, 9 } Q = Çıkar 8. -- 8’in ziyaret edilmemiş komşularını kuyruğa ekle. -- 2’ nın eklenmediğine dikkat edin. Daha ince ziyaret edilmişti!
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak Yeni ziyaret edilen komşuları işaretle { 1, 4, 0, 9 } → { 4, 0, 9, 3, 7 } Q = Çıkar 1. -- 1’in ziyaret edilmemiş komşularını kuyruğa ekle. -- Sadece 3 ve 7 henüz ziyaret edilmedi.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak { 4, 0, 9, 3, 7 } → { 0, 9, 3, 7 } Q = Çıkar 4. -- 4’ ün ziyatet edilmemiş komşusu yok!
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak { 0, 9, 3, 7 } → { 9, 3, 7 } Q = Çıkar 0. -- 0’ ın ziyaret edilmemiş komşusu yok!
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular { 9, 3, 7 } → { 3, 7 } Q = Çıkar 9. -- 9’un ziyaret edilmiş komşusu yok!
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak Yeni ziyaret düğüm 5’ i işaretle { 3, 7 } → { 7, 5 } Q = Çıkar 3. -- 5’i kuyruğa ekle.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular Yeni ziyaret düğüm 6’ yı işaretle { 7, 5 } → { 5, 6 } Q = Çıkar 7. -- 6’ yı kuyruğa ekle.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular { 5, 6} → { 6 } Q = Çıkar 5. -- 5’in ziyaret edilmemiş komşusu yok.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular { 6 } → { } Q = Çıkar 6. -- 6’nın ziyaret edilmemiş komşusu yok.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Neyi keşfettik? Ziyaret tablosuna bak. Grafta kaynak düğüm 2’den bütün düğümlere bir yol vardır. { } Dur!!! Q boş!!! Q =
BFS’ nin Zaman Karmaşılığı(Komşuluk Listesi kullanarak) • Komşuluk listesi olduğunu varsayalım • n = düğüm sayısı m = kenar sayısı O(n + m) Herbir düğümen fazla bir kere Q’ ya girecek Herbir iterasyon deg(v) + 1 ifadesine orantılı olarak zaman alacaktır (1 sayısı deg(v) = 0 olduğu durumu içerir).
Çalışma Zamanı • m kenarlı verilen bir graf için, toplam derece nedir? • While döngüsünun toplam çalışma zamanı Bu toplam while döngü içerisindeki bütün iterasyonları kapsar. Σvertex v deg(v) = 2m O( Σvertex v (deg(v) + 1) ) = O(n+m)
BFS’ nin Zaman Karmaşıklığı(Komşuluk Matrisi kullanarak) • Komşuluk matrisi olduğunu varsayalım • n = düğüm sayısı m = kenar sayısı O(n2) V’nin komşu düğümlerini bulmak satırdaki bütün elemanları kontrol etmeyi gerektirir. Bu lineer zaman alır O(n). n iterasyonun toplamı ile birlikte toplam çalışma zamanı O(n2). Böylece, komşuluk matrisi ile, BFS O(n2) m kenar sayısına bağlı değildir. Bağlantılı liste ile, BFS O(n+m); Eğer m=O(n2) ise yoğun graf gibi çalışır, O(n+m)=O(n2).
En Kısa Yolun Kaydedilmesi • BFS, kaynak s’ ten diğer v düğümlerine bir yolun olup olmadığını bize söyler. • Yolu söylemez! • Yolu kaydetmek için algoritmayı modifiye etmemiz gerekir. - • Nasıl yapabiliriz? • Not: v’ ye ulaşana kadar yolda olan düğümleri bilmiyoruz. • Etkili çözüm: • Ek bir dizi kullanonceki[0..n-1] • onceki[w] = v düğüm w’ye v ‘den ulaşıldığı manasına gelir.
BFS + Yol Bulma ilklendir pred[v] to -1 Nerden geldiğini kaydet
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak onceki Ziyaret tablosunu ilklendir (hepsiFalse) onceki’ ni -1 yap { } Q = Q ilk başta boş
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak onceki Flag that 2 has been visited. { 2 } Q = Ekle 2.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak onceki Komşular ziyaret edildi olarak işaretle. Oncekine 2’den gelindiğini kaydet. {2} → { 8, 1, 4 } Q = çıkar 2. 2’nin ziyaret edilmemiş bütün komşularını kuyruğa ekle
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular onceki Komşular ziyaret edildi olarak işaretle. Oncekine 8’den gelindiğini kaydet. { 8, 1, 4 } → { 1, 4, 0, 9 } Q = Çıkar 8. -- 8’in ziyaret edilmemiş komşularını ekle.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak onceki Komşular ziyaret edildi olarak işaretle. Oncekine 1’den gelindiğini kaydet. { 1, 4, 0, 9 } → { 4, 0, 9, 3, 7 } Q = Çıkar 1. -- Ziyaret edilmemiş komşuları ekle . -- 3,7
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak onceki { 4, 0, 9, 3, 7 } → { 0, 9, 3, 7 } Q = Çıkar 4. -- 4’ün ziyaret edilmemiş komşusu yok!
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak onceki { 0, 9, 3, 7 } → { 9, 3, 7 } Q = Çıkar 0. -- 0’ın ziyaret edilmemiş komşusu yok!
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular onceki { 9, 3, 7 } → { 3, 7 } Q = Çıkar 9. -- 9’un ziyaret edilmemiş komşusu yok!
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) Komşular kaynak onceki Komşular ziyaret edildi olarak işaretle. Oncekine 3’den gelindiğini kaydet. { 3, 7 } → { 7, 5 } Q = Çıkar 3. -- Komşu 5’i kuyruğa ekle.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular onceki Komşular ziyaret edildi olarak işaretle. Oncekine 7’den gelindiğini kaydet. { 7, 5 } → { 5, 6 } Q = Çıkar 7. -- Komşu 6’yı kuyruğa ekle.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular onceki { 5, 6} → { 6 } Q = Çıkar 5. -- 5’in ziyaret edilmemiş komşusu yok.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak Komşular onceki { 6 } → { } Q = Çıkar 6. -- 6’nın ziyaret edilmemiş komşusu yok.
0 8 2 9 1 7 3 6 4 5 Örnek Komşuluk Listesi Ziyaret Tablosu (T/F) kaynak onceki Şimdi yolu rapor etmek için onceki geriye doğru izlenebilir! { } Dur!!! Q boş!!! Q =