15  Quiz 1 Gözden Geçirme

Ders 1-12 toplu tekrar — büyük dört (çöz/kanıtla/verimli/anlat), iki çözüm yolu (sıfırdan vs İNDİRGE), üç problem tipi (white-box/black-box/modification), tuzaklar (rasyonel-radix-augmentation) ve iki gerçek sınav problemi (Criminal Seafood + Rainy Research)

NotOturum bilgisi
  • Ku’nun videosu: YouTube — Quiz 1 Review (≈85 dk — normal dersten uzun!)
  • OCW sayfası: MIT 6.006 Quiz 1 Review
  • Seri: MIT 6.006 — Introduction to Algorithms (Spring 2020) — Ders 14 (Quiz 1 Review)
  • Hoca: Jason Ku
  • Okuma süresi: ≈28 dk

Bu normal bir ders değil — Quiz 1 öncesi toplu tekrar oturumudur. Kursun ilk yarısını (Ders 1-12) tek çatı altında toparlar ve sınavda nasıl düşünüleceğini öğretir.

15.1 Bu Quiz Review Ne Hakkında?

Bu, Jason Ku ile Quiz 1 öncesi toplu tekrar oturumudur. Kursun ilk yarısını (Ders 1-12: hesaplama modeli, asimptotikler, özyineleme/master teoremi, sıralama, hashing, ikili ağaçlar/AVL, ikili yığın) tek çatı altında toparlar ve sınavda nasıl düşünüleceğini öğretir. İçerik üç eksende ilerler: (1) quiz neyi ölçer, (2) konu tekrarı (veri yapıları + sıralama bloğu), (3) iki gerçek sınav problemi çözümü.

“What are we trying to test you in this class? … Algorithms. … Also data structures.” — Ku, 0:40

Ku’nun “büyük dört” hedefi (kursun ve quiz’in özü): bir hesaplama problemini (1) çöz, (2) doğru olduğunu kanıtla, (3) verimli olduğunu göster, (4) bunu başkalarına anlat.

“part of this class is about communication. If your thing is correct but we can’t tell what you’re saying, then it’s not correct.” — Ku, 33:24

flowchart TD
    A["Ders 14: Quiz 1 Review"] --> B["Büyük dört<br/>çöz · kanıtla · verimli · anlat"]
    A --> C["İki çözüm yolu"]
    C --> C1["sıfırdan tasarla (zor)<br/>İNDİRGE (esas beklenen)"]
    A --> D["Üç problem tipi"]
    D --> D1["white-box · black-box<br/>modification"]
    A --> E["Tuzaklar"]
    E --> E1["rasyonel hesabı (çapraz çarp)<br/>her şeye radix · sahte augmentation"]
    A --> F["Konu tabloları"]
    F --> F1["sıralama · sequence · set + PQ"]

    classDef root fill:#fef3c7,stroke:#b45309,stroke-width:3px,color:#1f2937
    classDef branch fill:#f3f4f6,stroke:#374151,stroke-width:2px,color:#1f2937
    classDef leaf fill:#ffffff,stroke:#9ca3af,stroke-width:1px,color:#1f2937
    class A root
    class B,C,D,E,F branch
    class C1,D1,E1,F1 leaf
Şekil 15.1: Ders 14’ün (Quiz 1 Review) kavram haritası: kök = Quiz 1 Review. Beş dal — (1) büyük dört: çöz / kanıtla / verimli yap / anlat (iletişim de puana dahil). (2) iki çözüm yolu: sıfırdan tasarla (zor, nadiren istenir) vs bilinen kara kutuya İNDİRGE (esas beklenen). (3) üç problem tipi: white-box (içyapı) / black-box (reduction) / modification (augmentation). (4) tuzaklar: rasyonel hesabı (çapraz çarp), her şeye radix, subtree-property olmayan augmentation. (5) konu tabloları: sıralama (heap/radix özel), sequence (doubly-linked O(1) uç), set (augmented AVL ⊃ sorted array). Sonuç: Quiz 1 = icat değil SEÇİM sınavı.
İpucuBuilder Notu — Bu = İlk-Yarı Midterm

