Bölüm 18: En Kısa Yol ve Aktivite Ağları
Hazırlık
Başlamadan Önce
Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.
Tek kaynak ve Dijkstra
Negatif olmayan ağırlıklarda kesinleşen en küçük uzaklığı seçmek.
Gevşetme nedir?
Giriş
Öğrenme Çıktıları
Negatif olmayan ağırlıklarda kesinleşen en küçük uzaklığı seçmek.
Öncül dizisiyle hedef-kaynak yolunu üretmek.
Öncül sayısı sıfır olan düğümleri sistemli işlemek.
Erken/geç zaman ve bolluk üzerinden proje süresini belirlemek.
Temel Kavramlar
Uzaklık ve öncül birlikte tutulur
En kısa mesafeyi bilmek yetmez; yolu üretmek için her gevşetmede en iyi öncül de kaydedilir.
dist[u]+w(u,v) daha küçükse v güncellenir.
En küçük geçici uzaklık artık değişmez.
Her öncül, ardılından önce gelir.
Aktivitenin projeyi geciktirmeden kaydırılabileceği süre.
Temel Kavramlar
Kavram Haritası
Gösterim
Dijkstra'nın karar tablosu
| Düğüm | Geçici uzaklık | Öncül | Durum |
|---|---|---|---|
| A | 0 | — | kesin |
| B | 4 | A | kesin |
| C | 7 | B | aday |
| D | ∞ | — | aday |
C ile Gerçekleştirim
Uzaklık ve öncül dizileri
typedef struct { int dugum; long uzaklik; } Aday;
long *uzaklik;
int *onceki;
bool *kesin;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 negatif ağırlıkta dijkstra kullanmak riskiyle birlikte test et.
Temel İşlemler
Kenar gevşetme
long yeni = uzaklik[u] + e->agirlik;
if (yeni < uzaklik[e->hedef]) {
uzaklik[e->hedef] = yeni;
onceki[e->hedef] = u;
pq_ekle(&adaylar, e->hedef, yeni);
}Temel İşlemler
Kodu Okurken
Gevşetme nedir?
Her adımda gevşetme kuralı korunuyor mu?
Öncül dizisiyle hedef-kaynak yolunu üretmek.
Sonsuz uzaklığa ağırlık ekleyip taşma oluşturmak
Adım Adım
Topolojik sıra üret
Her düğümün giriş derecesini hesapla.
Giriş derecesi 0 olanları yığın veya kuyruğa ekle.
Düğümü çıktıya yaz; çıkan kenarların hedef derecelerini azalt.
Yazılan düğüm sayısı V'den küçükse çizgede döngü vardır.
Sınıf Notu
Dersten Sesler
“Bir yordam int döndürüyor da nereye dönüyor? Seninki havada duruyor! Sonucu kullanacaksın.”
“Döngü varsa proje hiç bitmeyecektir; iki iş karşılıklı birbirini bekliyor demektir.”
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 |
|---|---|---|
| Dijkstra + heap | O((V+E) log V) | O(V+E) |
| Dijkstra + matris | O(V²) | O(V) |
| Yolu geri kurma | O(yol uzunluğu) | O(yol uzunluğu) |
| Topolojik sıra | O(V+E) | O(V) |
| Kritik yol | 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?
Ağırlıkların tümü eşitse.
Ağırlıklar negatif değilse.
Çizge döngüsüzse topolojik sırayla.
Aktivitelerin bağımlılık ve süreleri proje zamanını belirliyorsa.
Dikkat
Sık Yapılan Hatalar
Alıştırmalar
Kendini Sına
- Gevşetme nedir?
- Dijkstra hangi ağırlıkları kabul eder?
- Yol nasıl geri kurulur?
- Topolojik sıra ne zaman vardır?
- Bolluğu sıfır aktivite neyi gösterir?
Cevapları göster
- Bir kenar üzerinden daha kısa yol bulunursa uzaklık ve öncülü güncellemektir.
- Negatif olmayanları.
- Hedeften önceki dizisini izleyip diziyi ters çevirerek.
- Yönlü döngüsüz çizgede.
- Kritik aktiviteyi.
Uygulama
Mini Laboratuvar
Gevşetme nedir?
Yol nasıl geri kurulur?
Bolluğu sıfır aktivite neyi gösterir?
Özet
Bölüm Özeti
Uzaklık kadar öncül de saklanır.
Bağımlılıklar doğrusal işleme düzenine dönüşür.
Sıfır bolluk proje süresini belirler.
Özet
Kaynaklar ve Devam
- VYA2 çizgeler bölümü, en kısa yol ve aktivite ağları
- Horowitz, Sahni ve Anderson-Freed, Fundamentals of Data Structures in C.
- Kernighan ve Ritchie, The C Programming Language.
Son
← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt