COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

Mühendislik ve bitirme projeleri · 52 / 53

Cache, external memory ve streaming

Anla → iz sür → uygula → gerekçelendir

2 dk okuma · uygulama için ayrıca zaman ayır

RAM modelinde O(n) olan iki yapı cache miss yüzünden farklı hızdadır. Array traversal locality sağlar; pointer chasing düzensiz erişir. Disk modelinde block transfer sayısı önemlidir. External merge sort belleğe sığan run'lar oluşturup çok yollu birleştirir; B-tree fanout I/O azaltır. Cache-oblivious tasarım belirli block size bilmeden locality hedefler.

LRU cache, hash map ve doubly linked list ile expected O(1) lookup/update sağlar. OrderedDict aşağıda bu sözleşmenin küçük örneğidir. Cache correctness; eviction, TTL, invalidation, stale data ve concurrency ile birlikte düşünülür. Cache stampede için single-flight veya jitter kullanılabilir; bunlar her tutarlılık modeline aynı uygulanmaz.

LSM tree ardışık write ve compaction kullanır; write amplification, read amplification ve space amplification takası vardır. Streaming'de bütün girdiyi tutmadan sonuç üretirsin. Reservoir sampling sabit k örneği düzgün seçer; online algorithms geleceği bilmez. Ölçümde warm/cold cache, p95 latency, allocation ve adversarial dağılımlar ayrı raporlanır.

Adım adım iz sürme

Kapasite 2: A,B ekle; A'ya eriş; C ekle. En eski kullanılmayan B çıkar.

Maliyet ve varsayımlar

OrderedDict/hash modelinde expected O(1) erişim; cache kapasitesi c için O(c) alan.

Ç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.

Python 3
from collections import OrderedDict
cache=OrderedDict(A=1,B=2)
cache.move_to_end("A"); cache["C"]=3
if len(cache)>2:cache.popitem(last=False)
assert list(cache)==["A","C"]

KAVRADIĞINI KONTROL ET

Sıra sende

LRU her workload için en iyi policy midir?

Çözümün mantığını göster

Hayır. Uzun sequential scan sıcak girdileri atabilir; LFU/ARC veya admission politikaları farklı takaslar sunar.

Bir adım ileri

  1. Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
  2. Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
  3. 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.

Pat Morin · Open Data Structures ↗MIT 6.046J · Design and Analysis ↗
İlerlemeden önce alıştırmayı çöz.