Quiz 1, kursun ilk-yarı sınavıdır: veri yapıları + sıralama bloğunu kapsar. Çizge ve dinamik programlama, Quiz 2-3’e kalır.

  • Bu = midterm. OMSCS CS 6515 (Graduate Algorithms) ekseninde Quiz 1, “veri yapısı + sıralama refleksi” yani lisansüstü dersin giriş varsayımıdır.
  • Reduction = mühendisliğin kalbi. “Bilinen bir kara kutuya indirge” disiplini, hem graduate algoritma dersinin hem de gerçek sistem tasarımının temel refleksidir.
  • İleriye → graduate algorithms: burada öğrenilen “önce arayüz (correctness), sonra implementasyon (efficiency)” ayrımı, DP ve NP-tamlıkta birebir tekrar eder.

Tek cümle: Quiz 1, “yeni algoritma icat et” demez; “doğru kara kutuyu seç, neye indirgediğini ve neyi sakladığını net söyle, sonra verimliliği optimize et” der.

15.2 1. Büyük Dört ve İki Çözüm Yolu

Sınav, algoritma icat etmeni beklemez. Bir hesaplama problemini çözmenin iki yolu vardır:

  1. Sıfırdan tasarla (zor yol): brute force veya böl-yönet gibi bir paradigmaya başvur. Bu, 6.046’nın işidir; 6.006’da nadiren istenir.
  2. Bilinen bir şeye indirge (kolay yol, esas beklenen): derste öğretilen bir algoritmaya/arayüze reduction.

“reduce to a known thing — an algorithm that we’ve taught you.” — Ku, 5:25

Esas oyun: sana öğretilen sıralama ve sequence/set arayüzlerini kara kutu olarak kullanmak; mühendis olarak “ne zaman hangisini” seçeceğini söylemek. “Büyük dört” hedef bunun çerçevesidir: çöz, doğru olduğunu kanıtla, verimliliğini göster, anlat — son adım (iletişim) de puana dahildir.

15.3 2. Üç Problem Tipi: White-box / Black-box / Modification

Ku, quiz problemlerini üç sınıfa ayırır:

“there’s three different types of problems.” — Ku, 7:02

  • (a) İçyapı / white-box: veri yapısının içini bilmen gerekir — bir AVL ağacında rotasyon nasıl yapılır, bir max-yığında en üst \(k\) öğe nerede. Kara kutu değil; içine bakman şart.
  • (b) Reduction / black-box: sadece API’yi bilmen yeter; çekirdek malzemeyi uygula. “Kütüphane import etmek” gibi — içine bakmazsın, sözleşmesine güvenirsin.
  • (c) Modification / augmentation: hem API’yi hem içyapıyı bilmen gerekir — bir AVL’ye yeni bir özellik (augmentation) eklemek, dinamik diziyi ortadan büyütmek, böl-yönet’i uyarlamak. En zoru.

“Use as a black box… you import a library into your code… It’s opaque to me.” — Ku, 6:17

Bir problemi bu üç tipten birine yerleştirebilmek, “ne kullanmalıyım?” sorusunu hızlandırır.

Şekil 15.2 üç tipi yan yana koyar: kapağı açık kutu (white-box, içyapı görünür), kapalı/opak kutu + API fişi (black-box, amber vurgu — quiz’in esas beklediği), yarı açık kutu + anahtar (modification, hem API hem içyapı).

Şekil 15.2: Quiz 1’in üç problem tipi (QR1 §2, İMZA figür): bir problemle karşılaşınca onu üç tipten birine yerleştir — tip, ‘ne kullanmalıyım?’ sorusunu hızlandırır (Ku 7:02). (a) WHITE-BOX / içyapı — kapağı AÇIK kutu, iç dişli görünür: yapının içini elle yürütmen gerekir (AVL rotasyonunu elle yürüt; yığında en üst k öğe nerede). Rozet: İÇİNE BAKMAN ŞART. (b) BLACK-BOX / reduction (AMBER çerçeve = quiz’in ESAS beklediği, Ku 6:17) — kapalı/opak kutu + API fişi: içine bakmadan yalnız sözleşmeye güvenirsin (problemi SIRALAMAYA indirge, kütüphaneyi import et). Rozet: SÖZLEŞMEYE GÜVEN. (c) MODIFICATION / augmentation (en zoru) — yarı açık kutu + anahtar: var olan yapıyı değiştirip yeni alan/davranış eklersin (AVL’ye yeni alan ekle; dinamik diziyi ORTADAN büyüt). Rozet: HEM API HEM İÇYAPI. Motor tanığı: CrossLinkedWaitlist black-box örneği — add(Ali,Bora,Can) → seat() = Ali → [Bora, Can], içine bakmadan sözleşme.

