Bölüm 4.3: Minimum Kapsayan Ağaç Algoritmaları
Çoktan Seçmeli · MST Kavramı
Soru 1: Kenar Sayıları
12 düğümlü, 20 kenarlı bağlı, yönsüz ve ağırlıklı bir çizgenin minimum kapsayan ağacında kaç kenar vardır ve kaç kenar ağacın dışında kalır?
B: Her kapsayan ağaç bağlı ve döngüsüzdür, V − 1 = 11 kenarı vardır; kalan 20 − 11 = 9 kenar dışarıda kalır. Bu 9 kenarın her biri ağaca eklenirse bir döngü kapatır. A, düğüm sayısı kadar kenar sanır (o zaman bir döngü olurdu).
Çoktan Seçmeli · MST Kavramı
Soru 2: Kesim Özelliği
Düğümler {a, b} (yeşil) ve {c, d, e} (mavi) olarak ikiye ayrılıyor; kesimi geçen kenarlar kesikli çizilmiştir. Kesim özelliğine göre hangi kenar kesinlikle bir MST'ye aittir?
C: Kesimi geçen kenarlar a–e (6), b–e (4), b–c (5); en hafifi b–e'dir ve bir MST'de yer alır. a–b ve e–c de MST'dedir ama bu kesim onları açıklamaz: kesimi geçmezler. Kruskal ve Prim her adımda bu özelliği kullanır.
Çoktan Seçmeli · MST Kavramı
Soru 3: Döngü Özelliği
Aynı çizgede b–e–c döngüsü kesikli çizilmiştir. Döngü özelliği yalnızca bu döngüye uygulanırsa hangi kenarın hiçbir MST'de yer almadığı söylenebilir?
A: Bir döngünün tek en ağır kenarı hiçbir MST'de olamaz; onu çıkarıp döngünün öteki kenarlarıyla bağlantıyı korumak her zaman daha ucuzdur. B ve C bu döngüden dolayı dışlanamaz (gerçekten de MST'dedirler). Ters silme algoritması bu özelliğe dayanır.
Çoktan Seçmeli · MST Kavramı
Soru 4: Ağırlıklara Sabit Eklemek
6 düğümlü bağlı bir çizgenin MST ağırlığı 20'dir. Her kenarın ağırlığına 3 eklenirse ne olur?
C: Her kapsayan ağaçta tam V − 1 = 5 kenar vardır; hepsinin ağırlığı 5 · 3 = 15 artar, sıralama korunur: aynı ağaç minimum kalır ve toplam 20 + 15 = 35 olur. B, 6 kenar sayar. En kısa yol için bu doğru değildir: farklı kenar sayılı yollar farklı miktarda uzar.
Klasik Soru · MST Kavramı
Soru 5: Birden Çok MST
Bir çizgenin birden fazla minimum kapsayan ağacı olabilir mi? Yandaki çizge üzerinde açıklayın. Hangi koşulda MST tektir?
Cevabı göster
Evet. Eşit ağırlıklı kenarlar arasında seçim yapılabiliyorsa farklı ağaçlar aynı toplamı verir.
S–T ve A–B (1) her iki ağaçta da vardır; dört düğümü bağlamak için bir kenar daha gerekir: T–B ya da S–A (ikisi de 2). İki MST de 4 ağırlığındadır.
Tüm kenar ağırlıkları farklıysa MST tektir: her kesimin en hafif kenarı tektir ve her MST'de bulunmak zorundadır.
Çoktan Seçmeli · MST Kavramı
Soru 6: Kaç Kapsayan Ağaç?
4 düğümlü tam çizgenin (K₄, 6 kenar) kaç farklı kapsayan ağacı vardır?
C: Cayley formülü n düğümlü tam çizge için nⁿ⁻² kapsayan ağaç verir: 4² = 16. Sayma ile de görülebilir: 6 kenardan 3'ünü seçmenin C(6, 3) = 20 yolu vardır; bunlardan 4'ü bir üçgen oluşturur (K₄'te 4 üçgen var) → 20 − 4 = 16. D, döngü oluşturan seçimleri de sayar. Bu sayı hızla büyüdüğü için hepsini denemek yerine açgözlü algoritmalar kullanılır.
Klasik Soru · MST Kavramı
Soru 7: MST'nin Tekliği
Tüm kenar ağırlıkları birbirinden farklı olan bağlı bir çizgede MST'nin tek olduğunu kesim özelliğiyle gösterin.
Cevabı göster
T ve T′ iki farklı MST olsun. T'de olup T′'de olmayan bir e = u–v kenarı seçelim. T'den e silinince ağaç iki parçaya ayrılır: bu bir kesim (S, V − S) tanımlar ve e onu geçer.
T′ bağlı olduğu için bu kesimi geçen bir e′ kenarı içerir. Ağırlıklar farklı olduğundan kesimi geçen en hafif kenar tektir. e en hafifse T′ − e′ + e, T′'den hafif bir kapsayan ağaç olur (çelişki); e′ en hafifse T − e + e′, T'den hafif olur (çelişki).
Yani her MST kenarı, tanımladığı kesimin tek en hafif kenarıdır ve her MST'de bulunmak zorundadır → MST tektir. Eşit ağırlıklar olunca bu tekliği kaybedebiliriz (Birden Çok MST sorusu).
Çoktan Seçmeli · MST Kavramı
Soru 8: MST ve En Kısa Yol
Minimum kapsayan ağaç için aşağıdakilerden hangisi doğrudur?
B: MST algoritmaları yalnızca ağırlıkları karşılaştırır; negatif değer bir sorun oluşturmaz (sorun Dijkstra'ya özgüdür). A yanlıştır: MST toplam ağırlığı küçültür, düğüm çiftlerinin uzaklığını değil. C: Prim'in başlangıcı toplamı değiştirmez. D: yönlü karşılığı Chu–Liu/Edmonds algoritmasıdır.
Çıktı Sorusu · Kruskal
Soru 9: Kruskal Kenar Sırası
Kruskal algoritması bu çizgede hangi kenarları hangi sırayla inceler? Hangileri eklenir, hangileri reddedilir? MST'nin toplam ağırlığı nedir?
Cevabı göster
| kenar | A–C | D–F | B–C | A–B | C–E | B–D |
|---|---|---|---|---|---|---|
| ağırlık | 1 | 2 | 3 | 4 | 5 | 6 |
| sonuç | ✓ | ✓ | ✓ | ✗ döngü | ✓ | ✓ |
A–B (4) reddedilir: A ve B, A–C–B yoluyla zaten aynı ağaçtadır. B–D (6) beşinci kenardır: V − 1 = 5 kenar tamamlandı, kalan kenarlara (D–E, C–D, E–F) bakılmaz.
w(T) = 1 + 2 + 3 + 5 + 6 = 17.
Adım Adım Çalıştırma · Kruskal
Soru 10: Kruskal Kodu İzleme
kruskal(6, ke) hangi kenarları ekler? Ebeveyn dizisi (ata) ve w(T) nasıl değişir?
Kenarlar artan sıralandı: (4,5)=1, (1,3)=2, (2,4)=3, (1,2)=4, (2,3)=5, (3,5)=6, (4,6)=7, (5,6)=8.
ata[i] = i: her düğüm kendi ağacının kökü (6 ağaçlı orman). Ebeveyn dizisi 1..6 için gösteriliyor.
(4,5) = 1: bul(4) = 4, bul(5) = 5 → farklı ağaçlar, kenar eklenir; ata[4] = 5.
(1,3) = 2: bul(1) = 1, bul(3) = 3 → farklı ağaçlar, kenar eklenir; ata[1] = 3.
(2,4) = 3: bul(2) = 2, bul(4) = 5 → farklı ağaçlar, kenar eklenir; ata[2] = 5.
(1,2) = 4: bul(1) = 3, bul(2) = 5 → farklı ağaçlar, kenar eklenir; ata[3] = 5.
(2,3) = 5: bul(2) = bul(3) = 5 → aynı ağaç, eklenirse döngü oluşur; atlanır.
(3,5) = 6: bul(3) = bul(5) = 5 → aynı ağaç, eklenirse döngü oluşur; atlanır.
(4,6) = 7: bul(4) = 5, bul(6) = 6 → farklı ağaçlar, kenar eklenir; ata[5] = 6.
agac.size() = 5 = V − 1: döngü biter; (5,6) = 8 hiç incelenmez. w(T) = 17.
void kruskal(int V, List<Kenar> ke) { Collections.sort(ke); // artan int[] ata = new int[V + 1]; for (int i = 1; i <= V; i++) ata[i] = i; List<Kenar> agac = new ArrayList<>(); int k = 0; while (agac.size() < V - 1) { Kenar e = ke.get(k++); int x = bul(ata, e.u); int y = bul(ata, e.v); if (x != y) { // ayrı ağaç agac.add(e); ata[x] = y; // birleştir } } }
Çoktan Seçmeli · Kruskal
Soru 11: Kruskal'ın Karmaşıklığı
Kruskal algoritmasının zaman karmaşıklığı O(E log E)'dir. Bu sınırı hangi adım belirler?
D: Sıralama O(E log E) sürer; yol kısaltma ve rütbeyle bul/birleştir işlemleri toplam O(E · α(V)), yani neredeyse doğrusaldır. Kenarlar zaten sıralıysa ya da ağırlıklar küçük tam sayıysa (saymalı sıralama) Kruskal neredeyse doğrusal çalışır. E ≤ V² olduğundan O(E log E) = O(E log V).
Çoktan Seçmeli · Kruskal
Soru 12: Maksimum Kapsayan Ağaç
Toplam ağırlığı en büyük kapsayan ağacı bulmak için Kruskal algoritmasında ne değiştirilmelidir?
A: Kesim özelliğinin simetriği (kesimin en ağır kenarı bir maksimum kapsayan ağaca aittir) aynı açgözlü yaklaşımı doğrular. Eşdeğer olarak tüm ağırlıklar −w yapılıp standart Kruskal çalıştırılabilir. C yanlıştır: en ağır V − 1 kenar döngü oluşturabilir ve ağaç olmayabilir.
Çoktan Seçmeli · Kruskal
Soru 13: Döngü Denetimi
Bir öğrenci Kruskal'da döngü denetimini "u ile v arasında MST'de doğrudan kenar var mı?" sorusuyla yapıyor. Bu neden yanlıştır?
B: Kenar yine döngü kapatır. Döngü, u ve v'nin aynı bileşende olmasıyla oluşur; aradaki yolun uzunluğu önemli değildir. Örneğin a–b ve b–c eklendikten sonra a–c'nin doğrudan karşılığı yoktur ama a–c bir döngü kapatır. Doğru soru "bul(u) == bul(v) mi?"dir.
Adım Adım Çalıştırma · Union-Find
Soru 14: Union-Find İzleme
Program ne yazdırır? Birleştirmeler ve yol kısaltma ormanı nasıl değiştirir?
Her düğüm kendi kümesinin kökü (yeşil). Oklar ata[i]'yi gösterir; kök kendini gösterir.
birlestir(0, 1): bul(0) = 0, bul(1) = 1 → ata[0] = 1.
birlestir(1, 2): bul(1) = 1, bul(2) = 2 → ata[1] = 2.
birlestir(3, 4): bul(3) = 3, bul(4) = 4 → ata[3] = 4.
birlestir(2, 4): bul(2) = 2 (0 → 1 → 2 zincirinin kökü), bul(4) = 4 → ata[2] = 4. Zincir uzadı: bul(0) artık 3 adım sürer.
birlestir(5, 0): bul(5) = 5; bul(0) 0 → 1 → 2 → 4 yolunu izler ve dönerken yol kısaltma ile 0, 1, 2'yi doğrudan 4'e bağlar. Sonra ata[5] = 4.
Tek küme kaldı, kökü 4. Çıktı: [4, 4, 4, 4, 4, 4]. Sonraki tüm bul çağrıları en çok 1 adım sürer.
int bul(int[] ata, int i) { if (ata[i] != i) ata[i] = bul(ata, ata[i]); // yol kısaltma return ata[i]; } void birlestir(int[] ata, int x, int y) { ata[bul(ata, x)] = bul(ata, y); } // main for (int i = 0; i < 6; i++) ata[i] = i; birlestir(ata, 0, 1); birlestir(ata, 1, 2); birlestir(ata, 3, 4); birlestir(ata, 2, 4); birlestir(ata, 5, 0); System.out.println(Arrays.toString(ata));
Çıktı Sorusu · Union-Find
Soru 15: Union-Find Durumu
Union-find izleme sorusundaki bul ve birlestir ile 0..5 için sırayla birlestir(0, 3), birlestir(1, 3), birlestir(4, 5), birlestir(5, 2) çağrılıyor. Son ebeveyn dizisi (ata) nedir? Sonra bul(4) çağrılırsa bu dizi ne olur? Kaç küme vardır?
Cevabı göster
birlestir(0, 3): ata[0] = 3 · birlestir(1, 3): ata[1] = 3 · birlestir(4, 5): ata[4] = 5 · birlestir(5, 2): ata[5] = 2.
ata = [3, 3, 2, 3, 5, 2]. Kümeler: {0, 1, 3} (kök 3) ve {2, 4, 5} (kök 2) → 2 küme.
bul(4): 4 → 5 → 2; dönüşte ata[4] = 2 olur: ata = [3, 3, 2, 3, 2, 2]. Yol kısaltma yalnızca izlenen yoldaki düğümleri değiştirir.
Çıktı Sorusu · Kruskal
Soru 16: Bağlı Olmayan Çizge
Kruskal kodu V = 5 ve kenarlar (1,2,3), (2,3,1), (1,3,2), (4,5,4) ile çağrılıyor. Ne olur? Kodu minimum kapsayan orman döndürecek biçimde nasıl düzeltirsiniz?
while (agac.size() < V - 1) {
Kenar e = ke.get(k++);
...
}Cevabı göster
Sıralı kenarlar: (2,3) ✓, (1,3) ✓, (1,2) ✗ döngü, (4,5) ✓. agac.size() = 3 < V − 1 = 4 olduğundan döngü sürer ve ke.get(4) çağrılır: IndexOutOfBoundsException. Çizge bağlı değildir ({1, 2, 3} ve {4, 5}); MST yoktur.
Düzeltme: while (k < ke.size() && agac.size() < V - 1). Sonda agac.size() < V − 1 ise çizge bağlı değildir; agac minimum kapsayan ormandır (burada 3 kenar, ağırlık 1 + 2 + 4 = 7).
Adım Adım Çalıştırma · Prim
Soru 17: Prim Kodu İzleme
prim(G, 0) düğümleri hangi sırayla ağaca alır? anahtar ve ebeveyn dizileri nasıl değişir?
Komşuluk matrisli Prim, kaynak 0. anahtar[0] = 0, diğerleri ∞ (etiket a = anahtar).
En küçük anahtarlı u = 0 ağaca girer.
Ağaçta olmayan komşular güncellenir: anahtar[1]: ∞ → 2, anahtar[3]: ∞ → 6; ebeveynleri 0.
En küçük anahtarlı u = 1 ağaca girer ve (0,1) = 2 kenarı MST'ye eklenir.
Ağaçta olmayan komşular güncellenir: anahtar[2]: ∞ → 3, anahtar[4]: ∞ → 5; ebeveynleri 1.
En küçük anahtarlı u = 2 ağaca girer ve (1,2) = 3 kenarı MST'ye eklenir.
En küçük anahtarlı u = 4 ağaca girer ve (1,4) = 5 kenarı MST'ye eklenir.
Döngü V − 1 = 4 kez döndü; son kalan düğüm 3'ün kenarı (0,3) = 6 de hazırdır. MST = (ata[v], v) kenarları, w(T) = 16.
void prim(int[][] G, int kaynak) { int V = G.length; Arrays.fill(anahtar, Integer.MAX_VALUE); anahtar[kaynak] = 0; ata[kaynak] = -1; for (int s = 0; s < V - 1; s++) { int u = enKucukAnahtar(anahtar, agacta); agacta[u] = true; for (int v = 0; v < V; v++) if (G[u][v] != 0 && !agacta[v] && G[u][v] < anahtar[v]) { anahtar[v] = G[u][v]; ata[v] = u; } } }
Çıktı Sorusu · Prim
Soru 18: Prim Ekleme Sırası
Kruskal kenar sırası sorusundaki çizgede Prim algoritması A'dan başlatılıyor. Kenarlar MST'ye hangi sırayla eklenir? Sonuç Kruskal'ınkiyle aynı mıdır?
Cevabı göster
Prim: A–C (1), C–B (3), C–E (5), B–D (6), D–F (2)
Her adımda ağaçla dışarısı arasındaki en ucuz kenar seçilir: A–C (1), sonra C–B (3); ağaçtan çıkan adaylar C–E (5), B–D (6) → C–E; sonra B–D (6) (E–D 7'den ucuz); en son D–F (2).
Kruskal: A–C, D–F, B–C, C–E, B–D. Aynı ağaç (toplam 17), farklı sıra: D–F en hafif ikinci kenar olduğu hâlde Prim onu ancak D ağaca girince ekleyebilir.
Çıktı Sorusu · Prim
Soru 19: Prim'de Toplam Yazmak
Prim kodundaki koşul ve atama anahtar[u] + G[u][v] < anahtar[v] ve anahtar[v] = anahtar[u] + G[u][v] olarak yanlış yazılıyor. Kaynak 0 için (ata[v], v) kenarlarından oluşan ağaç ve toplam ağırlığı nedir? Doğru Prim ne verir?
Cevabı göster
Hatalı kod Dijkstra olur ve en kısa yollar ağacını verir: ata = [−, 0, 0, 0] → kenarlar 0–1, 0–2, 0–3, toplam 9. (0'dan 2'ye 3, 3'e 4 en kısa uzaklıktır.)
Doğru Prim: ata = [−, 0, 1, 2] → 0–1, 1–2, 2–3, toplam 6.
Prim'de anahtar, düğümü ağaca bağlayan tek kenarın ağırlığıdır; Dijkstra'da ise kaynaktan toplam uzaklıktır. En kısa yollar ağacı kapsayan bir ağaçtır ama minimum olmak zorunda değildir.
Çoktan Seçmeli · Prim
Soru 20: Prim: Matris mi, Heap mi?
V = 1000 düğümlü bir çizgede Prim'in matris sürümü (O(V²)) ile ikili heap sürümü (O(E log V)) karşılaştırılıyor. E = 5 000 ve E = 500 000 için hangisi daha az iş yapar?
C: V² = 10⁶. E log V ≈ 5 000 · 10 = 5 · 10⁴ (seyrek: heap kazanır) ve ≈ 500 000 · 10 = 5 · 10⁶ (yoğun: matris kazanır). Yoğun çizgede (E ≈ V²) heap sürümü O(V² log V)'ye çıkar.
Adım Adım Çalıştırma · Borůvka
Soru 21: Borůvka İzleme
Borůvka her turda hangi kenarları seçer? Kaç tur sürer, MST ağırlığı nedir?
Başlangıçta her düğüm ayrı bir bileşen (7 bileşen, farklı renkler).
Tur 1, en ucuz dış kenarlar (kesikli): {A}: AD=4, {B}: AB=7, {C}: CE=5, {D}: AD=4, {E}: CE=5, {F}: DF=6, {G}: EG=8.
Eklenen: AD=4, AB=7, CE=5, DF=6, EG=8 (iki kez seçilen kenar ikinci kez atlanır). Kalan bileşen: 2; toplam 30.
Tur 2, en ucuz dış kenarlar (kesikli): {ABDF}: BE=10, {CEG}: BE=10.
Eklenen: BE=10 (iki kez seçilen kenar ikinci kez atlanır). Kalan bileşen: 1; toplam 40.
Tek bileşen kaldı: 2 turda MST = 40 (6 kenar). Kenarlar sıralanmadı; her tur tüm kenarları bir kez taradı.
while (bilesenSayisi > 1) { Kenar[] enUcuz = new Kenar[V]; for (Kenar e : kenarlar) { // 1) en ucuzlar int k1 = bul(ata, e.u), k2 = bul(ata, e.v); if (k1 == k2) continue; if (enUcuz[k1] == null || e.w < enUcuz[k1].w) enUcuz[k1] = e; if (enUcuz[k2] == null || e.w < enUcuz[k2].w) enUcuz[k2] = e; } for (Kenar e : enUcuz) { // 2) hepsini ekle if (e == null) continue; int k1 = bul(ata, e.u), k2 = bul(ata, e.v); if (k1 == k2) continue; agac.add(e); ata[k1] = k2; bilesenSayisi--; } }
Çıktı Sorusu · Borůvka
Soru 22: Borůvka Turları
Borůvka bu çizgede kaç tur çalışır? Her turda hangi kenarlar eklenir? MST ağırlığı nedir?
Cevabı göster
Tur 1: A → AB (2), B → BC (1), C → BC (1), D → BD (4), E → CE (6), F → EF (8). Farklı kenarlar: AB, BC, BD, CE, EF. BC iki kez seçilir ama bir kez eklenir.
Eklenen 5 kenar 6 düğümü tek bileşene bağlar: 1 tur yeter. MST = 2 + 1 + 4 + 6 + 8 = 21.
Kruskal aynı kenarları 1, 2, 4, 6, 8 sırasıyla tek tek eklerdi; C–A (3) ve C–D (5) gibi kenarlar döngü kapatır.
Çoktan Seçmeli · Borůvka
Soru 23: Borůvka Tur Sayısı
V = 1000 düğümlü bağlı bir çizgede Borůvka algoritması en fazla kaç tur çalışır ve toplam zaman nedir?
C: Her turda her bileşen en az bir başka bileşenle birleşir, bileşen sayısı en az yarıya iner: ⌈log₂ 1000⌉ = 10 tur. Her tur tüm kenarları bir kez tarar (O(E)) → O(E log V). A, her turda yalnızca bir kenar eklendiğini varsayar (Kruskal'ın adım sayısı).
Çoktan Seçmeli · Borůvka
Soru 24: Eşitlik Bozucu
Üç kenarı da 5 olan x–y–z üçgeninde Borůvka'nın ilk turunda x en ucuz kenar olarak x–y'yi, y y–z'yi, z z–x'i seçiyor (tutarsız eşitlik bozma). Seçilenler eklenirse ne olur?
A: Kenarlar "hepsi birden" eklendiğinde her biri iki farklı bileşeni bağlıyor gibi görünür ve x–y–z döngüsü oluşur. Bu yüzden tutarlı bir eşitlik bozucu (ör. ağırlık eşitse küçük indisli kenar) şarttır. Ders kodundaki birleştirme öncesi k1 == k2 denetimi kenarları tek tek eklerken bu sorunu da yakalar: üçüncü kenar atlanır.
Adım Adım Çalıştırma · Ters Silme
Soru 25: Ters Silme İzleme
tersSil hangi kenarları siler, hangilerini geri koyar? Kalan ağacın ağırlığı nedir?
Kenarlar azalan sıralandı: CE(8), CD(7), BC(6), BD(5), AB(4), AC(3), DE(2).
CE(8) silindi, çizge hâlâ bağlı: kenar bir döngünün en ağırıdır, silinmiş kalır.
CD(7) silindi, çizge hâlâ bağlı: kenar bir döngünün en ağırıdır, silinmiş kalır.
BC(6) silindi, çizge hâlâ bağlı: kenar bir döngünün en ağırıdır, silinmiş kalır.
BD(5) silinirse çizge kopar (köprü) → geri konur, i = 1.
AB(4) silinirse çizge kopar (köprü) → geri konur, i = 2.
AC(3) silinirse çizge kopar (köprü) → geri konur, i = 3.
DE(2) silinirse çizge kopar (köprü) → geri konur, i = 4.
i = boyut = 4: döngü biter. Kalan ağaç BD(5), AB(4), AC(3), DE(2) → w = 14.
void tersSil(int V, List<Kenar> ke) { ke.sort((a, b) -> b.w - a.w); // azalan int i = 0; while (i < ke.size()) { Kenar e = ke.remove(i); // geçici sil if (!bagliMi(V, ke)) { ke.add(i, e); // geri koy i++; } } }
Çıktı Sorusu · Ters Silme
Soru 26: Ters Silme Sonucu
Kruskal kenar sırası sorusundaki çizgeye ters silme uygulanıyor. Hangi kenarlar silinir, hangileri kalır? Sonuç Kruskal'ınkiyle karşılaştırın.
Cevabı göster
Azalan sıra: E–F 9, C–D 8, D–E 7, B–D 6, C–E 5, A–B 4, B–C 3, D–F 2, A–C 1.
- E–F (9): silinir (döngüde)
- C–D (8): silinir (döngüde)
- D–E (7): silinir (döngüde)
- B–D (6): kalır (silinirse çizge kopar)
- C–E (5): kalır (silinirse çizge kopar)
- A–B (4): silinir (döngüde)
- B–C (3): kalır (silinirse çizge kopar)
- D–F (2): kalır (silinirse çizge kopar)
- A–C (1): kalır (silinirse çizge kopar)
Kalan 5 kenar: A–C, B–C, C–E, B–D, D–F → toplam 17: Kruskal'ın bulduğu ağacın aynısı (ağırlıklar farklı olduğu için MST tektir).
Çoktan Seçmeli · Ters Silme
Soru 27: Ters Silmenin Maliyeti
Ters silme algoritması her kenar için bir BFS/DFS ile bağlılık testi yapıyor. Toplam zaman karmaşıklığı nedir?
D: E kenarın her biri için O(V + E)'lik bir bağlılık testi yapılır; sıralamanın O(E log E)'si bunun yanında küçük kalır. Bu yüzden ters silme daha çok öğreticidir: Kruskal'ın aynasıdır (küçükleri eklemek yerine büyükleri siler) ve döngü özelliğine dayanır.
Çıktı Sorusu · Karşılaştırma
Soru 28: Darboğaz Yol
Kruskal kenar sırası sorusundaki çizgede E'den F'ye giden yollar arasında en ağır kenarı en hafif olan yol (darboğaz yol) hangisidir? MST'yi kullanarak bulun. Bu yol en kısa yol mudur?
Cevabı göster
MST: A–C, D–F, B–C, C–E, B–D. MST'de E'den F'ye tek yol vardır: E → C → B → D → F; kenarları 5, 3, 6, 2 → en ağır kenar 6.
E → F (9), E → D → F (7), E → C → D → F (8) daha ağır bir kenar içerir; E → C → A → B → D → F de 6'da kalır, yani darboğaz değeri 6'dır. MST'deki yol her zaman bir darboğaz yoldur.
En kısa yol değildir: E → C → B → D → F'nin toplamı 16'dır; E → D → F'nin toplamı 9'dur. MST toplam ağırlığı küçültür, iki düğüm arasındaki uzaklığı değil.
Çoktan Seçmeli · Karşılaştırma
Soru 29: Hangi Algoritma?
Aşağıdaki eşleştirmelerden hangisi yanlıştır?
D yanlıştır: Prim tek bir ağacı büyütür; bağlı olmayan çizgede yalnızca başlangıç düğümünün bileşenini kapsar. Kruskal ve Borůvka doğal olarak minimum kapsayan ormanı verir. Diğer eşleştirmeler sunumdaki karşılaştırma tablosuyla uyumludur.
Klasik Soru · Karşılaştırma
Soru 30: MST ile Kümeleme
Kruskal kodu izleme sorusundaki çizgenin MST'si (1,3), (2,4), (4,5), (1,2), (4,6) kenarlarından oluşuyor. Düğümleri 3 kümeye ayırmak için MST'den hangi kenarlar silinir? Kümeler nelerdir? Yöntemin adı nedir?
Cevabı göster
k = 3 küme için MST'nin en ağır k − 1 = 2 kenarı silinir: (4,6) = 7 ve (1,2) = 4.
Kümeler: {1, 3}, {2, 4, 5}, {6}.
Bu, tek bağlantılı kümelemedir (single-linkage): Kruskal'ı V − k kenar ekledikten sonra durdurmakla aynı sonucu verir. Kümeler arası en yakın iki nokta uzaklığı (en küçük ayrım) en büyük olur.