Bölüm 11: Çizgeler

Bölüm 11: Çizgeler · Çalışma Soruları
Komşuluk matrisiBFS ve DFSMatristen çizgeDijkstraGösterim seçimi
Klasik · çoktan seçmeli · adım adım çalıştırmalı · ucu açık sorular. Önce kendiniz çözün, sonra cevabı açın. · Sercan KÜLCÜ

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.

ABCDEF
Cevabı göster
ABCDEF
A011000
B000100
C010010
D000001
E000101
F100000

(b) A: B, C; B: D; C: B, E; D: F; E: D, F; F: A

ABCDEF
giriş121212
çıkış212121

(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?

01234567
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?

012345
0001100
1000110
2100001
3110001
4010001
5001110
Cevabı göster 023514

(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.

421581026317ABCDEFG
Cevabı göster
DüğümABCDEFG
Mesafe0328101314
Önceki–CABDEF

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
MatrisListe
(a) BellekO(V²)O(V + E)
(b) Komşu mu?O(1)O(derece)
(c) Komşuları gezO(V)O(derece)
(d) BFS / DFSO(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.

012345

Önce tahmin edin: BFS sırası ne olur?

012345

0 kuyruğa eklenir ve görüldü işaretlenir.

012345

0 kuyruktan çıkar ve yazdırılır.

012345

Görülmemiş komşular 1, 2 işaretlenip kuyruğa eklenir.

012345

1 kuyruktan çıkar ve yazdırılır.

012345

Görülmemiş komşular 3 işaretlenip kuyruğa eklenir.

012345

2 kuyruktan çıkar ve yazdırılır.

012345

Görülmemiş komşular 4 işaretlenip kuyruğa eklenir.

012345

3 kuyruktan çıkar ve yazdırılır.

012345

Görülmemiş komşular 5 işaretlenip kuyruğa eklenir.

012345

4 kuyruktan çıkar ve yazdırılır.

012345

5 kuyruktan çıkar ve yazdırılır.

012345

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

  1. 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ü?
  2. "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.

Son

Bölüm 11: Çizgeler: Çalışma Soruları
Konu anlatımı: Çizgeler sunumu
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.