15.4 3. Reduction Disiplini: Önce Arayüz, Sonra Verimlilik

Kilit teknik: bir algoritma/veri yapısı yerine bir probleme veya arayüze indirge.

“a lot of times it’s useful to reduce it to a problem or an interface rather than an algorithm or a data structure.” — Ku, 9:43

Neden? “Sıralamaya indirgedim” dersen doğruluğu hemen savunursun (sıralama kara kutusu doğru); hangi sıralama algoritması olduğu yalnızca verimliliği etkiler. Böylece correctness ile efficiency’yi ayırırsın (decouple).

“approach these things by solving these problems just in terms of the interfaces first.” — Ku, 28:14

Veri yapıları probleminde altın kural: ne sakladığını ve neye anahtarlandığını (keyed on) söyle, sonra değişmezleri (invariants) belirt. Doğruluk kanıtı, “işlemden önce değişmezler geçerliyse, işlemden sonra da geçerli kalır” tümevarımına dayanır.

“based on the assumption that those invariants held before my operation… I can prove that an operation is correct.” — Ku, 31:56

15.5 4. Sınav Stratejisi ve Kısmi Puan

  • Önce tüm sınavı oku, sana en kolay gelenleri seç, güven sırasına göre çöz.

“read through the entire exam before you start.” — Ku, 11:27

  • Ortalama genelde 60-80 arası; problemlerin %50’sini iyi yapmak, hepsini yarım yapmaktan iyidir.
  • Kısmi puan: doğru ama verimsiz bir algoritma puan alır. Exponential ise %10-20 ile sınırlı; log/linear faktör kadar yavaşsa daha çok puan. Ama verimsiz algoritmayı hedef karmaşıklıkmış gibi analiz etmek iki kat hata.
  • Çoklu-parça problemler bağımsızdır: A’yı çözmeden B çözülebilir.
  • Kod yazmazsın, kod okursun (Python/pseudocode parçacıkları).

“If you’re stuck, write down a correct algorithm that’s inefficient.” — Ku, 19:23

15.6 5. Kaçınılacak Tuzaklar (Downsides)

Üç refleks “yanlış yoldasın” işaretidir:

  1. Ondalık / rasyonel / reel sayı hesabı. Bu kurs yalnızca tamsayı öğretti. İki kesri karşılaştırman gerekiyorsa bölme yapma — çapraz çarpım ile \(O(1)\)’de karşılaştır.
  2. Her şeye Radix sort. Yalnızca tamsayılar polinom-sınırlıysa (\(u = n^c\)) doğrusal olur. Sınır yoksa exponential olabilir; comparison gereken yerde merge sort (\(n \log n\)) kullan.
  3. Subtree-property olmayan augmentation. Bir düğümün augmentation’ı, iki çocuğunun augmentation’larından \(O(1)\)’de hesaplanabilmelidir. “Tüm ağaçtaki indeksim” veya “sol alt-ağacımın boyutu” doğrudan tutulamaz (rotasyonda logaritmik yürüyüş gerekir); doğrusu alt-ağaç boyutunu tutup soldakini çocuğundan okumaktır.

“if you’re trying to augment a binary tree with something that’s not a subtree property… you’re doing something bad.” — Ku, 24:32

Augmentation tanımlarken: formülü ver ve \(O(1)\)’de bakım yapıldığını göster.

“Max can be computed as the max between me and my left and right subtree.” — Ku, 27:49

15.7 6. Konu Tekrarı — Sıralama Algoritmaları

Neden bu kadar çok sıralama algoritması? Çünkü farklı senaryolar farklı algoritma ister.

