1. YZM 2116
Veri Yapıları
Yrd. Doç. Dr. Deniz KILINÇ
Celal Bayar Üniversitesi
Hasan Ferdi Turgutlu Teknoloji Fakültesi
Yazılım Mühendisliği
2. BÖLÜM - 11
Bu bölümde,
• Graph (Çizge - Graf)
• Terminoloji
• Çizge Kullanım Alanları
• Çizge Gösterimi
– Komşuluk Matrisi
– Komşuluk Listesi
• Çizge Üzerinde Gezinme
– DFS
– BFS
konusuna değinilecektir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
3. Çizge (Graph) Giriş
• Köşe (vertex) isimli düğümlerden ve kenar (edge) isimli
köşeleri birbirine bağlayan bağlantılardan oluşan veri
yapısıdır.
• Ağaçlar gibi çizgeler de doğrusal olmayan veri yapıları
grubuna girerler.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
D
E
A
C
F
B
düğüm
kenar
4. Çizge (Graph) Giriş (devam…)
• Bir G çizgesi G(V, E) şeklinde gösterilir:
a. V = V(G) Kümesi: Küme elemanları, G’nin düğümleri
(nodes), noktaları (points) veya köşeleri (vertices)
b. E = E(G) Kümesi: Küme elemanları G’nin kenarları
(edges) olarak adlandırılan sırasız düğüm ikililerini
içerir.
• Eğer bir e = {u, v} kenarı varsa, u ve v düğümlerinin
komşu (adjacent or neighbors) olduğu söylenir.
• Bu durumda, u ve v e’nin uç noktaları (endpoints)
olarak adlandırılır ve e’nin u ve v’yi bağladığı
söylenir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
5. Çizge (Graph) Giriş (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Çizgeler, düzlemsel diyagramlarla gösterilir.
• V kümesindeki her v düğümü bir nokta (ya da küçük
çember) ile temsil edilir ve her e = {v1, v2} kenarı, v1 ve v2
uç noktalarını bağlayan bir çizgi ile gösterilir.
• Örnek:
V = {A, B, C, D}
E = {e1, e2, e3, e4, e5}
6. Yönlü ve Yönsüz Kenar
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Yönsüz Kenar (undirected edge):
Çizgi seklinde yönü belirtilmeyen
kenarlar yönsüz kenarlardır.
– Yönsüz kenarlarda (v1,v2) olması ile
(v2,v1) olması arasında fark yoktur.
• Yönlü Kenar (directed edge): Ok
şeklinde gösterilen kenarlar yönlü
kenarlardır.
7. Terminoloji
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
1. Komşu Köşeler (Adjacent): Aralarında
doğrudan bağlantı (kenar) bulunan i ve j
köşeleri komşudur. Diğer köşe çiftleri
komşu değildir.
2. Bağlantı (incident): Komsu i ve j köşeleri
arasındaki kenar (i, j) bağlantıdır.
3. Bir Kösenin Derecesi (degree): Bir
köşeye bağlı olan kenarların sayısıdır.
Soru1: Komşu olmayan köşeler hangileridir?
Soru2: 1’in derecesi kaçtır?
8. Terminoloji (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
4. Yönsüz Çizge (undirected graph): Tüm kenarları
yönsüz olan çizgeye yönsüz çizge denilir. Yönsüz
çizgede bir köşe çifti arasında en fazla bir kenar
olabilir.
5. Yönlü Çizge (directed graph, digraph): Tüm
kenarları yönlü olan çizgeye yönlü çizge adı
verilir. Yönlü çizgede bir köşe çifti arasında ters
yönlerde olmak üzere en fazla iki kenar olabilir.
6. Döngü (Loop): (i, i) seklinde gösterilen ve bir
köşeyi kendine bağlayan kenar.
10. Terminoloji (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
7. Ağırlıklı (Weighted) Çizge: Çizge kenarları
üzerinde ağırlıkları olabilir. Eğer kenarlar üzerinde
ağırlıklar varsa bu tür çizgelere ağırlıklı/maliyetli
çizge (Weighted Graphs) denir. Ağırlık uygulamadan
uygulamaya değişir.
• Şehirler arasındaki uzaklık
• Routerler arası bant genişliği MANİSA
İZMİR BURSA
4
9
8
11. Yol (Path)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Bir yol (path) düğümlerin bir sırasıdır (v0, v1, v2,… vk) öyle ki:
– 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}
• Basit Yol (Simple Path): Tüm düğümlerin farklı olduğu yoldur.
• Daire (Cycle): Başlangıç ve bitiş düğümleri aynı olan basit yol.
• Uzunluk: Bir yol üzerindeki kenarların sayısının toplamıdır.
MANİSA
İZMİR BURSA
4
9
8
Basit Yol: MANİSA, İZMİR
Daire: MANİSA, İZMİR, BURSA, MANİSA
12. Çizge Kullanım Alanları
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Bilgisayar ağlarında, elektriksel ve diğer ağların
analizinde,
• Kimyasal bileşiklerin moleküler yapılarının
araştırılmasında,
• Ulaşım ağlarında (kara, deniz ve havayolları),
• Planlama projelerinde,
• Sosyal alanlarda ve diğer pek çok alanda
kullanılmaktadır.
13. Çizge Kullanım Alanları (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Örnek (Generic)
• V = 6 kişi: John, Mary, Joe, Helen, Tom ve Paul,
sırasıyla yaşları: 12, 15, 12, 15, 13 ve 13.
• E ={(x, y) | Eğer x, y den daha genç ise}
John Joe
Mary Helen
Tom Paul
14. Çizge Kullanım Alanları (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Örnek (Uçuş sistemi)
• Her bir düğüm bir şehri gösterir
• Her bir 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.
• Maliyetleri kenarlara bile ekleyebiliriz. (ağırlıklı), daha sonra
“A’dan B’ ye en ucuz yol hangisidir?” diye sorabiliriz.
15. Çizge Gösterimi
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• İki popüler gösterim bulunmaktadır. Her ikisi de
farklı yönlerden düğüm ve kenar kümelerini gösterir.
1. Komşuluk Matrisi: Çizgeyi göstermek için D
matrisi kullanılır.
2. Komşuluk Listesi: Bağlantılı listelerin bir boyutlu
dizisi kullanılır.
18. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• İki boyutlu dizi ile gerçekleştirilebilir.
• Uygulaması basittir.
– Kenar yaratmak ve kaldırmak kolaydır.
• Hafızada fazla yer kaplar.
Komşuluk Matrisi (devam…)
21. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Bağlı liste içeren dizi ile gerçekleştirimi yapılır.
• Uygulaması daha karmaşıktır.
• Hafıza kullanımı komşuluk matrisine göre daha
optimaldir.
Komşuluk Listesi (devam…)
22. Örnek – Yönlü Çizge
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Komşuluk Listesi
Komşuluk Matrisi
23. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Çizge üzerinde dolaşma; çizge düğümleri ve kenarları
üzerinde istenen bir işi yapacak veya bir problemi
çözecek biçimde hareket etmektir.
• Çizge üzerinde dolaşma yapan birçok yaklaşım ve
yöntem bulunmaktadır. En önemli iki tanesi aşağıdaki
gibidir:
– BFS (Breadth First Search) Yöntemi
– DFS (Depth First Search ) Yöntemi
Çizge Üzerinde Gezinme (Traverse)
24. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
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 (backtracking) ve diğer kenarı dene.
• Tüm düğümler gezilene kadar devam et.
• Genelde Stack kullanarak gerçekleştirim yapılır.
Breadth-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
ilerle.
• Genelde Queue kullanarak gerçekleştirim yapılır.
Çizge Üzerinde Gezinme (devam…)
25. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
DFS Sözde Kod
DFS (Graph G) {
Stack S; Integer x, t;
while (G_ziyaret_edilmeyen_x_düğümüne_sahipse){
visit(x);
push(x,S);
while (S boş değilse){
t := peek(S);
if(t_ziyaret_edilmeyen_y_komşusuna_sahipse)
{
visit(y);
push(y,S);
}
else
pop(S);
}
}
}
27. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
BFS Sözde Kod
BFS (Graph G) {
Queue Q;
Integer x, z, y;
while (G_ziyaret_edilmeyen_x_düğümüne_sahipse)
{
visit(x);
Insert(x,Q);
while (Q boş değilse){
z := Remove(Q);
for all (z nin tüm y komşuları için){
visit(y);
Insert(y,Q);
}
}
}
}
31. Yararlanılan Kaynaklar
• Ders Kitabı:
• Data Structures through JAVA, V.V.Muniswamy
• Yardımcı Okumalar:
• Data Structures and Algorithms in Java, Narashima
Karumanchi
• Data Structures, Algorithms and Applications in Java,
Sartaj Sahni
• Algorithms, Robert Sedgewick
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları