Bölüm 17: Minimum Yayılım Ağaçları

Kruskal, Prim ve açgözlü seçim
Yayılım ağacıMaliyetGreedyKruskalPrimDöngü denetimi
C ile Veri Yapıları · İki ciltlik ders notları temel alınmıştır

Hazırlık

Başlamadan Önce

C ön bilgisi

Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.

İlk kavram

Yayılım ağacı ve Maliyet

Bu bölümün hedefi

Bağlı çizgenin tüm düğümlerini n-1 kenarla bağlamak.

Başlangıç sorusu

MST kaç kenar içerir?

Giriş

Öğrenme Çıktıları

Yayılım ağacını tanımak

Bağlı çizgenin tüm düğümlerini n-1 kenarla bağlamak.

Greedy seçimi açıklamak

Güvenli en ucuz kenarı geri dönmeden seçmek.

Kruskal uygulamak

Kenarları sıralayıp DSU ile döngüyü engellemek.

Prim uygulamak

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.

Bağlılık

Tüm düğümler ağaçta olmalıdır.

Döngüsüzlük

Seçilen kenarlar döngü oluşturmaz.

n-1 kenar

n düğümlü her ağaç bu sayıda kenar taşır.

Minimum toplam

Seçilen kenar ağırlıkları toplamı en küçüktür.

Temel Kavramlar

Kavram Haritası

1Yayılım ağacı
2Maliyet
3Greedy
4Kruskal
5Prim
6Döngü denetimi
Minimum yayılım ağacı, tek bir kaynaktan yol bulmaz; çizgenin tamamı için toplam kenar maliyetini küçültür.

Gösterim

Kruskal kenar odaklı, Prim düğüm kümesi odaklıdır

KruskalPrim
Başlangıçboş ormanbir düğüm
Seçimgenel en ucuz güvenli kenarağ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;
Tür tanımı veri yapısının bellekteki biçimini; yordamlar ise bu yapı üzerindeki davranışı kurar.

C ile Gerçekleştirim

C'de Bellek ve Sahiplik

Sahip kim?

Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.

Yaşam süresi

Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.

Sınırlar

Boyut, kapasite ve geçerli indisleri her işlemde koru.

Boş durum

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);
    }
}
Kod örnekleri C99/C11 uyumlu olacak biçimde küçük ve tek sorumluluklu tutulmuştur.

Temel İşlemler

Kodu Okurken

Ön koşul

MST kaç kenar içerir?

Değişmez

Her adımda bağlılık kuralı korunuyor mu?

Son koşul

Güvenli en ucuz kenarı geri dönmeden seçmek.

Hata yolu

Yönlü çizgede doğrudan MST aramak

Adım Adım

Kruskal ile dört karar

Sırala

Kenarları küçük ağırlıktan büyüğe sırala.

En ucuzu al

Sıradaki kenarın uçları farklı bileşenlerdeyse seç.

Birleştir

DSU ile iki bileşeni tek küme yap.

Dur

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

İşlemZamanEk bellek
Kruskal sıralamaO(E log E)O(E)
DSU işlemleriO(E α(V))O(V)
Prim, ikili heapO(E log V)O(V+E)
Matrisli PrimO(V²)O(V)
MST doğrulamaO(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?

Kruskal

Kenar listesi hazır ve çizge seyrekse.

Prim + heap

Komşuluk listesiyle büyüyen ağaç isteniyorsa.

Prim + matris

Çizge yoğun ve V orta büyüklükteyse.

DSU

Kruskal'da hızlı bileşen ve döngü denetimi için.

Dikkat

Sık Yapılan Hatalar

1MST ile en kısa yol ağacını karıştırmak
2Yönlü çizgede doğrudan MST aramak
3Döngü oluşturan ucuz kenarı seçmek
4Bağlı olmayan çizgede tek ağaç beklemek

Alıştırmalar

Kendini Sına

  1. MST kaç kenar içerir?
  2. Kruskal döngüyü nasıl denetler?
  3. Prim hangi kenarlar arasından seçer?
  4. Ağırlıklar eşitse MST tek midir?
  5. Bağlı olmayan çizgede sonuç nedir?
Cevapları göster
  1. n-1.
  2. DSU ile uçların aynı bileşende olup olmadığına bakar.
  3. Ağaçtaki bir düğümden dışarı çıkan kenarlar arasından.
  4. Hayır, birden çok MST olabilir.
  5. Minimum yayılım ormanı.

Uygulama

Mini Laboratuvar

1 · Çiz

MST kaç kenar içerir?

2 · Kodla

Prim hangi kenarlar arasından seçer?

3 · Ölç

Bağlı olmayan çizgede sonuç nedir?

Teslim: küçük bir C modülü, üç uç test ve zaman/bellek karmaşıklığı tablosu.

Özet

Bölüm Özeti

Açgözlü ama güvenli

Seçim ölçütü ispatla desteklenir.

Döngü yasak

DSU Kruskal'ın kilit aracıdır.

Hedef toplam maliyet

Tek kaynak yollarıyla karıştırma.

Özet

Kaynaklar ve Devam

Son

Bölüm 17: Minimum Yayılım Ağaçları
Ders planına dön
1 / 1 C ile Veri Yapıları