“Why do we show you so many sorting algorithms?” — Ku, 36:45

  • Insertion sort: \(k\)-yakın dizide (öğeler en fazla \(k\) uzak) \(O(n \cdot k)\)\(k\) küçükse iyi; ama ikili yığınla \(O(n \log k)\)’ya inilir.
  • Selection sort: okuma ucuz, yazma pahalıysa iyi (doğrusal sayıda swap).
  • Merge sort / AVL sort: \(O(n \log n)\), asimptotik olarak denk; genel amaçlı.
  • Heap sort: worst-case \(O(n \log n)\) ve yerinde (in-place). Anahtar: diziyi bir tam ikili ağaç (complete binary tree) olarak görmek — dizi \(\leftrightarrow\) ağaç birebir eşleşir (tamlık benzersizliği verir).
  • Radix sort: tamsayılar polinom-sınırlıysa (\(u = n^c\)) doğrusal; hatta \(u = n^c \cdot \log \log n\) gibi durumda merge sort’tan hızlı. Sınır yoksa kötü.

“this correspondence between arrays and binary trees.” — Ku, 40:17

15.8 7. Konu Tekrarı — Sequence Veri Yapıları

Üç temel: bağlı liste (linked list), dinamik dizi (dynamic array), sequence AVL.

  • Derste sunulan tekli bağlı liste (singly-linked) — sonu bulmak/silmek \(O(n)\).
  • Çiftli bağlı liste (doubly-linked): önceki işaretçiyle, uçta ekleme/silme \(O(1)\).
  • Uçlarda (ön + arka) \(O(1)\) için üç yol gösterildi: (1) çiftli bağlı liste, (2) sırt sırta iki dinamik dizi (double-ended queue), (3) hash tablosu + en küçük indeksi saklama (sequence’i set’le taklit etmek).
  • Sequence AVL: ortaya \(O(\log n)\) ekleme; pratikte nadir, ama teorik olarak dengeli sınırlar verir.

“I call this a linked data structure, because I’m linking between two data structures.” — Ku, 1:04:22

15.9 8. Konu Tekrarı — Set Veri Yapıları ve Öncelik Kuyruğu

  • Sıralı dizi (sorted array): iyi find (ikili arama), ama dinamik değil.
  • Set AVL: iyi find + dinamik; \(O(n \log n)\) build (özünde sıralama).
  • Hash tablosu / direct access array: sözlük işlemleri (find/insert/delete) çok hızlı; ama sıra (order) işlemleri kötü.
  • Teori sorusunda set AVL’yi alt-ağaç max/min ile zenginleştirirsen, sıralı diziden her açıdan üstün olur.
  • Öncelik kuyruğu (priority queue): ikili yığın; veya max/min augmentation’lı sequence AVL (amortizasyonsuz aynı sınırlar).

“augment by the max… I can make this one strictly better than this one.” — Ku, 53:38

15.10 Bu Quiz Review’in Özeti

  1. Quiz = veri yapıları + sıralama bloğu (Ders 1-12); “büyük dört”: çöz, kanıtla, verimli yap, anlat.
  2. İki yol: sıfırdan tasarla (zor) vs bilinen kara kutuya indirge (esas beklenen).
  3. Üç problem tipi: white-box (içyapı) / black-box (reduction) / modification (augmentation).
  4. Reduction disiplini: önce arayüz (correctness), sonra implementasyon (efficiency); ne sakladığını + neye anahtarlandığını + değişmezleri söyle.
  5. Strateji: tüm sınavı oku, kolayı seç; sıkışınca doğru-ama-verimsiz yaz.
  6. Tuzaklar: rasyonel hesabı (çapraz çarp), her şeye radix, subtree-property olmayan augmentation.
  7. Tablolar: sorting (heap/radix özel), sequence (doubly-linked \(O(1)\) uç), set (augmented AVL \(\supset\) sorted array).
ÖnemliTek Bir Cümle

Quiz 1, icat değil seçim sınavıdır: doğru kara kutuyu seç, neye indirgediğini ve neyi sakladığını açıkça yaz, correctness’i invariant’larla kanıtla, sonra verimliliği optimize et.

15.11 Quiz-tarzı Problemler

Aşağıda dört quiz-tarzı problem var; her birinin çözümünü açmadan önce kendin dene. İlk ikisi motorla doğrulanmıştır (gerçek sınav problemleri); son ikisi mekanik kontrol soruları.

