CEN207 Veri Yapıları · Hafta 11

İleri Ağaçlar

CEN207 Veri Yapıları — Hafta 11

Dr. Öğr. Üyesi Uğur CORUH · 2026-2027 Güz

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Bugünün planı (3 saat)

Saat Konu
1 BST: ekleme, arama, silme, denge neden önemli
2 AVL (4 döndürme), kırmızı-siyah, splay
3 2-3 ağacı, segment ağacı, Fenwick ağacı, teknik seçme

Öğrenme çıktıları: ÖÇ.1 (temel veri yapılarını açıklama) · ÖÇ.2 (karmaşıklığı analiz etme) · ÖÇ.7 (doğru yapıyı seçme)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Bu haftanın konuları — nerede

Konu Nerede
BST ekleme/arama/silme, dejenere durum Bölüm 1
AVL, kırmızı-siyah, splay, 2-3 ağacı Bölüm 2–5
Segment ağacı, Fenwick ağacı Bölüm 6–7
Teknik seçme Bölüm 8
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod örnekleri nasıl çalışır

  • Her fikrin tam bir C ve Java programı var
  • C: gcc -std=c11 -Wall -Wextra -o /tmp/x file.c && /tmp/x
  • Java: javac -d /tmp/j File.java && java -cp /tmp/j File
  • Kaynaklar: code/week-11/c/ ve code/week-11/java/
  • Her programın beklenen çıktısı hafta notlarında
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Hafta 4'ten köprü

  • Hafta 4 size ağaç kelime dağarcığını verdi: kök, yaprak, derinlik, yükseklik, alt ağaç
  • Hafta 4 size dolaşmaları verdi: inorder, preorder, postorder, level-order
  • Hafta 4'ün öbeği sol-sağ hiç sıralı değildi, yalnızca ebeveyn-çocuk
  • Bugün ilk kez bir sıralama kuralı ekliyoruz
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Tekrar — Hafta 4: yükseklik ve derinlik

  • Bir düğümün derinliği = kökten ona kaç kenar (kök = 0)
  • Bir ağacın yüksekliği = herhangi bir düğümün en büyük derinliği
  • Boş ağaç: gelenek gereği yükseklik -1; tek düğüm: yükseklik 0
  • Bugün: yükseklik, her maliyeti belirleyen tek sayı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Haftanın haritası — tek kural

  • Bir ikili arama ağacı: sol alt ağaç küçük, sağ alt ağaç büyük
  • Bu kural tek başına hızlı arama verir — AĞAÇ SIĞ KALIRSA
  • Dört farklı strateji onu sığ tutar: AVL, kırmızı-siyah, splay, 2-3
  • İki ağaç daha, tek-anahtar yerine aralık sorularını yanıtlar
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Haftanın haritası — genel bakış

Dengeli BST'ler Aralık sorgusu ağaçları
AVL — katı denge çarpanı Segment ağacı — bir kur, O(log n)'de sorgula
Kırmızı-siyah — daha gevşek, renk tabanlı Fenwick ağacı — tek dizi, i & -i
Splay — denge yok, kullanıma uyum sağlar —
2-3 ağacı — yalnız kökte büyür —
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Tekrar — Hafta 4: dolaşmalar

  • Inorder: sol, ziyaret, sağ — bir BST'de sıralı düzen
  • Preorder: ziyaret, sol, sağ — bir ağacın biçimini kopyalar
  • Postorder: sol, sağ, ziyaret — bir ağacı silmek için güvenli
  • Level-order: açık bir kuyruk, genişlik öncelikli
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kelime dağarcığı kontrolü

Terim Anlamı
Denge çarpanı (balance factor) height(sol) − height(sağ)
Döndürme (rotation) O(1) yerel gösterici düzenlemesi
Amortize maliyet uzun bir işlem dizisi üzerinde ortalanmış
Tersinir işlem çıkarmayla geri alınabilir (toplam, min değil)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

1. İkili Arama Ağacı

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu

Hafta 1: sıralı dizi, ikili arama — hızlı, ama ekleme O(n) tutar.
Hafta 2: bağlı liste — ekleme O(1), ama arama O(n) ister.

İKİSİNİ DE O(n)'den daha iyi yapan bir yapı var mı?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kısa bir tarihçe

  • BST fikirleri 1959–1962 arasında bağımsız olarak ortaya çıkar
  • P. F. Windley, A. D. Booth & A. J. T. Colin, T. N. Hibbard
  • Hibbard, 1962 — genellikle silmeyi çözmesiyle anılır
  • Silme, tam olarak bölüm 1.4'ün bugün ele aldığı şeydir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sezgi — bir telefon rehberi, ama ağaç

  • Orta sayfayı açın: adınız ondan önce mi sonra mı?
  • Yarılamaya devam edin — bu, bir dizide ikili aramadır
  • Bir BST, aynı yarılamayı yapının biçimine pişirir
  • Her düğümde kural: sol küçük, sağ büyük
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

BST soyut veri türü

İşlem Ne yapar Karmaşıklık
insert(key) Anahtarı ekler; yinelenen yoksayılır O(h)
search(key) Var olup olmadığını bildirir O(h)
delete(key) Varsa anahtarı kaldırır O(h)
min / max En küçük / en büyük anahtar O(h)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Bellekte — ekleme fikri

  • Kökten aşağı yürü, her düğümde key'i karşılaştır
  • Küçük → sola git; büyük → sağa git; eşit → yinelenen, dur
  • Bir NULL çocuğa ulaş → yeni düğümün yeri orası
  • Bağla; ağaçta başka hiçbir şey hareket etmez
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

İkili arama ağacı: ekleme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — bst_insert()

