Bölüm 11: Çizgeler
Hazırlık
Başlamadan Önce
Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.
Düğüm/kenar ve Gösterim
Yön, ağırlık, derece, yol, döngü ve bağlılık kavramlarını kullanmak.
Çizge ile ağaç arasındaki temel fark nedir?
Giriş
Öğrenme Çıktıları
Yön, ağırlık, derece, yol, döngü ve bağlılık kavramlarını kullanmak.
Komşuluk matrisi ve listesini yoğunluğa göre karşılaştırmak.
DFS ve BFS algoritmalarını doğru yardımcı yapıyla uygulamak.
MST, en kısa yol ve topolojik sıralama problemlerini ayırmak.
Temel Kavramlar
Çizge birçoğa-birçok ilişkiyi modeller
Ağaçtan farklı olarak bir düğüme birden çok yoldan ulaşılabilir ve döngüler bulunabilir.
Kenar iki yönde ilişki kurar.
(u,v) ile (v,u) farklı olabilir.
Kenar maliyet, mesafe veya süre taşır.
Her düğüm çifti arasında bir yol vardır.
Temel Kavramlar
Kavram Haritası
Gösterim
Gösterim seçimi çizgenin yoğunluğuna bağlıdır
| Özellik | Komşuluk matrisi | Komşuluk listesi |
|---|---|---|
| Bellek | O(V²) | O(V+E) |
| Kenar var mı? | O(1) | O(deg(v)) |
| Komşuları dolaş | O(V) | O(deg(v)) |
| Uygun durum | yoğun | seyrek |
C ile Gerçekleştirim
Komşuluk listesi
typedef struct Kenar {
int hedef, agirlik;
struct Kenar *sonraki;
} Kenar;
typedef struct {
size_t dugum_sayisi;
Kenar **komsu;
} Cizge;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 ziyaret işaretini çok geç koyup düğümü tekrar kuyruğa eklemek riskiyle birlikte test et.
Temel İşlemler
Önce derinliğine arama
void dfs(const Cizge *g, int v, bool ziyaret[]) {
ziyaret[v] = true;
printf("%d ", v);
for (Kenar *e = g->komsu[v]; e; e = e->sonraki)
if (!ziyaret[e->hedef])
dfs(g, e->hedef, ziyaret);
}Temel İşlemler
Kodu Okurken
Çizge ile ağaç arasındaki temel fark nedir?
Her adımda yönsüz kuralı korunuyor mu?
Komşuluk matrisi ve listesini yoğunluğa göre karşılaştırmak.
Yönlü çizgede ters kenarı kendiliğinden var saymak
Adım Adım
BFS neden kuyruk kullanır?
Kaynağı ziyaret et ve kuyruğa ekle.
Sıradaki düğümün henüz görülmemiş tüm komşularını keşfet.
Yeni komşuları kuyruğun arkasına koy; böylece katman sırası korunur.
Kuyruk boşaldığında erişilebilir tüm düğümler en az kenar sayısı sırasıyla görülmüştür.
Sınıf Notu
Dersten Sesler
“Aklınıza gelen ilk çözüm iyi bir yöntem olmayabilir. Veri yapısını değiştirince n³, n'e inebilir.”
“Döngü varsa proje hiç bitmeyecektir. Çizgedeki bir ok bazen bütün takvimi kilitler.”
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 |
|---|---|---|
| BFS, liste | O(V+E) | O(V) |
| DFS, liste | O(V+E) | O(V) |
| Kenar sorgusu, matris | O(1) | O(V²) toplam |
| Dijkstra (heap) | O((V+E) log V) | O(V+E) |
| Kruskal | O(E log E) | O(V+E) |
n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı
Tasarım Kararı
Hangi Durumda Hangisi?
Ağırlıksız en kısa yol ve katman dolaşımı.
Bileşen, döngü, topolojik düşünme ve geri izleme.
Negatif olmayan ağırlıklarda tek kaynaktan en kısa yol.
Tüm düğümleri en düşük toplam maliyetle bağlayan yayılım ağacı.
Dikkat
Sık Yapılan Hatalar
Alıştırmalar
Kendini Sına
- Çizge ile ağaç arasındaki temel fark nedir?
- Seyrek çizgede hangi gösterim uygundur?
- DFS hangi yapıyı doğal olarak kullanır?
- BFS ne zaman en kısa yol verir?
- Minimum yayılım ağacı ile en kısa yol ağacı aynı şey midir?
Cevapları göster
- Çizgede döngü ve bir düğüme birden çok yol olabilir.
- Komşuluk listesi.
- Yığın veya özyineli çağrı yığını.
- Tüm kenarlar eşit maliyetliyse/ağırlıksızsa.
- Hayır; amaç fonksiyonları farklıdır.
Uygulama
Mini Laboratuvar
Çizge ile ağaç arasındaki temel fark nedir?
DFS hangi yapıyı doğal olarak kullanır?
Minimum yayılım ağacı ile en kısa yol ağacı aynı şey midir?
Özet
Bölüm Özeti
V ve E büyüklükleri maliyeti belirler.
Birçok ileri algoritmanın başlangıcıdır.
En kısa yol, MST ve topolojik sıra farklı hedeflerdir.
Özet
Kaynaklar ve Devam
- Veri Yapıları ve Algoritmalar 2, PDF s. 37-61
- Horowitz, Sahni ve Anderson-Freed, Fundamentals of Data Structures in C.
- Kernighan ve Ritchie, The C Programming Language.