Şekil 15.3 Problem 1’in iki bileşenli yapısını gösterir: çiftli bağlı liste C (sıra) + hash tablosu M (isim → düğüm işaretçisi); remove ve seat her ikisi de \(O(1)\).

Çözüm.

İki ihtiyaç var: (i) sıra (extrinsic order) — önce gelen önce oturur; (ii) isimle arama — bir müşteriyi adından bul. Bu, “iki anahtarlı” bir problem → iki veri yapısı + cross-linking.

  • Sequence: çiftli bağlı liste (doubly-linked list) C — müşterileri sırada tutar. (Çiftli, çünkü ortadan silerken iki komşuyu \(O(1)\)’de dikmek gerekir.)
  • Set: hash tablosu M — ismi, o müşterinin C’deki düğümüne işaretçisine eşler.

Kritik incelik: indeks değil işaretçi sakla. İndeks saklarsan, biri oturunca tüm indeksler kayar ve M’yi baştan güncellemen gerekir (\(O(n)\)); düğüm işaretçisi ise öğe çıkana dek değişmez.

“store a pointer… to the node… because the node isn’t changing.” — Ku, 1:06:04

İşlemler: add x → x’i C’nin sonuna ekle (düğüm v), M’ye x → v koy. remove x → M’den v’yi bul, C’den v’yi çıkar (çiftli bağlantıyla dik), M’den sil. seat → C’nin başını sil, o müşterinin adını M’den çıkar. Hepsi \(O(1)\) (hash beklenen, liste worst-case).

Karmaşıklık. Tüm işlemler \(O(1)\) (hash işlemleri beklenen; liste işlemleri worst-case).

Şekil 15.4 Problem 2’nin imza fikrini gösterir: alt-ağaç-max ile zenginleştirilmiş zaman-AVL’de tek taraflı aralık sorgusu — her düğümde bir taraf toptan halledilir, tek iniş yolu \(O(\log n)\).

Şekil 15.4: Tek taraflı aralık sorgusu (QR1 Problem 2, İMZA figür, Ku 1:24:47): alt-ağaç-max zenginleştirme → peak_rainfall O(log n). Zaman-anahtarlı AVL (5 düğüm): kök 20, çocukları 10 ve 40, 40’ın çocukları 30 ve 50; her düğümde zaman + yağış r + amber submax kutusu (alt-ağaç max, MOTORDAN). Sorgu t=25 (‘t’den beri en yüksek yağış’, zaman ≥ 25). İmza fikir: her düğümde aralığın BİR tarafı TOPTAN halledilir → tek iniş yolu. 20 < 25 → SOL alt-ağaç (10) TOPTAN DIŞARI (soluk + X), sağa in; 40 ≥ 25 → SAĞ alt-ağaç (50) TOPTAN İÇERİDE → submax(50) O(1) OKU (inilmez), sola in; 30 ≥ 25 → r=1 al, dur. Sonuç MOTORDAN: peak = max(r(30)=1, submax(50)=2, r(40)=7) = 7 = brute tanığı; yol = [20, 40, 30]. Her seviyede yalnız BİR çocuğa inilir → O(log n).

Çözüm.

Ölçümler (r yağış, l enlem, t zaman) üçlüsü; hepsi tamsayı, sınırsız → enlemin “küçük” olduğunu varsayma. Worst-case istendiği için hash değil set AVL.

  • Dış yapı: enlem-anahtarlı set AVL L — her enlem l’yi bir “zaman veri yapısına” T(l) eşler.
  • İç yapı: her T(l), zaman-anahtarlı set AVL — zamanı yağışa eşler.
  • Augmentation: her düğümde alt-ağaçtaki maksimum yağış (alt-ağaç max r). Bu bir subtree-property’dir: düğüm = max(kendi r, sol alt-ağaç max, sağ alt-ağaç max), \(O(1)\)’de bakım.

One-sided range query (tek-taraflı aralık sorgusu): “\(t\)’den büyük-eşit tüm zamanlardaki max yağış”ı \(O(\log n)\)’de bul. Özyinelemeli, düğüm \(v\)’de iki durum:

