Bölüm 11: Çizgeler
Klasik Soru · Çizge
Soru 1: Yönlü Çizge Gösterimi
Yönlü çizgeyi (a) komşuluk matrisi ve (b) komşuluk listesi ile gösteriniz. (c) Her düğümün giriş ve çıkış derecesini bulunuz. (d) A'dan F'ye bir yol ve çizgedeki bir döngüyü yazınız.
Cevabı göster
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| A | 0 | 1 | 1 | 0 | 0 | 0 |
| B | 0 | 0 | 0 | 1 | 0 | 0 |
| C | 0 | 1 | 0 | 0 | 1 | 0 |
| D | 0 | 0 | 0 | 0 | 0 | 1 |
| E | 0 | 0 | 0 | 1 | 0 | 1 |
| F | 1 | 0 | 0 | 0 | 0 | 0 |
(b) A: B, C; B: D; C: B, E; D: F; E: D, F; F: A
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| giriş | 1 | 2 | 1 | 2 | 1 | 2 |
| çıkış | 2 | 1 | 2 | 1 | 2 | 1 |
(d) Yol: A → C → E → F. Döngü: A → B → D → F → A.
Yönlü çizgede matris simetrik değildir; satır toplamı çıkış, sütun toplamı giriş derecesidir.
Klasik Soru · Çizge
Soru 2: BFS ve DFS
Yönsüz çizgede 0 düğümünden başlayarak (a) genişlik öncelikli (BFS) ve (b) özyinelemeli derinlik öncelikli (DFS) gezinme sırasını yazınız. Komşular küçükten büyüğe seçilecektir. (c) BFS ağacında 0'dan 7'ye en kısa yol kaç kenardır?
Cevabı göster
(a) BFS: 0 1 2 5 3 4 6 7
Kuyruk: [0] → 1, 2, 5 eklenir → 1'den 3, 4 → 2'den 6 → 3'ten 7.
(b) DFS: 0 1 3 7 4 6 2 5
0 → 1 → 3 → 7 → 4 (çıkmaz, 7'ye dön) → 6 → 2 → 5. Her düğümde ziyaret edilmemiş en küçük komşuya inilir; kalmayınca geri dönülür.
(c) 0 → 1 → 3 → 7: 3 kenar. Ağırlıksız çizgede BFS en kısa yolu (kenar sayısı) verir; DFS vermez.
BFS kuyruk, DFS yığın (ya da özyineleme) kullanır; ikisi de O(V + E).
Klasik Soru · Çizge
Soru 3: Matristen Çizgeye
Yönsüz çizgenin komşuluk matrisi verilmiştir. (a) Çizgeyi çiziniz. (b) 0'dan başlayarak BFS ve DFS sırasını yazınız (komşular küçükten büyüğe). (c) Kenar sayısı kaçtır? (d) DFS ile BFS hangi durumda aynı sırayı verir?
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 | 0 |
| 2 | 1 | 0 | 0 | 0 | 0 | 1 |
| 3 | 1 | 1 | 0 | 0 | 0 | 1 |
| 4 | 0 | 1 | 0 | 0 | 0 | 1 |
| 5 | 0 | 0 | 1 | 1 | 1 | 0 |
Cevabı göster
(b) BFS: 0 2 3 5 1 4 · DFS: 0 2 5 3 1 4
(c) Matristeki 1'lerin toplamı 14; yönsüz çizgede her kenar iki kez sayılır → 7 kenar.
(d) Çizge dallanmayan bir yol (zincir) ise ya da tek düğümlüyse; örneğin 0 – 1 – 2 – 3. Dallanma olduğunda BFS komşuları, DFS derinliği önce gezer.
Klasik Soru · Çizge
Soru 4: Dijkstra Algoritması
Ağırlıklı yönsüz çizgede A düğümünden diğer tüm düğümlere en kısa mesafeleri Dijkstra algoritmasıyla bulunuz. Düğümlerin kesinleşme sırasını ve her düğüm için bir önceki düğümü (yolu) tablo hâlinde veriniz.
Cevabı göster
| Düğüm | A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|---|
| Mesafe | 0 | 3 | 2 | 8 | 10 | 13 | 14 |
| Önceki | – | C | A | B | D | E | F |
Kesinleşme sırası: A C B D E F G
- C = 2 kesinleşir; B, A–B (4) yerine A–C–B ile 3 olur.
- D = 3 + 5 = 8 (A–C–D = 10'dan iyi). E = 8 + 2 = 10 (C–E ile 12'den iyi).
- F = 10 + 3 = 13 (D–F ile 14). G = 13 + 1 = 14 (E–G ile 17).
Örnek yol: G için A→C→B→D→E→F→G. Öncelikli kuyrukla O((V + E) log V). Negatif ağırlıklarda Dijkstra doğru çalışmaz.
Klasik Soru · Çizge
Soru 5: Matris mi, Liste mi?
V düğüm ve E kenarlı bir çizge için komşuluk matrisi ile komşuluk listesini karşılaştırınız: (a) bellek, (b) "u ile v komşu mu?" sorgusu, (c) bir düğümün tüm komşularını gezme, (d) BFS/DFS süresi. 1 milyon kullanıcılı, kullanıcı başına ortalama 200 arkadaşlı bir sosyal ağ için hangisini seçersiniz?
Cevabı göster
| Matris | Liste | |
|---|---|---|
| (a) Bellek | O(V²) | O(V + E) |
| (b) Komşu mu? | O(1) | O(derece) |
| (c) Komşuları gez | O(V) | O(derece) |
| (d) BFS / DFS | O(V²) | O(V + E) |
Sosyal ağ seyrek bir çizgedir: V = 10⁶, E ≈ 10⁸ (yönsüz için 10⁸ / 2 kenar).
- Matris: 10¹² hücre → bit başına bile ≈ 125 GB, neredeyse tamamı 0.
- Liste: ≈ 2 × 10⁸ giriş → birkaç GB.
Seçim: komşuluk listesi. Matris, yoğun (E ≈ V²) ve küçük çizgelerde ya da sık "komşu mu?" sorgusunda tercih edilir.
Çoktan Seçmeli · Çizge
Test 1
6 düğümlü yönsüz tam çizgede (her düğüm çifti komşu) kaç kenar vardır?
n(n − 1) / 2 = 6 · 5 / 2 = 15.
Yönsüz bir çizgede düğüm dereceleri 3, 2, 2, 3, 2, 2. Kenar sayısı kaçtır?
Her kenar iki düğümün derecesine katkı yapar: Σ derece = 2E → 14 = 2E → E = 7.
Çoktan Seçmeli · Çizge
Test 2
Ağırlıksız çizgede iki düğüm arasındaki en kısa yolu (kenar sayısı) bulmak için en uygun algoritma hangisidir?
BFS düğümleri kaynaktan uzaklık sırasıyla keşfeder; ilk ulaşıldığı yol en kısadır.
Çizgede negatif ağırlıklı kenar varsa Dijkstra algoritması için hangisi doğrudur?
Dijkstra kesinleşen düğüme daha kısa yol bulunamayacağını varsayar; negatif kenar bu varsayımı bozar. Bellman-Ford kullanılmalıdır.
Adım Adım Çalıştırma · Çizge
Genişlik Öncelikli Arama
Komşuluk listesi: 0:[1,2] 1:[0,3] 2:[0,3,4] 3:[1,2,5] 4:[2,5] 5:[3,4]. 0'dan BFS'yi izleyin.
Önce tahmin edin: BFS sırası ne olur?
0 kuyruğa eklenir ve görüldü işaretlenir.
0 kuyruktan çıkar ve yazdırılır.
Görülmemiş komşular 1, 2 işaretlenip kuyruğa eklenir.
1 kuyruktan çıkar ve yazdırılır.
Görülmemiş komşular 3 işaretlenip kuyruğa eklenir.
2 kuyruktan çıkar ve yazdırılır.
Görülmemiş komşular 4 işaretlenip kuyruğa eklenir.
3 kuyruktan çıkar ve yazdırılır.
Görülmemiş komşular 5 işaretlenip kuyruğa eklenir.
4 kuyruktan çıkar ve yazdırılır.
5 kuyruktan çıkar ve yazdırılır.
Kuyruk boş → bitti. Her düğüm ve kenar bir kez: O(V + E).
boolean[] gor = new boolean[6]; Queue<Integer> q = new LinkedList<>(); q.add(0); gor[0] = true; while (!q.isEmpty()) { int u = q.poll(); System.out.print(u + " "); for (int v : komsu[u]) if (!gor[v]) { gor[v] = true; q.add(v); } }
Ucu Açık Soru · Çizge
Şehir İçi Ulaşım
- Bir şehir içi ulaşım uygulaması için çizge modeli kurun: düğümler, kenarlar ve ağırlıklar ne olmalı? Çizge yönlü mü, yönsüz mü?
- "En az aktarmalı" ve "en kısa süreli" rota için hangi algoritmaları, hangi ağırlıklarla kullanırsınız? Duraklarda bekleme süresini modele nasıl katarsınız?
Örnek cevap ve değerlendirme ölçütleri
1. Düğüm: durak. Kenar: bir hattın ardışık iki durağı arasındaki bağlantı (ve yürüme mesafesindeki duraklar arası yürüyüş kenarı). Ağırlık: seyahat süresi (dakika). Hatlar tek yönlü çalışabildiğinden yönlü çizge uygundur. Durak sayısına göre kenar az (seyrek) → komşuluk listesi.
2. En kısa süre: süre ağırlıklı Dijkstra (ağırlıklar negatif değil). En az aktarma: düğümler hatlar olsun, ortak durağı olan hatlar arasında kenar olsun; ağırlıksız çizgede BFS en az hat değişimini verir. Bekleme: düğümü (durak, hat) çiftlerine bölüp hat değiştirme kenarına ortalama bekleme süresi ağırlığı verilir. Gerçek zamanlı tarife için zamana bağlı ağırlıklar gerekir.
Değerlendirme: düğüm/kenar/ağırlık seçimi · yönlülük gerekçesi · iki amaç için doğru algoritma · bekleme/aktarmanın modellenmesi.