Bölüm 10: Arama Ağaçları
Hazırlık
Başlamadan Önce
Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.
BST kuralı ve Arama
Sol alt ağaçtaki anahtarların küçük, sağdakilerin büyük olduğunu göstermek.
BST'de inorder ne üretir?
Giriş
Öğrenme Çıktıları
Sol alt ağaçtaki anahtarların küçük, sağdakilerin büyük olduğunu göstermek.
Karşılaştırmalarla tek bir kök-yaprak yolu izlemek.
Yaprak, tek çocuk ve iki çocuk durumlarını güvenle çözmek.
Yüksekliğin işlem maliyetine doğrudan etkisini açıklamak.
Temel Kavramlar
İkili arama ağacı sıralı bir karar yapısıdır
Her karşılaştırma arama uzayını sol veya sağ alt ağaca indirir; performans ağacın yüksekliğine bağlıdır.
Tüm anahtarlar kök anahtarından küçüktür.
Tüm anahtarlar kök anahtarından büyüktür.
Anahtarları küçükten büyüğe üretir.
Dengeli ağaçta log n, çarpık ağaçta n olabilir.
Temel Kavramlar
Kavram Haritası
Gösterim
Arama tek bir yol izler
C ile Gerçekleştirim
BST düğümü
typedef struct BST {
int anahtar;
struct BST *sol, *sag;
} BST;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 eşit anahtar politikasını tanımlamamak riskiyle birlikte test et.
Temel İşlemler
Özyineli ekleme
BST *ekle(BST *kok, int x) {
if (kok == NULL) return yeni_dugum(x);
if (x < kok->anahtar)
kok->sol = ekle(kok->sol, x);
else if (x > kok->anahtar)
kok->sag = ekle(kok->sag, x);
return kok;
}Temel İşlemler
Kodu Okurken
BST'de inorder ne üretir?
Her adımda sol alt ağaç kuralı korunuyor mu?
Karşılaştırmalarla tek bir kök-yaprak yolu izlemek.
Silme sonrası alt ağaç kökünü geri bağlamamak
Adım Adım
İki çocuklu 50'yi sil
50 köktedir ve iki çocuğu vardır.
Sağ alt ağacın en küçüğü 60'tır.
50 yerine 60 yazılır.
Sağ alt ağaçtaki eski 60, yaprak/tek çocuk kuralıyla kaldırılır.
Sınıf Notu
Dersten Sesler
“Siz bir değer söyleyin, ben ekleyeyim. Sağa eklerim, sola eklerim; nereye ekleneceği ağacın bileceği iş!”
“Algoritmayı yazdıktan sonra peşini bırakmıyoruz. En çok bozacak veriyi de sorguluyoruz.”
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 |
|---|---|---|
| Arama | O(h) | O(1) |
| Ekleme | O(h) | O(h) özyineli |
| Silme | O(h) | O(h) özyineli |
| Inorder dolaşım | O(n) | O(h) |
| Dengeli durumda h | O(log n) | — |
n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı
Tasarım Kararı
Hangi Durumda Hangisi?
Veri sırası rastgele ve uygulama basitliği önemliyse.
Arama gecikmesi sıkı biçimde logaritmik tutulacaksa.
Güncelleme ve arama dengesi isteniyorsa.
Sıra gerekmiyor, ortalama sabit zaman erişim öncelikliyse.
Dikkat
Sık Yapılan Hatalar
Alıştırmalar
Kendini Sına
- BST'de inorder ne üretir?
- İşlem maliyeti neden h ile ifade edilir?
- İki çocuklu düğüm nasıl silinir?
- Sıralı veri basit BST'yi nasıl etkiler?
- AVL gibi yapılar neyi garanti eder?
Cevapları göster
- Anahtarları sıralı sırada.
- Arama ve güncelleme tek bir kök-yaprak yolu izler.
- Ardıl veya öncül değeri taşınıp o düğüm silinir.
- Ağacı zincir gibi çarpıtabilir; h=n olur.
- Yüksekliği O(log n) düzeyinde tutar.
Uygulama
Mini Laboratuvar
BST'de inorder ne üretir?
İki çocuklu düğüm nasıl silinir?
AVL gibi yapılar neyi garanti eder?
Özet
Bölüm Özeti
Her karşılaştırma yön seçtirir.
Denge performansın merkezindedir.
Yaprak, tek çocuk, iki çocuk ayrı ele alınır.
Özet
Kaynaklar ve Devam
- Veri Yapıları ve Algoritmalar 2, PDF s. 12-17
- Horowitz, Sahni ve Anderson-Freed, Fundamentals of Data Structures in C.
- Kernighan ve Ritchie, The C Programming Language.