def peak(v, t):           # v koku, t alt sinir
    if v is None:
        return 0
    if v.time < t:        # v + tum SOL alt-agac (< v.time < t) araligin DISINDA
        return peak(v.right, t)
    else:                 # v araliginda: SAG alt-agacin tamami da araliginda
        return max(v.r,
                   v.right.submax if v.right else 0,  # O(1): sag submax OKU
                   peak(v.left, t))                   # belirsiz SOLA in

[motor notu] — Kaynak sayfadaki pseudocode’un yönleri ters yazılmıştı (sol submax okuyup sağa iniyordu); bu, sol alt-ağaçtaki \(t\)’den küçük zamanları yanlışlıkla dahil eder. Bağımsız brute-force tanığı farkı doğruladı: ters yön 1000 sorgudan 193’ünde yanlış değer verdi, doğru yön (\(v.\text{right}.\text{submax}\) oku + \(\text{peak}(v.\text{left})\)) 1000/1000 brute ile eşleşti. Statement (“\(t\)’den beri max”) bağlayıcı; yukarıdaki kod doğru yönü uygular.

Püf nokta: aralık içindeyken sağ alt-ağaca inmek yerine onun augmented max’ını \(O(1)\)’de oku; yalnızca sola tek bir özyinelemeli iniş yap → ağaç boyunca tek yol → \(O(\log n)\).

“that’s what we call a one-sided range query.” — Ku, 1:24:47

Karmaşıklık. record_data \(O(\log n)\) (iki AVL’ye ekleme); peak_rainfall worst-case \(O(\log n)\).

Cevap:

Doğrudan hayır — ama dolaylı evet. “Sol alt-ağaç boyutu”, rotasyon/güncellemede iki çocuğun augmentation’ından \(O(1)\)’de türetilemez (logaritmik yürüyüş gerekir), yani tek başına bir subtree-property değildir. Doğru yol: her düğümde kendi alt-ağaç boyutunu (size = 1 + sol_size + sağ_size, \(O(1)\) bakım) tut; “sol alt-ağaç boyutu” gerektiğinde sol çocuğun size’ından okunur. Genel kural: depolanan augmentation daima bir subtree-property olmalı; türev bilgiler ondan \(O(1)\)’de hesaplanır.

“just augment the thing itself and just look at your left subtree and look at its augmentation.” — Ku, 25:42

Bu size augmentation’ı, rank sorgusu (k. en küçük, tek-taraflı aralık) verir — sequence AVL’nin subtree_at’inin set karşılığı.

Cevap:

  • Worst-case: \(O(n)\). Hash tablosunun worst-case araması \(O(n)\)’dir (tüm anahtarlar aynı kovaya düşebilir); AVL \(O(\log n)\). Toplam worst-case \(O(n + \log n) = O(n)\).
  • Beklenen: \(O(\log n)\). Hash beklenen \(O(1)\) + AVL \(O(\log n) = O(\log n)\).

Ders: “beklenen” ve “worst-case” farklı sözleşmelerdir. Sınav “worst-case istiyorum” derse hash tablosu kullanma (set AVL’ye geç); “expected/amortized serbest” derse hangi sınıfı elde ettiğini etiketle.

“It’s possible that in the worst case it could be higher.” — Ku, 30:15

15.12 Quiz Hazırlığı Egzersizleri

Egzersiz 1. Sıralama tablosunu boş bir kâğıda ezberden doldur: her algoritma için worst-case süre, kararlı mı (stable), yerinde mi (in-place), hangi özel durumda tercih edilir.

Egzersiz 2. Sequence, set ve priority queue arayüzlerinin işlem-süre tablolarını ezberden çıkar; her hücreyi “hangi implementasyon bunu verir?” ile eşle.

Egzersiz 3. Üç master-teoremi durumunu üç farklı özyinelemeye uygula (örn. \(T(n) = 2T(n/2) + O(n)\), \(T(n) = 2T(n/2) + O(n^2)\), \(T(n) = 4T(n/2) + O(n)\)).

Egzersiz 4. Bir set AVL için yeni bir augmentation tasarla (örn. alt-ağaç toplamı), formülünü yaz ve rotasyonda \(O(1)\)’de korunduğunu kanıtla.

Egzersiz 5. İki anahtarlı (örn. isim + öncelik) bir veri yapısı problemini cross-linking ile çöz: hangi veri yapılarını, neye anahtarlanmış, hangi değişmezlerle kurarsın?

