Bölüm 17: Minimum Yayılım Ağaçları
Hazırlık
Başlamadan Önce
Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.
Yayılım ağacı ve Maliyet
Bağlı çizgenin tüm düğümlerini n-1 kenarla bağlamak.
MST kaç kenar içerir?
Giriş
Öğrenme Çıktıları
Bağlı çizgenin tüm düğümlerini n-1 kenarla bağlamak.
Güvenli en ucuz kenarı geri dönmeden seçmek.
Kenarları sıralayıp DSU ile döngüyü engellemek.
Büyüyen ağacın dışa çıkan en ucuz kenarını seçmek.
Temel Kavramlar
Amaç bütün düğümleri en düşük toplam maliyetle bağlamaktır
Minimum yayılım ağacı, tek bir kaynaktan yol bulmaz; çizgenin tamamı için toplam kenar maliyetini küçültür.
Tüm düğümler ağaçta olmalıdır.
Seçilen kenarlar döngü oluşturmaz.
n düğümlü her ağaç bu sayıda kenar taşır.
Seçilen kenar ağırlıkları toplamı en küçüktür.
Temel Kavramlar
Kavram Haritası
Gösterim
Kruskal kenar odaklı, Prim düğüm kümesi odaklıdır
| Kruskal | Prim | |
|---|---|---|
| Başlangıç | boş orman | bir düğüm |
| Seçim | genel en ucuz güvenli kenar | ağaçtan dışarı en ucuz kenar |
| Yardımcı yapı | DSU + sıralama | öncelik kuyruğu |
C ile Gerçekleştirim
Ağırlıklı kenar
typedef struct { int u, v, agirlik; } Kenar;
typedef struct {
Kenar *kenarlar;
size_t dugum_sayisi, kenar_sayisi;
} AgirlikliCizge;C ile Gerçekleştirim
C'de Bellek ve Sahiplik
Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.
Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.
Boyut, kapasite ve geçerli indisleri her işlemde koru.
NULL, boş yapı ve tek öğe durumlarını özellikle mst ile en kısa yol ağacını karıştırmak riskiyle birlikte test et.
Temel İşlemler
Kruskal seçim döngüsü
qsort(kenarlar, E, sizeof *kenarlar, agirlik_karsilastir);
for (size_t i = 0; i < E && secilen < V - 1; ++i) {
Kenar e = kenarlar[i];
if (find(&d, e.u) != find(&d, e.v)) {
sonuc[secilen++] = e;
birlestir(&d, e.u, e.v);
}
}Temel İşlemler
Kodu Okurken
MST kaç kenar içerir?
Her adımda bağlılık kuralı korunuyor mu?
Güvenli en ucuz kenarı geri dönmeden seçmek.
Yönlü çizgede doğrudan MST aramak
Adım Adım
Kruskal ile dört karar
Kenarları küçük ağırlıktan büyüğe sırala.
Sıradaki kenarın uçları farklı bileşenlerdeyse seç.
DSU ile iki bileşeni tek küme yap.
n-1 kenar seçildiğinde minimum yayılım ağacı tamamdır.
Sınıf Notu
Dersten Sesler
“Kenar seçerken döngüden kaçınıyoruz; ağaçta n düğüm varsa n-1 kenarda duracağız.”
“Kruskal'ın kodunu verip geçmem; döngüyü hangi veri yapısıyla bulacağınızı keşfedeceksiniz.”
Notlardaki sınıf içi anlatımdan, yazım ve uzunluk bakımından sunuma uyarlanmıştır.
Analiz
Karmaşıklık Özeti
| İşlem | Zaman | Ek bellek |
|---|---|---|
| Kruskal sıralama | O(E log E) | O(E) |
| DSU işlemleri | O(E α(V)) | O(V) |
| Prim, ikili heap | O(E log V) | O(V+E) |
| Matrisli Prim | O(V²) | O(V) |
| MST doğrulama | O(V+E) | O(V) |
n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı
Tasarım Kararı
Hangi Durumda Hangisi?
Kenar listesi hazır ve çizge seyrekse.
Komşuluk listesiyle büyüyen ağaç isteniyorsa.
Çizge yoğun ve V orta büyüklükteyse.
Kruskal'da hızlı bileşen ve döngü denetimi için.
Dikkat
Sık Yapılan Hatalar
Alıştırmalar
Kendini Sına
- MST kaç kenar içerir?
- Kruskal döngüyü nasıl denetler?
- Prim hangi kenarlar arasından seçer?
- Ağırlıklar eşitse MST tek midir?
- Bağlı olmayan çizgede sonuç nedir?
Cevapları göster
- n-1.
- DSU ile uçların aynı bileşende olup olmadığına bakar.
- Ağaçtaki bir düğümden dışarı çıkan kenarlar arasından.
- Hayır, birden çok MST olabilir.
- Minimum yayılım ormanı.
Uygulama
Mini Laboratuvar
MST kaç kenar içerir?
Prim hangi kenarlar arasından seçer?
Bağlı olmayan çizgede sonuç nedir?
Özet
Bölüm Özeti
Seçim ölçütü ispatla desteklenir.
DSU Kruskal'ın kilit aracıdır.
Tek kaynak yollarıyla karıştırma.
Özet
Kaynaklar ve Devam
- VYA2 çizgeler bölümü, yayılım ağaçları ve Kruskal/Prim
- Horowitz, Sahni ve Anderson-Freed, Fundamentals of Data Structures in C.
- Kernighan ve Ritchie, The C Programming Language.