Node *bst_insert(Node *root, int key) {
    Node *cur = root, *parent = NULL;
    while (cur != NULL) {
        parent = cur;
        if (key == cur->key) return root;
        if (key < cur->key)  cur = cur->left;
        else                 cur = cur->right;
    }
    Node *n = malloc(sizeof(Node));
    n->key = key; n->left = NULL; n->right = NULL;
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — bst_insert(), bağlama

    if (parent == NULL) return n;
    if (key < parent->key) parent->left = n;
    else                    parent->right = n;
    return root;
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

insert(50): inorder = 50  height = 0
insert(30): inorder = 30 50  height = 1
insert(70): inorder = 30 50 70  height = 1
insert(20): inorder = 20 30 50 70  height = 2
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

insert neden O(h)

  • Ziyaret edilen seviye başına en fazla bir karşılaştırma
  • Geçilen bir düğümü asla tekrar ziyaret etmez
  • h küçük (dengeli) → hızlı; h büyük (zincir) → yavaş
  • Bölüm 1.4, h'nin ne kadar büyüyebileceğini tam olarak gösterir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • root = bst_insert(root, key); yazmayı unutmak
  • Yeniden atama olmadan, çağıranın root'u asla güncellenmez
  • C/Java burada göstericileri/referansları değer olarak geçirir
  • Fonksiyon (olası yeni) kökü döndürmelidir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Animasyonun "artan sıra" uç durumunda, her yeni anahtar
SAĞ çocuk olur. Neden hiç sol olmaz?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • Sonraki her anahtar, zaten eklenmiş her şeyden büyüktür
  • Bu yüzden yürüyüş sırasında her karşılaştırma "sağa git" der
  • Ağaç tamamen sağa yaslanır — bir zincir
  • Bu tam olarak bölüm 1.4'ün konusu, hemen ardından
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu — arama

insert zaten anahtarları karşılaştırarak aşağı yürüyor.
search neredeyse aynı yürüyüş — en kötü durumda kaç düğüm?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fikir — arama

  • Eşit → bulundu; küçük → yalnızca sol alt ağaçta olabilir
  • Sıralama kuralı bunu GARANTİ EDER, sağ alt ağaç olamaz
  • Büyük → ayna görüntüsü
  • Bir eşleşmeden önce ulaşılan NULL → yok
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

İkili arama ağacı: arama

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — bst_search()

int bst_search(Node *root, int key) {
    Node *cur = root;
    probes = 0;
    while (cur != NULL) {
        probes++;
        if (key == cur->key) return 1;
        if (key < cur->key) cur = cur->left;
        else                cur = cur->right;
    }
    return 0;
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

search(65): found, 4 probes
search(20): found, 3 probes
search(55): not found, 3 probes
search(100): not found, 4 probes
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

search neden O(h)

  • insert ile aynı seviye-başına-bir-karşılaştırma argümanı
  • En iyi durum O(1): kökün kendisi
  • En kötü durum: ağaç ne kadar derinse
  • Yine: her şey h'ye bağlı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • "Bulunamadı"yı bir hata koşulu olarak ele almak
  • Bu normal, beklenen bir sonuçtur, çökme değil
  • while (cur != NULL) koruyucusu bunu temiz ele alır
  • Bir eşleşmeden sonra karşılaştırmaya devam etmek de israf
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

10 düğümlü artan-eklemeli bir zincirde search(10) 10 prob
tutar. search(1) yalnız 1 tutar. Neden bu kadar fark?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • O ağaç saf bir zincirdir: 1 kökte, 10 en derin yaprakta
  • Kökün kendi anahtarı: tek karşılaştırma
  • En derin yaprak: ona kadar her seviye için bir karşılaştırma
  • En kötü durumda yükseklik + 1 karşılaştırma
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu — silme

Bir yaprağı silmek kolaydır: ayırın.
İki çocuklu bir düğümü silmek öyle değil. Neden?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fikir — üç durum

Durum Düzeltme
Yaprak Ayırın
Tek çocuk Ebeveyn doğrudan çocuğa bağlanır
İki çocuk Ardılın anahtarını kopyalayın, sonra ONU silin
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

İkili arama ağacı: silme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — bst_delete(), düğümü bulma

Node *bst_delete(Node *root, int key) {
    Node *cur = root, *parent = NULL;
    while (cur != NULL && key != cur->key) {
        parent = cur;
        cur = (key < cur->key) ? cur->left : cur->right;
    }
    if (cur == NULL) return root;
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — bst_delete(), iki çocuk

    if (cur->left != NULL && cur->right != NULL) {
        Node *succ = cur->right, *succParent = cur;
        while (succ->left != NULL) {
            succParent = succ; succ = succ->left;
        }
        cur->key = succ->key;
        parent = succParent; cur = succ;
    }
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

delete(35): inorder = 20 30 40 50 60 65 70 80 90
delete(70): inorder = 20 30 40 50 60 65 80 90
delete(50): inorder = 20 30 40 60 65 80 90
delete(20): inorder = 30 40 60 65 80 90
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

delete neden O(h)

  • Düğümü bulmak: O(h)
  • Bir ardıl bulmak: en fazla bir O(h) daha
  • Arama yolundaki düğümleri asla yeniden ziyaret etmez
  • insert ve search ile aynı en kötü durum
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • Ardılın anahtarını kopyalayıp ONUN düğümünü silmeyi unutmak
  • Anahtar artık ağaçta iki kez var
  • Ardıl ile öncel: ikisi de çalışır, ama tutarlı kalın
  • C'de free() unutmak — gerçek bir bellek sızıntısı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Bir BST silmenin ardılı neden EN FAZLA bir çocuğa
sahip olmayı garantiler?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • Ardıl = sağ alt ağacın en soldaki düğümü
  • En solda olmak, tanım gereği sol çocuğu olmaması demek
  • Bir sağ çocuğu olabilir ya da olmayabilir
  • Asla ikisi birden — bu yüzden hep durum 1 ya da 2
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu — dejenere

Şimdiye kadarki her bölüm maliyeti O(h) olarak belirtti.
n anahtar rastgele bir sırayla, h SOMUT OLARAK nedir?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fikir — küme değil, sıra

  • Her teknik DEĞERLERİ karşılaştırır, ağacın BİÇİMİNE hiç bakmaz
  • Sıralı girdi: her yeni anahtar şimdiye kadarki her şeyden büyük
  • Her yeni anahtar sonuncudan bir seviye daha derine eklenir
  • Ağaç bir zincire dejenere olur: yükseklik n − 1
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Denge neden önemli

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Aynı anahtarlar, karıştırılmış

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

insert(10): height = 9  (ideal for 10 nodes = 3)
final: n = 10, height = 9, ideal = 3

karıştırılmış uç durumuna karşı: final: n = 10, height = 3, ideal = 3

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Bunun karmaşıklık için anlamı

  • En kötü durum yüksekliği: n − 1 (sıralı ya da ters sıralı girdi)
  • Bölüm 1.1–1.4'ün her işlemi O(n) olur
  • Ortalama durum (rastgele sıra): O(log n) — ama "rastgele" garantili değil
  • Sıralı girdi pratikte yaygın: içe aktarmalar, tekrar oynatılan günlükler
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • "BST" olmasının otomatik olarak O(log n) demek olduğunu varsaymak
  • Yalnızca rastgele test verisiyle kıyaslama yapmak
  • Rastgele veri tam olarak bu başarısızlık biçimini gizler
  • Yalnızca KENDİNİ DENGELEYEN bir BST en kötü durumda O(log n) garanti eder
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Zaten sıralı olduğunu bildiğiniz veriden bir BST kurmalısınız.
Ağaç türünü değiştirmeden en ucuz çözüm?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • Eklemeden önce anahtarları rastgele bir sıraya karıştırın
  • Ya da: orta elemanı kök seçin, her iki yarıda özyineleyin
  • Doğrudan O(n)'de mükemmel dengeli bir ağaç kurar, döndürme yok
  • Bölüm 2–5, GENEL problemi otomatik olarak çözer
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

2. AVL Ağaçları

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu

İşlemler hangi sırayla gelirse gelsin sığ kalan bir
BST'ye ihtiyacımız var. Böyle bir şey var mı?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kısa bir tarihçe

  • 1962 — Georgy Adelson-Velsky & Evgenii Landis
  • "AVL" = baş harfleri
  • Yayımlanan ilk kendini dengeleyen ikili arama ağacı
  • Fikir: her düğümde bir denge çarpanı izle
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Dört döndürme durumu

Durum Biçim Düzeltme
LL sol-ağır, sol çocuk sol-ağır tek sağa döndürme
RR sağ-ağır, sağ çocuk sağ-ağır tek sola döndürme
LR sol-ağır, sol çocuk sağ-ağır sol çocuğu sola, sonra sağa
RL sağ-ağır, sağ çocuk sol-ağır sağ çocuğu sağa, sonra sola
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

AVL: dört dengeleme durumu

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Döndürme gerekmiyor

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Bir eklemeden sonra, bir AVL ağacı en fazla kaç
döndürmeye ihtiyaç duyabilir?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • En fazla BİR tekli döndürme, ya da BİR çift döndürme
  • Düzeltme, alt ağacın eklemeden ÖNCEKİ yüksekliğini tam kurar
  • Bu yüzden daha yukarıdaki hiçbir ata dengesiz olamaz
  • Ekleme asla yukarı doğru yayılmak zorunda kalmaz
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

AVL ekleme — fikir

  • Sıradan özyinelemeli BST eklemesi
  • Çağrı yığını geri sarılırken: update_height, sonra rebalance
  • Kontrol, özyineleme geri sarılırken HER seviyede olur
  • Bulunan ilk (ve tek) dengesiz düğüm hemen düzeltilir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

AVL ağacı: ekleme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — rebalance()

Node *rebalance(Node *n) {
    int bf = height(n->left) - height(n->right);
    if (bf > 1  && height(n->left->left)
             >= height(n->left->right))
        return rotate_right(n);
    if (bf > 1) {
        n->left = rotate_left(n->left);
        return rotate_right(n);
    }
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı — artan anahtarlar

insert(10): height = 3

Bölüm 1.4'ün düz BST'si AYNI 10 artan anahtar için yükseklik 9'a ulaştı.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

AVL neden O(log n)

  • Yükseklik asla 1.44 · log2(n + 2)'yi geçmez
  • Her işlem O(log n) — ORTALAMA değil, EN KÖTÜ durumda da
  • insert: en fazla bir (çift) döndürme
  • delete: O(log n)'ye kadar döndürme, ama her biri O(1)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • Denge çarpanını kontrol etmeden önce update_height'ı unutmak
  • rebalance sonra BAYAT bir yükseklik okur
  • LL'yi mi LR'yi mi az önce eklenen anahtara bakarak seçmek (silme için bozulur)
  • Denge-çarpanı tabanlı karar hem ekleme hem silme için çalışır
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

AVL silme — yeniden dengeleme katlanabilir

  • Bölüm 1.4'ün ayırma mantığını (yaprak/tek/iki çocuk) birebir kullanır
  • Fark: rebalance HER atada çalışır, yalnız ilkinde değil
  • Bir silme bir alt ağacın yüksekliğini küçültebilir
  • O küçülme köke kadar yayılmaya devam edebilir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

AVL ağacı: silme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

delete(90): height = 3, inorder = 10 20 25 30 ...
delete(45): height = 3, inorder = 10 20 25 30 ...

Altı silme boyunca yükseklik 3'te kalır — hep yeniden dengelenir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

AVL silme neden hâlâ O(log n)

  • O(log n)'ye kadar döndürme — en kötü durumda ata-seviyesi başına bir
  • Her tek döndürme yine O(1)
  • O(log n) döndürme × her biri O(1) = toplamda O(log n)
  • Ekleme ile aynı asimptotik sınır, yalnız sabiti daha büyük
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • Silmenin de, ekleme gibi, yalnız bir döndürme gerektireceğini varsaymak
  • "Zor" senaryo tam olarak bunu çürütmek için kurulmuştur
  • C'de ayrılan düğümü free() etmeyi unutmak (sızıntı)
  • "Bütün anahtarları boşalana kadar sil"i açıkça test etmemek
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

h yüksekliğinde bir AVL ağacının en az kaç düğümü vardır?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • N(h) = 1 + N(h−1) + N(h−2) — Fibonacci yinelemesi
  • N(h), h'de ÜSTEL olarak büyür
  • Bu yüzden h, n'de yalnızca LOGARİTMİK olarak büyür
  • Kanıtın tamamı, tek satırda budur
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

3. Kırmızı-Siyah Ağaçlar

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu

AVL'nin katı denge çarpanı neredeyse her eklemede
yeniden dengeleme isteyebilir. Daha gevşek bir kural var mı?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kısa bir tarihçe

  • 1972 — Rudolf Bayer: "simetrik ikili B-ağaçları"
  • 1978 — Guibas & Sedgewick: "kırmızı-siyah" adı
  • Modern ekleme algoritması 1978'e dayanır
  • Tam yükseklik karşılaştırması yerine dört basit, YEREL kural
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Dört kural

  • Her düğüm kırmızı ya da siyahtır
  • Kök her zaman siyahtır
  • Kırmızı bir düğümün asla kırmızı çocuğu olmaz ("art arda iki kırmızı yok")
  • Her kök-NULL yolu aynı siyah-yüksekliğe sahiptir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Üç düzeltme (fixup) durumu

Durum Durum Düzeltme
1 Amca KIRMIZI ebeveyn+amcayı siyaha, büyükanne/babayı kırmızıya, yukarı devam
2 Amca siyah, "üçgen" ebeveyni döndür, durum 3'e indirger
3 Amca siyah, "doğrusal" büyükanne/babayı döndür + yeniden renklendir, bitti
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kırmızı-siyah ağaç: ekleme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — fixup(), durum 1

while (z->parent && z->parent->color == RED) {
    Node *p = z->parent, *g = p->parent;
    Node *u = (p == g->left) ? g->right
                              : g->left;
    if (u && u->color == RED) {
        p->color = BLACK; u->color = BLACK;
        g->color = RED; z = g; continue;
    }
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

insert(3): root = 3, bh = 1, inorder = 3B
insert(69): root = 3, bh = 1, inorder = 3B 69R
insert(31): root = 31, bh = 1, inorder = 3R 31B 69R
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kırmızı-siyah neden O(log n)

  • Yükseklik asla 2 · log2(n + 1)'i geçmez
  • Kanıt: hiçbir yol en kısasının iki katından fazla olamaz
  • (kırmızı düğümler asla bitişik olamaz)
  • AVL'den biraz daha gevşek sınır, pratikte daha az döndürme
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • fixup döngüsü bittikten sonra kural 2'yi unutmak
  • Durum 1, ihlali köke kadar taşıyabilir
  • Sondaki koşulsuz root->color = BLACK; isteğe bağlı DEĞİL
  • "Amca"yı yeni düğümün kendi kardeşiyle karıştırmak
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

KIRMIZI bir yaprak eklemek kural 4'ü (eşit siyah-yükseklik)
neden asla bozamaz, yalnız kural 3'ü bozabilir?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • Kırmızı bir yaprak herhangi bir yolun siyah-düğüm sayısına 0 katkıda bulunur
  • Her kök-yaprak siyah-yüksekliği tam olarak ne idiyse öyle kalır
  • Yalnız kural 3 ("iki kırmızı yok") bozulabilir, ve yalnız ebeveyn kırmızıysa
  • Bu tam olarak fixup'ın onarmak için tasarlandığı durumdur
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

4. Splay Ağaçları

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu

AVL ve kırmızı-siyah, HER düğümde, HER işlem için defter
tutma maliyeti öder — nadiren dokunulan anahtarlar için bile. Farklı bir yol?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kısa bir tarihçe

  • 1985 — Daniel Sleator & Robert Tarjan
  • "Kendini ayarlayan ikili arama ağaçları"
  • Hiç denge bilgisi tutulmaz — düğüm başına sıfır ekstra bellek
  • Bunun yerine: her erişim ağacı yeniden biçimlendirir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fikir — köke taşı

Hareket Ne zaman Ne olur
zig ebeveyn kök tek bir döndürme
zig-zig düğüm & ebeveyn ikisi de sol (ya da sağ) çocuk önce ebeveyn, sonra düğüm döner
zig-zag düğüm & ebeveyn karşıt taraflarda düğüm iki kez döner
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Splay ağacı: erişim

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — splay()

void splay(Node *x) {
    while (x->parent != NULL) {
        Node *p = x->parent, *g = p->parent;
        if (g == NULL) { rotate_up(x); }
        else if ((x == p->left) == (p == g->left))
            { rotate_up(p); rotate_up(x); }
        else { rotate_up(x); rotate_up(x); }
    }
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

access(50): root = 50, inorder = 50
access(20): root = 20, inorder = 10 20 30 40 45 50 60 70 80

Az önce erişilen anahtar HER ZAMAN yeni köktür.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Splay neden amortize O(log n)

  • Hiçbir tek erişim O(log n) garantili değil — O(n) olabilir
  • m erişimlik HERHANGİ bir dizi toplamda O(m log n) tutar
  • Erişim başına amortize edilmiş O(log n)
  • "Sıcak" bir çalışma kümesine otomatik olarak uyum sağlar
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • Zig-zig'i iki AYRI tekli döndürme olarak uygulamak ("saf splay")
  • Geçerli bir ağaç işlemi, ama amortize garantiyi kaybeder
  • access'in OLMAYAN bir anahtarda da bir şeyi splay ettiğini unutmak
  • Burada: yeni eklenen düğümün kendisi
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Tek bir anahtara çok sayıda erişimden sonra, her DİĞER
anahtar kabaca ne kadar derinde?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • O tek anahtar her seferinde kökte oturur
  • Her DİĞER anahtarın derinliği neredeyse hiç etkilenmez
  • Splay yalnızca erişilen YOL boyunca düğümleri yeniden düzenler
  • "Küresel" bir denge garantisi yok — yalnızca yerel, erişim-başına
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

5. 2-3 Ağaçları

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu

Şimdiye kadarki her ağaç dengesizliği OLDUKTAN SONRA
düzeltir. Ya dengesizlik yapısal olarak İMKANSIZ olsaydı?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kısa bir tarihçe

  • 1972 — Rudolf Bayer & Edward McCreight
  • B-ağacına (Hafta 14, disk-destekli dosyalar) bir ara adım
  • Düğüm 1 anahtar (2-düğümü) ya da 2 anahtar (3-düğümü) tutar
  • Her yaprak her zaman TAM OLARAK aynı derinliktedir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fikir — taşma ve bölünme

  • Yeni anahtar doğru yaprağa, sıralı olarak eklenir
  • Yaprak zaten 2 anahtar tutuyorsa → şimdi geçici olarak 3: taşma
  • İki 2-düğümüne bölünür; ORTA anahtar ebeveyne taşınır
  • Ebeveyn aynı şekilde taşabilir — yukarı doğru katlanır
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

2-3 ağacı: ekleme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — taşma döngüsü

while (node->nkeys == 3) {
    split_node(node, &left, &right, &promoted);
    if (depth == 0) {
        /* kök bölünmesi: yükseklik + 1 */
        return new_root(promoted, left, right);
    }
    Node *parent = path[--depth];
    replace_with_split(parent, node,
                        promoted, left, right);
    node = parent;
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

insert(20): height = 0, level-order = [10,20]
insert(30): height = 1, level-order = [20] [10] [30]
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

2-3 ağacı eklemesi neden O(log n)

  • Her yaprak aynı derinlikte h → h = O(log n)
  • Aşağı yürüyüş: O(h); bölünmeler en fazla O(h) yukarı katlanır, her biri O(1)
  • Bugünkü diğer her ağacın aksine, hiç döndürme yok
  • Hafta 14'ün B-ağacının doğrudan atası
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • child[]'i yalnız 3 yuvaya boyutlandırmak (kararlı-durum maksimumu)
  • Taşma ortasında, bir düğüm geçici olarak 4 çocuğa ihtiyaç duyar — gerçek tampon taşması
  • Bir düğümü böldükten sonra eski kabuğu serbest bırakmamak
  • Yanlış anahtarı taşımak (ORTA olmalı)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Bir 2-3 ağacının yüksekliği neden YALNIZ kökte büyür,
hiç ortada bir yerde değil?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • Bir bölünme yalnız KENDİ düğümünün taşmasına yanıt verir
  • Taşınan anahtar KENDİ ebeveynine gider, asla bir kardeşe değil
  • Katlanma yalnız bir yol boyunca dümdüz yukarı gidebilir
  • "Ebeveyni" tükenebileceği tek yer köktür
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

6. Segment Ağaçları

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu

"l ile r arasındaki her değerin TOPLAMI nedir?"
Bir döngü O(n)'de yanıtlar. Birçok böyle sorgu — daha iyisi mümkün mü?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fikir — her aralığı bir kez önceden hesapla

  • Sabit boyutlu bir dizi üzerinde bir kez kurulur
  • Düğüm i, [lo, hi] aralığından sorumlu; çocuklar 2i, 2i+1
  • Yaprak bir değer tutar; iç düğüm iki çocuğunun toplamını tutar
  • Sorgu aşağı yürür: dışarı → 0, içeri → önceden hesaplanmış, kısmi → ikisine de in
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Segment ağacı: kurulum ve sorgu

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — query()

long query(int i, int lo, int hi, int l, int r) {
    if (r < lo || hi < l)   return 0;
    if (l <= lo && hi <= r) return tree[i];
    int mid = (lo + hi) / 2;
    return query(2*i,   lo,      mid, l, r)
         + query(2*i+1, mid + 1, hi,  l, r);
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

query(0,9) = 55
query(2,5) = 20
query(7,7) = 4
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Segment ağacı sorgusu neden O(log n)

  • build(): toplamda O(n) — her düğümü bir kez ziyaret eder
  • Her seviye: en fazla İKİ "kısmen kesişen" düğüm
  • O seviyedeki her diğer düğüm: hemen yanıtlanır ya da budanır
  • Toplam iş yükseklikle orantılı: O(log n)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Bölüm 1–5'ten yapısal bir fark

  • Segment ağacı BİÇİMİ yalnız n'e bağlıdır, hiç veri değerine değil
  • Her BST-ailesi ağacının biçimi DEĞER karşılaştırmalarına bağlıdır
  • Bir segment ağacı bölüm 1.4'ün BST'si gibi asla dejenere olamaz
  • Burada hiç ekleme-sırası problemi yok
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • Diziyi 4n yerine 2n olarak boyutlandırmak
  • "Tamamen içeride"yi "tamamen dışarıda" ile karıştırmak (ters koşullar)
  • Tek bir nokta güncellemesi için BÜTÜN ağacı (O(n)) yeniden kurmak
  • Özel bir O(log n) nokta-güncelleme fonksiyonu doğal düzeltmedir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Bir sorgunun maliyeti neden O(log n)'dir, her seviyedeki
düğüm sayısı ÇARPI O(log n) değil?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • Her seviyede en fazla İKİ düğüm "kısmen kesişiyor"
  • Her diğer düğüm: tamamen içeride (bitti) ya da tamamen dışarıda (budandı)
  • Toplam iş genişlikle değil yükseklikle orantılı
  • O(log n), O(log n) · O(n) değil
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

7. Fenwick Ağaçları

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Başlangıç sorusu

Bir segment ağacı en fazla 4n açık düğüme ihtiyaç duyar.
DÜZ BİR DİZİ önek toplamlarını aynı hızda yanıtlayabilir mi?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kısa bir tarihçe

  • 1994 — Peter Fenwick
  • "Kümülatif frekans tabloları için yeni bir veri yapısı"
  • Ağaç göstericisi yok, özyineleme gerekmez
  • Tek bir dizi, tek bir aritmetik hile: i & -i
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fikir — i & -i en düşük ayarlı biti yalıtır

  • bit[i], i'de biten i & -i büyüklüğünde bir aralığın toplamını tutar
  • update(i, delta): YUKARI yürü, i += i & -i
  • query(i): önek toplamı 1..i, AŞAĞI yürü, i -= i & -i
  • İki yürüyüş de: O(log n) adım, ağaç yapısı gerekmez
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fenwick ağacı: güncelleme ve sorgu

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

i & -i zincir uzunluğu, tek başına

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kod — update() ve query()

void update(int i, int delta) {
    while (i <= n) { bit[i] += delta; i += i & (-i); }
}
int query(int i) {
    int sum = 0;
    while (i > 0) { sum += bit[i]; i -= i & (-i); }
    return sum;
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Beklenen çıktı

update(3, 5)
update(7, 2)
query(10) = 7
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Fenwick neden O(log n), O(n) alan

  • i & -i, sınıra olan mesafeyi en az iki katına (update) ya da yarıya (query) çıkarır
  • Her iki yönde de en fazla floor(log2(n)) + 1 yineleme
  • Alan: düz bir int dizisi — bir segment ağacından çarpıcı ölçüde az
  • Dizinin boyutu değişmeyecekse pratikte tercih edilir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sık hata

  • 0-indisleme kullanmak — i & -i, indis 0'ın tüm sıfır bit olmasını ister
  • Fenwick ağaçları HER ZAMAN 1-indislidir
  • Dilin -'si yerine kendi yapımı bir "negasyon" yazmak
  • Aralık-MİN/MAKS sorguları için Fenwick'e başvurmak (çalışmaz)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

n=16 için, update(1) neden tam olarak 5 adım tutar
(i = 1, 2, 4, 8, 16)?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • i += i & -i: 1→2→4→8→16, sonra döngü durur (i, n'i geçer)
  • Beş hücreye dokunulur, her biri indis 1'i içeren bir aralıktan sorumlu
  • query(15) bunun yerine 4 adım tutar: 15'in ikili gösterimindeki (1111) her 1-biti için bir tane
  • Güncelleme ve sorgu karşıt yönlerde yürür, farklı bit örüntüleri
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

8. Teknik Seçme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Karşılaştırma — dengeli BST'ler

Yapı En kötü durum yüksekliği Yeniden dengeleme maliyeti
Düz BST O(n) yok
AVL O(log n), en sıkı eklemede <=1 döndürme
Kırmızı-siyah O(log n), daha gevşek ortalamada daha az döndürme
Splay Amortize O(log n) erişim başına tam splay
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Karşılaştırma — yapısal & aralık ağaçları

Yapı Yeniden dengeleme maliyeti En iyi olduğu yer
2-3 ağacı düğüm bölünmeleri, döndürme yok Hafta 14'ün B-ağacına köprü
Segment ağacı kurulumdan sonra yok çok sayıda aralık toplamı/min/maks
Fenwick ağacı yok aralık toplamı + sık nokta güncellemesi
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Seçme — iş yüküne göre

  • Arama-ağırlıklı → AVL (en sıkı sınır)
  • Karışık ekleme/silme/arama → kırmızı-siyah (daha az döndürme)
  • Eğik "sıcak anahtar" erişimi → splay (uyum sağlar, düşük bellek)
  • Aralık soruları → segment ağacı ya da Fenwick ağacı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini soru

Bir meslektaşınız "her zaman kırmızı-siyah kullan, en
dengeli ve kütüphane-test edilmiş" diyor. Önce ne sorardınız?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Mini yanıt

  • İş yükü arama-ağırlıklı mı, yoksa karışık ekleme/silme/arama mı?
  • Erişim küçük bir sıcak-anahtar kümesine doğru eğik mi?
  • Sorular tek anahtarlar değil ARALIKLAR hakkında mı?
  • Bu daha sonra disk-destekli bir yapıya mı besleniyor (Hafta 14)?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Özet

  • BST: insert/search/delete hepsi O(h) — ama h SIRAYA bağlı
  • Sıralı girdi bir BST'yi bir zincire dejenere eder: O(n), bir listeden iyi değil
  • AVL, kırmızı-siyah, splay, 2-3 ağacı: dört farklı düzeltme, dört ödünleşim
  • Segment ağacı, Fenwick ağacı: ARALIK sorularına O(log n) yanıtlar
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Alıştırmalar önizlemesi

  • h yüksekliğindeki bir BST'nin en fazla 2^(h+1) − 1 düğümü olduğunu kanıtlayın
  • Kırmızı-siyahın fixup durumlarını "zor" senaryoda elle izleyin
  • Bir segment ağacını aralık-MİN'e çevirmek için nelerin değişeceğini taslak çizin
  • 10 alıştırmanın tam listesi: bu haftanın notları
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Kendini sınama testi önizlemesi

  • AVL ekleme neden en fazla bir döndürme ister, ama silme neden katlanabilir?
  • Bir Fenwick ağacı aralık-minimum sorgularını neden desteklemez?
  • Bir segment ağacının biçimi veriden neden bağımsızdır?
  • Yanıtlarıyla tam 10 soruluk test: bu haftanın notları
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

İleriye bakış

  • Hafta 12 — dizgeler: eşleştirme algoritmaları, ve trie
  • Bir trie, dizgeleri sayısal karşılaştırmayla değil paylaşılan ÖNEKLE saklar
  • Hafta 13 — doğrudan ve sıralı dosya organizasyonu
  • Hafta 14 — B-ağacı: bu haftanın 2-3 ağacı, disk için genellenmiş
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN207 Veri Yapıları · Hafta 11

Sorular?

CEN207 Veri Yapıları — Hafta 11

Dr. Öğr. Üyesi Uğur CORUH · 2026-2027 Güz

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz

Konuşma notu: Bugün ağaçlara ilk kez bir SIRALAMA kuralı ekliyoruz, sonra haftanın geri kalanını o sıralı ağacın gizli bir bağlı listeye dönüşmesini önlemeye ayırıyoruz.

Konuşma notu: On iki kısa animasyon bütün dersi taşır; her biri, fikri tanıtıldığı anda görünür.

Konuşma notu: Her terim ilk geçtiğinde tam tanımını alır; bu tablo yalnızca onu tekrar nerede bulacağınızı söyler.

Konuşma notu: Canlı çalıştırmak isterseniz şimdi bir terminal açın; bugünkü her kod parçası gösterildiği gibi derlenir ve çalışır.

Konuşma notu: "Ağaç nedir" hakkında yeni bir şeye gerek yok bugün — yalnızca içindeki anahtarların nasıl dizildiğine dair yeni bir kural.

Konuşma notu: Bugünkü her karmaşıklık iddiası "O(yükseklik)"tir — yani bugün gerçekten o tek sayıyı kontrol etmekle ilgili.

Konuşma notu: Sınıfa sorun: yalnızca "sol küçük, sağ büyük" ile başka hiçbir şey olmadan ne ters gidebilir? Yanıt bölüm 1.4'te geliyor.

Konuşma notu: Aşağıdaki her kutunun kendi slaytları var, çoğunda kısa bir animasyon ve tam bir C/Java programı.

Konuşma notu: Bugünkü her "Beklenen çıktı" bloğu bir INORDER listesi yazdırır — her adımda sıralı kaldığını izleyin.

Konuşma notu: Bu dört terim bugün neredeyse her bölümde tekrar eder; biri kaybolursa buraya işaret edin.

Konuşma notu: Bölüm 1, BST'yi sıfırdan kurar: ekleme, arama, silme, sonra her şeyin ters gittiği durum.

Konuşma notu: Duraklamanın etkisini bırakın. Yanıt, ikili arama ağacı, tek bir sıralama kuralıdır.

Konuşma notu: Ekleme ve arama "kolay" yarısıdır; silme, doğru yapmak için ayrı bir makale gerektiren yarısıdır.

Konuşma notu: Telefon rehberi benzetmesi yalnızca kitap sıralıysa işe yarar — BST'nin kuralı bu "sıralı" özelliği her yerde, her zaman korur.

Konuşma notu: h, ağacın ŞU ANKİ yüksekliğidir — bölüm 1.4 tamamen h küçük olmadığında ne olacağıyla ilgilidir.

Konuşma notu: Tam olarak bir arama gibi, tek fark yürüyüşün bir düğüm YARATARAK bitmesi.

Konuşma notu: Normal örnek: karışık sırada 10 anahtar. Yeni yaprağın tam olarak karşılaştırmaların götürdüğü yere bağlandığını izleyin.

Konuşma notu: Aşağı yürüyüş aramayla birebir aynı; yalnızca NULL'da ne olduğu farklı.

Konuşma notu: Tek bir karşılaştırma sol mu sağ mı olduğuna karar verir; "bağlama" adımının tamamı bu.

Konuşma notu: Inorder listesi her tek adımda hep sıralıdır — sıralama kuralının görünür hali budur.

Konuşma notu: "Seviye başına bir karşılaştırma", karmaşıklık argümanının tamamıdır — hiçbir yerde gizli döngü yok.

Konuşma notu: Bu hata sessizdir — program çalışır, yalnızca ağacı hiç gerçekten büyütmez.

Konuşma notu: Yanıt bir sonraki slaytta — önce izleyiciye 20 saniye verin.

Konuşma notu: Bu tek gözlem, "denge neden önemli" hikayesinin tohumudur.

Konuşma notu: Yanıt "en fazla h+1"dir — ama h GERÇEKTE nedir? Sabır — bölüm 1.4.

Konuşma notu: "Yalnızca sol alt ağaçta olabilir" bir garanti, bir tahmin değil — BST kuralının size verdiği budur.

Konuşma notu: Prob sayacını izleyin — aşağı her adım tam olarak bir karşılaştırma tutar, asla daha fazla değil.

Konuşma notu: insert'in yürüyüşüyle aynı biçim, sondaki "düğüm yarat" adımı eksik.

Konuşma notu: "Bulunamadı" da gerçek sayıda prob tutar — bedava değildir, yalnızca bir eşleşme yerine bir NULL'da durur.

Konuşma notu: Bölüm 1.4 kaçınılmaz kılana kadar "her şey h'ye bağlı" demeye devam edeceğiz.

Konuşma notu: "Başarısız" olan bir arama işini doğru yapıyordur — anahtar gerçekten orada değildi.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Bu, ekleme mini-yanıtındaki AYNI zincir — aynı neden, aynı sonuç.

Konuşma notu: Sadece kaldıramazsınız — sırayı korurken bir şeyin yerini alması gerekir.

Konuşma notu: Ardıl = sağ alt ağaçtaki en küçük anahtar — sağ çocuktan mümkün olduğunca sola yürüyün.

Konuşma notu: Normal örnek, dört silmesi boyunca kasıtlı olarak üç duruma da değiniyor — her birini izleyin.

Konuşma notu: Bulunamadı gerçek bir no-op'tur — ağaç tamamen değişmeden döner.

Konuşma notu: Bu bloktan sonra cur ARDILI gösterir — ki artık en fazla bir çocuğu vardır, durum 1 ya da 2'ye indirger.

Konuşma notu: Inorder listesi her tek silmeden sonra sıralı kalır — korunan değişmez budur.

Konuşma notu: Art arda iki O(h) yürüyüş yine O(h)'dir, O(h kare) değil — hiç çakışmazlar.

Konuşma notu: AddressSanitizer (--sanitize geçişimiz) tam olarak bu sızıntıyı yakalar — bu hafta bunu kurarken benzer hatalar bulup düzelttik.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Bu, iki-çocuk durumunun neden hep daha basit iki duruma güvenle indirgendiğidir.

Konuşma notu: Bu soruyu bilerek erteliyorduk — artık yüzleşme zamanı.

Konuşma notu: "İkili arama ağacı" tek başına yükseklik hakkında hiçbir şey vaat etmez — yalnızca DEĞER sıralaması, biçim değil.

Konuşma notu: Normal: 10 artan anahtar, yükseklik 9. 10 düğüm için ideal yükseklik 3 ile karşılaştırın.

Konuşma notu: AYNI 10 anahtar, farklı sıra: yükseklik 3, 9 değil. Aynı anahtar kümesi, çarpıcı derecede farklı biçim — sıra her şeydir.

Konuşma notu: 9'a karşı 3 — neredeyse üç katı yükseklik, aynı 10 anahtar, yalnızca geliş sırası farklı.

Konuşma notu: "BST" tek başına en fazla O(n) ve en iyi ihtimalle O(log n) garanti eder — arası hiçbir şey vaat edilmez.

Konuşma notu: Bu slayt bütün dersin menteşesidir — buradan sonraki her şey tam olarak bu boşluk yüzünden var.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Sırada: girdinin önceden sıralı olduğunu bilmeye hiç gerek duymayan dört farklı strateji.

Konuşma notu: Yayımlanan ilk kendini dengeleyen BST — katı bir kural, her yerde, her zaman uygulanır.

Konuşma notu: Gerçek programlar zaman içinde ekler ve siler — her zaman önceden sıralayamayız ya da karıştıramayız.

Konuşma notu: bf = height(sol) - height(sağ). Her yerde, her zaman {-1, 0, +1} içinde tutulur.

Konuşma notu: LR ve RL "çift döndürme"dir — art arda uygulanan iki tekli döndürme.

Konuşma notu: Seçicide LL, RR, LR, RL'de ilerleyin — her biri ayrı bir preset, aynı şekilde kurulur.

Konuşma notu: Karşıt durum: denge çarpanını hiç ihlal etmeyen bir ekleme. Her ekleme döndürmez.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Bu kanıtlanmıştır, yalnızca gözlemlenmemiştir — AVL eklemenin neden ufak bir sabitle O(log n) kaldığının nedeni budur.

Konuşma notu: Bölüm 1'den zaten bildiğiniz aynı eklemeye eklenen iki ekstra satır.

Konuşma notu: Her düğümde bf'yi izleyin — hiç {-1, 0, +1}'in dışına çıkmaz, ekleme ortasında bile düzeltme hemen olur.

Konuşma notu: Karar, az önce eklenen anahtara değil, ÇOCUĞUN denge çarpanına bakar — bu biçim silme için de çalışır.

Konuşma notu: Düz bir BST'yi bozan aynı en-kötü-durum girdisi — AVL onu terlemeden ele alır.

Konuşma notu: Bu, bölüm 1.4'ün eksik olduğu garantidir — ortalama değil, en kötü durum.

Konuşma notu: Tam olarak bu hata ailesi, AVL silmeyi eklemeden doğru yazmayı daha zor kılan şeydir.

Konuşma notu: Eklemenin aksine, silmenin düzeltmesi işlem-öncesi yüksekliği HER ZAMAN geri kurmaz — bu yüzden kontrol yukarı devam etmelidir.

Konuşma notu: Zor senaryo en az bir silmenin katlanacağı şekilde kurulmuştur — birden fazla döndürmenin ateşlendiğini izleyin.

Konuşma notu: Ağaç, dizinin ortasında bile, boşalmaya doğru küçülürken bile AVL değişmezinden asla çıkmaz.

Konuşma notu: "Daha fazla döndürme" daha kötü bir karmaşıklık sınıfı demek değildir — hâlâ logaritmik, yalnızca ekleme kadar sıkı bir sabit değil.

Konuşma notu: Tam olarak bu "boşalana kadar sil" uç durumunu birim testi olarak kurduk — kendi ağaçlarınız için de yapmaya değer.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Tavşan problemiyle aynı yineleme — yalnız nüfus artışı yerine ağaç biçimlerine uygulanmış.

Konuşma notu: Daha gevşek, renk tabanlı bir denge — pratikte daha az döndürme, standart kütüphanenin genelde seçtiği.

Konuşma notu: Buradaki "daha gevşek", bir düzeltme gerekmeden önce daha fazla dengesizliğe tolerans göstermek demektir.

Konuşma notu: 2-3 ağacıyla (bölüm 5) aynı dönem — Bayer'in çalışması ikisini de bağlar.

Konuşma notu: Yeni bir anahtar KIRMIZI eklenir — bu yalnız kural 3'ü bozabilir, kural 4'ü asla.

Konuşma notu: "Amca" = ebeveynin kardeşi — çok yaygın bir karışıklık noktası, bunu yüksek sesle söyleyin.

Konuşma notu: Normal örnek, 10 eklemesi boyunca üç durumun da ateşleneceği şekilde kurulmuştur — renkleri ve durum adlarını izleyin.

Konuşma notu: Durum 1 hiç döndürmez — saf yeniden renklendirme, sonra ihlal iki seviye yukarıda yeniden ortaya çıkabilir.

Konuşma notu: 3B = 3 anahtarı, Siyah. 69R = 69 anahtarı, Kırmızı. bh = kökün siyah-yüksekliği.

Konuşma notu: Bu yüzden C++ std::map, Java TreeMap, ve Linux zamanlayıcısının hepsi AVL değil kırmızı-siyah kullanır.

Konuşma notu: Son yeniden renklendirmeyi atlamak ince bir hatadır — yalnızca belirli ekleme dizilerinde ortaya çıkar.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Eklemenin her zaman kırmızı başlamasının nedeni budur — bir kuralı bozmak için "daha güvenli" renktir.

Konuşma notu: Hiç katı denge yok — ağaç, onu gerçekte nasıl kullandığınıza uyum sağlar.

Konuşma notu: Ya ağaç her yerde sabit bir kuralı zorlamak yerine KULLANIM ÖRÜNTÜLERİNE uyum sağlasaydı?

Konuşma notu: Bu, bugünkü diğer her ağaçtan gerçekten farklı bir felsefe — zorlama, uyum sağla.

Konuşma notu: zig-zig, büyükanne/baba-ebeveyni ebeveyn-düğümden ÖNCE döndürür — o sıra amortize garantiyi veren şeydir.

Konuşma notu: Normal örnek zig, zig-zig VE zig-zag'ın hepsinin olacağı şekilde kürate edilmiştir — her başlıkta durum adını izleyin.

Konuşma notu: rotate_up(n), n'i KENDİ ebeveyni üzerinden döndürür — durum kaç kez, ve hangi sırayla olacağına karar verir.

Konuşma notu: Anahtar ne kadar derinden başlarsa başlasın, bir erişim onu en tepeye koyar.

Konuşma notu: "Amortize" = uzun bir dizi üzerinde ortalanmış, tek başına hiçbir işlem için garanti edilmemiş.

Konuşma notu: "Saf splay" hâlâ doğru bir BST üretir — yalnızca arkasında performans kanıtı yoktur.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Bir splay ağacının "katı dengesi yok" demesinin tam anlamı budur.

Konuşma notu: Asla anlık olarak bile eğri değil — çünkü yapraklarda değil, kökte, yukarı doğru büyür.

Konuşma notu: Döndürmelerden tamamen farklı bir felsefe — onar değil, önle.

Konuşma notu: Kırmızı-siyahın atası makalesiyle aynı Bayer — aynı dönemden iki ilişkili fikir.

Konuşma notu: Katlanma köke ulaşıp orada bölünürse, yükseklik bir artar — HER YERDE aynı anda.

Konuşma notu: Seviye-sıralı listenin köşeli parantez gruplarını izleyin — her yaprak-seviye grubu aynı satırda kalır.

Konuşma notu: Bu fonksiyonun hiçbir yerinde döndürme yok — yalnız bölme ve taşıma.

Konuşma notu: Bir düğüm 3 anahtar tutacağı ANDA hemen bölünür — yazdırılmış 3-anahtarlı bir düğümü gerçekte hiç görmezsiniz.

Konuşma notu: "Sıfır döndürme", AVL, kırmızı-siyah, ve splay'den en büyük yapısal fark.

Konuşma notu: Bu haftanın programını kurarken tam olarak bu dizi-boyutlandırma hatasını bulduk — gerçek bir bellek-bozulması çökmesi.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Yükseklik büyümesinin neden her zaman küresel olduğu, hiç yerel olmadığı tam olarak budur — başka olacak yer yok.

Konuşma notu: Gerçekten farklı bir soru: "x burada mı" değil, bütün bir ARALIK hakkında.

Konuşma notu: Bu çok yaygın gerçek bir sorudur: bir pencere üzerindeki toplamlar, bir tarih aralığı, bir fiyat aralığı.

Konuşma notu: "Kısmi kesişme" toplamda yalnız O(log n) düğümde olur — karmaşıklık argümanının tamamı bu.

Konuşma notu: Hangi düğümlerin yeşile döndüğünü (tamamen içeride, doğrudan kullanılır) hangilerinin budandığını (soluk, kesişme yok) izleyin.

Konuşma notu: Üç durum, üç satır mantık — dışarı, tamamen içeri, kısmi.

Konuşma notu: Tek noktalı bir sorgu yalnızca uzunluğu bir olan bir aralıktır — aynı fonksiyon özel bir durum olmadan ele alır.

Konuşma notu: "Seviye başına en fazla iki" — [l, r]'nin her sınırında bir tane — üzerinde tekrar durmaya değer temel gerçek.

Konuşma notu: Bunun üzerinde durmaya değer — bugünkü diğer her şeyden gerçekten farklı bir tür ağaç.

Konuşma notu: 4n boyutlandırması, n'in zorunlu olarak bir ikinin kuvveti olmamasından gelir — ağaç mükemmel "tam" değildir.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Bu, karmaşıklık slaytındaki AYNI "seviye başına en fazla iki" gerçeği — şimdi bir kendini sınama olarak.

Konuşma notu: Aynı aralık-toplamı fikri, hiç açık ağaç olmadan — tek bir dizi, tek bir bitsel hile.

Konuşma notu: "Fenwick ağacı" ve "ikili indeksli ağaç (BIT)" aynı yapının iki yaygın adı.

Konuşma notu: Bugünkü diğer her yapıdan çok daha yeni — gerçekten modern, asgari-yük bir fikir.

Konuşma notu: "i & -i", ikiler tümleyeni negasyonuna dayanır — aynı hile C'de ve Java'da birebir aynı çalışır.

Konuşma notu: Vurgulanan hücrenin altındaki braceyi izleyin — o hücrenin tam olarak hangi aralıktan sorumlu olduğunu gösterir.

Konuşma notu: n=16'da update(1) 5 hücreye dokunur; query(16) yalnız 1 hücreye — tam tersi uçlar.

Konuşma notu: Her iki işlem için toplam dört satır — yapının tamamı bu.

Konuşma notu: İki güncelleme, bir sorgu — koşan toplam her iki deltayı da doğru yansıtır, her biri O(log n).

Konuşma notu: Daha az kod, daha az bellek, aynı asimptotik garanti — çekiciliği tamamen pratik, kuramsal değil.

Konuşma notu: Aralık min/maks, toplamın olduğu gibi TERSİNİR değildir — bu onu yapısal olarak dışlar, yalnızca gelenek gereği değil.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Sorgu için "1-bit başına bir adım", tahtaya yazılmaya değer temiz, akılda kalıcı bir kural.

Konuşma notu: Yedi yapı, her birinin en iyi çözdüğü bir soru — hepsini yan yana koyalım.

Konuşma notu: "En sıkı" ile "daha gevşek", SABİT çarpanla ilgilidir, büyük-O sınıfıyla değil — ikisi de logaritmiktir.

Konuşma notu: 2-3, segment, ve Fenwick ağaçları dengeli-BST ailesinden gerçekten farklı problemleri çözer.

Konuşma notu: "En dengeli" önemli olan tek eksen değildir — iş yükü doğru yapıya karar verir.

Konuşma notu: Yanıt bir sonraki slaytta.

Konuşma notu: Bugünkü her yapı, bazı belirli bir iş yükü için DOĞRU yanıttır — hiçbiri evrensel olarak en iyi değildir.

Konuşma notu: Yapı başına bir cümle — yalnız bu slaydı hatırlarsanız, bütün haftaya sahipsiniz.

Konuşma notu: On alıştırmanın hepsi bu haftanın gerçek programları üzerine doğrudan kuruludur — gerçek kod açıkken izleyin.

Konuşma notu: Notlara bakmadan önce hafızadan yanıtlamayı deneyin — bir kendini sınamanın bütün amacı bu.

Konuşma notu: Bugün tanıştığınız 2-3 ağacı, Hafta 14'ün B-ağacının tam olarak m=3 özel durumudur.

Konuşma notu: Söz hakkı verin — ve ne gelirse gelsin en iyi yanıtlayan animasyon presetine geri işaret edin.