15.13 Quiz 2 Öncesi Kapsam Genişlemesi

Quiz 1 buraya kadar; sıradaki blok (Quiz 2 kapsamı) çizge algoritmalarına geçer:

  • Ders 13 ve 15 (L9-L10): çizge temeli, BFS (ağırlıksız en kısa yol, \(O(V+E)\)), DFS (topolojik sıralama, çevrim).
  • Ders 16, 18-19 (L11-L13; araya Ders 17 PS5 girer): ağırlıklı en kısa yollar — Bellman-Ford (negatif kenar), Dijkstra (öncelik kuyruğu).
  • Ders 21 (L14): tüm-çiftler en kısa yollar (Johnson).

Bağ: bu blokta da aynı disiplin sürer — çizgeyi komşuluk listesiyle sakla (bir veri yapısı seçimi), problemi BFS/DFS/Dijkstra kara kutusuna indirge, sonra verimliliği analiz et.

15.14 Ders 1-12 Toplu Cheat Sheet

Konu Özü Kaynak (L/PS)
Hesaplama modeli Word-RAM; \(O(1)\) işlemler; tamsayı bir kelimeye sığar L1
Asimptotikler \(O\), \(\Theta\), \(\Omega\); karmaşıklık mertebeleri L1-L2
Master teoremi \(T(n) = a \cdot T(n/b) + f(n)\); 3 durum PS2
Sıralama merge/AVL (\(n \log n\)), heap (worst \(n \log n\), in-place), radix (\(n^c \to\) linear) L3, L5
Sequence DS doubly-linked (\(O(1)\) uç), dynamic array, sequence AVL (\(O(\log n)\) orta) L2, L7
Set DS sorted array (statik), set AVL (dinamik), hash (sözlük hızlı / sıra kötü) L3
Hashing beklenen \(O(1)\); zincirleme; universal hashing L4
İkili ağaç / AVL \(O(h)\); denge \(\to h = O(\log n)\); rotasyon; augmentation L6-L7
İkili yığın complete tree \(\leftrightarrow\) array; build \(O(n)\), delete_max \(O(\log n)\) L8
Öncelik kuyruğu binary heap veya max/min-augmented sequence AVL L8
UyarıSonraki Ders

Ders 15 (L10): Derinlemesine Arama (DFS)

Justin Solomon ile, BFS’in kardeşi DFS (depth-first search)’e geçiyoruz: çizgeyi “olabildiğince derine in, sonra geri çekil” mantığıyla gez. DFS, topolojik sıralama (bağımlılık sıralaması) ve çevrim tespiti için kullanılır.

15.15 Builder ve OMSCS Bağlantıları

İpucu6 köprü

Bu tekrar oturumu, “doğru kara kutuyu seç, indirge, sakladığını ve anahtarladığını yaz” disiplinini kurar — köprülerin özeti:

  1. Quiz 1 = ilk-yarı midterm → OMSCS CS 6515: veri yapıları + sıralama refleksleri, graduate dersin giriş varsayımıdır.
  2. Reduction → her şey → “kara kutuya indirge” disiplini, DP ve NP-tamlıkta (problem A’yı B’ye indirgemek) birebir döner.
  3. Correctness/efficiency ayrımı → mühendislikte “önce çalışsın, sonra hızlansın”; profilleme öncesi doğruluk.
  4. Cross-linking → gerçek sistemler: aynı veriyi iki indeksle (örn. ID + zaman) tutup işaretçiyle bağlamak — veritabanı ikincil indeksi.
  5. Augmentation = subtree-property → aralık sorguları (segment tree, order-statistics tree) — finans/analitik altyapısının çekirdeği.
  6. İletişim puana dahil → kod review, tasarım dokümanı: “doğru ama anlatılamayan = yanlış”.

ÖnemliTek bir şey alıp gideceksen

Quiz 1 senden algoritma icat etmeni değil, doğru kara kutuyu seçmeni ister. Problemi bir arayüze indirge, ne sakladığını ve neye anahtarlandığını açıkça yaz, doğruluğu değişmezlerle kanıtla — verimlilik en son gelir. “Doğru ama anlatılamayan çözüm, yanlış çözümdür.”