Mühendislik ve bitirme projeleri · 53 / 53
Bitirme laboratuvarları ve araştırma rotası
Anla → iz sür → uygula → gerekçelendir
2 dk okuma · uygulama için ayrıca zaman ayırLaboratuvar 1 — Rota motoru: Directed weighted graph dosyasını doğrula. BFS, Dijkstra ve Bellman-Ford'u ayrı contracts ile uygula. Random küçük graflarda Floyd-Warshall oracle kullan. Negatif cycle, disconnected node ve zero-weight edge testleri yaz. Raporun yalnız süre değil hangi algoritmanın neden seçildiğini anlatsın.
Laboratuvar 2 — Metin indeksi: Naive search, KMP ve suffix-array indeksini karşılaştır. Unicode/byte sözleşmesini belirle, overlapping match ve boş pattern testini yaz. Build time, query time, peak memory ve indeks güncelleme politikasını ölç. Aho-Corasick'i çoklu pattern'e ekle; sonuç kümesini oracle ile karşılaştır.
Laboratuvar 3 — Depolama simülatörü: LRU cache, Bloom filter ve consistent placement birleştir. Bloom positive sonucunu source-of-truth'da doğrula; node join/leave ve hot-key trace ekle. Bu bir consensus implementation değildir. İleri aşamada Raft paper'ındaki state machine ve safety kurallarını ayrı modelle.
Değerlendirme dört kanıt ister: doğru output/invariant, gerekçeli complexity, reproducible benchmark ve failure case. MIT/Princeton notlarından proof alıştırmaları, Morin'den implementation, Erickson'dan reduction/design çalış. Makale okurken model, theorem, assumptions, proof ve deneysel sonuçları ayrı yaz. Bu rota “bütün konular bitti” sertifikası değil, üretilebilir mühendislik kanıtı oluşturur.
Adım adım iz sürme
Her lab için seed, input, beklenen sonuç, kullanılan model ve ölçüm ortamını sakla.
Maliyet ve varsayımlar
Performance raporu n, V/E, pattern uzunluğu ve veri dağılımını belirtmeli. Tek örnekten Big-O çıkarma.
Çalıştırılabilir örnek
Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.
import random
rng=random.Random(42)
for n in range(20):
data=[rng.randrange(-100,100) for _ in range(n)]
result=sorted(data)
assert all(result[i]<=result[i+1] for i in range(len(result)-1))
assert sorted(result)==sorted(data)KAVRADIĞINI KONTROL ET
Sıra sende
Sıralı çıktı kontrolü tek başına sorting correctness için yeterli mi?
Çözümün mantığını göster
Hayır; input multiset korunmalı. [] her zaman sorted'dır ama eleman kaybını gizler.
Bir adım ileri
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.
Temel kaynaklar ve ders notları
Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.
MIT 6.006 · Introduction to Algorithms ↗Pat Morin · Open Data Structures ↗Jeff Erickson · Algorithms ↗