Bölüm 9: Çevrimiçi Algoritmalar

Algoritmalar
Çevrimiçi ve çevrimdışıRekabetçi analizKayak kiralamaSayfalama: FIFO, LRU, OPT Liste güncellemeVeri akışı algoritmalarıRezervuar örneklemeArtımlı öğrenme
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

Giriş

Öğrenme Çıktıları

Model

Çevrimiçi (online) ve çevrimdışı (offline) problem modelini ayırt etmek; geri alınamaz karar kavramını açıklamak.

Rekabetçi analiz

Rekabet oranını (competitive ratio) tanımlamak; kayak kiralama problemi için 2 − 1/B oranını kanıtlamak.

Sayfalama ve listeler

FIFO, LRU ve OPT ile sayfa hatalarını adım adım hesaplamak; LRU'nun k-rekabetçi, MTF'nin 2-rekabetçi olduğunu yorumlamak.

Veri akışları

Hareketli ortalama, çevrimiçi ortanca ve rezervuar örneklemeyi Java ile yazmak; eleman başına zaman ve belleği analiz etmek.

Giriş

Bilgi Olsun Yeter

  • Bazen kararlar tüm bilgiye sahip olunmadan alınır.
  • Çevrimiçi algoritmalar (online algorithms):
    • bilginin adım adım geldiği durumlarda
    • o ana kadarki bilgiyle en iyi kararı vermeye çalışır.
  • Verilen karar geri alınamaz: sonradan gelen bilgi geçmiş kararı değiştirmez.
Satranç oyuncusu rakibin sonraki hamlesini bilmeden hamle yapar; hamle bir kez yapıldıktan sonra geri alınamaz.
Satranç tahtasında bir oyuncu taşını sürüyor; diğer taşlar tahtada bekliyor.

Giriş

Çevrimiçi Algoritmalar

  • Bir labirentte yolculuk yapmaya benzer.
    • Labirentin tamamı görünmez; yalnızca önünüzdeki yolu görürsünüz.
  • Her adımda sınırlı bilgi ile en iyi yol seçilmeye çalışılır.
  • Bilgi akışının sürekli olmadığı durumlarda hızlı karar vermeyi sağlar.
  • Örnekler:
    • Trafik sıkışıklığında hangi yol kullanılacak?
    • Satranç oynarken bir sonraki hamle ne olacak?
    • Anlık trafik yoğunluğuna göre ışıkların ayarlanması.
Bir direk üzerinde kırmızı, sarı ve yeşil lambaları yanan iki trafik ışığı.

Giriş

Çevrimiçi ve Çevrimdışı Problem Modeli

Girdi bir istek dizisidir: σ = σ1, σ2, …, σn. Fark, algoritmanın bu diziyi ne zaman gördüğündedir.

Çevrimdışı (offline)Çevrimiçi (online)
GirdiTamamı baştan bilinirParça parça gelir; σt gelince σt+1 bilinmez
KararTüm girdiye bakılarak verilirσt geldiği anda verilmeli, geri alınamaz
ÖrnekSıralama, Dijkstra, sırt çantası (DP)Önbellek yönetimi, kayak kiralama, borsa
En iyi çözümOPT hesaplanabilirOPT ancak geriye dönüp bakınca bilinir
ÖlçütZaman / bellek karmaşıklığıRekabet oranı: ALG / OPT
Dikkat: "Çevrimiçi" burada internet anlamına gelmez; girdinin zaman içinde açığa çıkması demektir. Ekleme sıralaması (insertion sort) çevrimiçi çalışabilir, seçme sıralaması (selection sort) çalışamaz.

Giriş

Çevrimiçi Algoritma Modeli (Online Algorithms)

AlgoritmatamponVeri sürekligelirÇıktıTampon tüm girdiyitutamaz (sınırlı bellek)
  • Veri sürekli gelir; algoritma her parçayı geldiğinde işler ve hemen çıktı üretir.
  • Bellek (tampon, buffer) tüm girdiyi tutamaz: geçmiş ancak özet olarak saklanabilir (toplam, yığın, örnek…).
  • Bu yüzden her eleman için az iş (çoğunlukla O(1) ya da O(log n)) ve az bellek hedeflenir.

Giriş

Uygulama Alanları

BorsaAnlık fiyata göre al-sat kararı; gelecek fiyat bilinmez.
Önbellekİşlemci, işletim sistemi, web: hangi sayfa bellekte kalsın?
YönlendirmeBağlantıları sürekli değişen ağda en kısa yol.
Kaynak tahsisiBant genişliği ve CPU zamanının dinamik paylaşımı.
Zamanlamaİşler geldikçe makinelere atanır (iş çizelgeleme).
Reklam ve öneriKullanıcı geldiğinde hangi reklam / ürün gösterilsin?
Makine öğrenmesiModel her yeni örnekle güncellenir (artımlı öğrenme).
GüvenlikDolandırıcılık ve DDoS saldırılarını akış üzerinde yakalama.
Otonom araçlarAlgılayıcı verisi geldikçe gerçek zamanlı karar.

Ortak nokta: ortam dinamik, karar gerçek zamanlı, geleceğe dair bilgi eksik.

Giriş

Avantajlar ve Dezavantajlar

Avantajlar

  • Dinamik ortamlarda çalışır; girdinin bitmesini beklemez.
  • Gerçek zamanlı karar verir; gecikme düşüktür.
  • Az bellekle çok büyük, hatta sonsuz akışları işleyebilir.
  • Rekabet oranı ile en kötü durum garantisi verilebilir.

Dezavantajlar

  • İlk adımlarda yanlış kararlar alınabilir ve sonraki adımları etkiler.
  • Satrançta yanlış bir hamle oyunu kaybettirebilir.
  • Her zaman en iyi global çözümü bulmayı garanti etmez.
  • Başlangıçtaki girdiye duyarlıdır; tasarımı ve analizi daha karmaşıktır.

Giriş

Çevrimiçi Algoritma Tasarım Yaklaşımları

Açgözlü (greedy)Geleni o an en iyi görünen biçimde karşılar; küresel etkiyi düşünmez. Örnek: istek geldiğinde en yakın boş sunucuya atama.
ÖzetlemeGeçmişi tümüyle saklamak yerine küçük bir özet tutar: toplam, iki yığın, örneklem. Örnek: hareketli ortalama, çevrimiçi ortanca.
Uyarlanır (adaptive)Hatalarından öğrenir, davranışını zamanla değiştirir. Örnek: LRU, öne taşı (MTF), artımlı öğrenme.
DeterministikAynı girdiye hep aynı kararı verir; kötü niyetli bir girdi dizisi (düşman) onu kolayca tuzağa düşürebilir.
Rastgele (randomized)Kararlarına rastlantı katar; düşman ne yapacağını önceden bilemez. Örnek: rezervuar örnekleme, rastgele işaretleme.

Rekabetçi Analiz

Rekabetçi Analiz (Competitive Analysis)

  • Çevrimiçi algoritma ALG, her girdide her şeyi önceden bilen en iyi çevrimdışı algoritma OPT ile karşılaştırılır.
  • ALG, c-rekabetçidir (c-competitive), eğer her istek dizisi σ için
    ALG(σ) ≤ c · OPT(σ) + α
    koşulu sağlanır (α: σ'dan bağımsız sabit; α = 0 ise kesin rekabetçi).
  • En küçük böyle c değerine rekabet oranı denir: c = supσ ALG(σ) / OPT(σ).
  • Oran ne kadar 1'e yakınsa, gelecek bilgisinin eksikliği o kadar az zarar verir.
Kötümser bakışAnaliz en kötü girdi üzerinedir: ortalama ya da olasılık varsayımı yoktur.
Maliyet problemiBurada maliyet en aza indirilir (c ≥ 1). Kazanç problemlerinde oran OPT / ALG olarak tanımlanır.

Rekabetçi Analiz

Düşman (Adversary) Modeli

Rekabet oranını alttan sınırlamak için algoritmaya karşı oynayan bir düşman düşünülür: girdiyi o üretir ve OPT'yi o çalıştırır.

Deterministik ALGDüşman algoritmanın kodunu bilir; her adımda ALG'nin en çok zarar göreceği isteği üretir.
Habersiz düşman(oblivious) Rastgele algoritmanın yazı-tura sonuçlarını göremez; diziyi baştan seçer. Beklenen ALG maliyeti ölçülür.
Uyarlanır düşman(adaptive) ALG'nin rastgele kararlarını görerek sonraki isteği seçer; rastgeleliğin faydası azalır.
Kanıt kalıbı: "Hiçbir deterministik algoritma c'den iyi olamaz" demek için, her ALG'ye karşı ALG(σ) / OPT(σ) ≥ c yapan bir σ dizisi kurulur. Sonraki örneklerde (kayak kiralama, sayfalama) bu kalıp kullanılacak.

Kayak Kiralama

Kayak Kiralama Problemi (Ski Rental)

  • Kayak takımı günlüğü 1 TL'ye kiralanabilir ya da B TL'ye satın alınabilir.
  • Kaç gün kayak yapılacağı (d) bilinmez: her sabah "bugün de kayacak mıyım?" sorusu yanıtlanır. Hava bozarsa sezon biter.
  • Her gün karar: bugün de kirala mı, yoksa satın al mı?
  • Geleceği bilen OPT kolaydır: OPT(d) = min(d, B).
Hep kiralad → ∞ iken maliyet d, OPT = B: oran sınırsız.
İlk gün satın ald = 1 iken maliyet B, OPT = 1: oran B.
Başa baş (break-even)B − 1 gün kirala, B. gün satın al: oran 2 − 1/B.

Aynı yapı: bulut sunucusunu saatlik mi kiralayalım, yıllık mı alalım; TCP bağlantısını açık mı tutalım, kapatalım mı.

Kayak Kiralama

Stratejilerin Maliyeti (B = 10)

05101520253005101520d (gün)maliyetOPT = min(d, 10)

Geleceği bilen OPT: d < 10 ise hep kiralar (maliyet d), d ≥ 10 ise ilk gün satın alır (maliyet 10).

05101520253005101520d (gün)maliyetOPT = min(d, 10)Hep kirala

Hep kirala: maliyet d. d büyüdükçe OPT = 10 sabitken maliyet sınırsız artar → rekabetçi değil.

05101520253005101520d (gün)maliyetOPT = min(d, 10)Hep kirala1. gün satın al

İlk gün satın al: maliyet hep 10. Ama d = 1 ise OPT = 1 → oran 10 = B. Kötü.

05101520253005101520d (gün)maliyetOPT = min(d, 10)Hep kirala1. gün satın alBaşa baş (10. gün al)

Başa baş: 9 gün kirala, 10. gün satın al. d < 10 iken OPT ile aynı; d ≥ 10 iken maliyet 9 + 10 = 19.

05101520253005101520d (gün)maliyetOPT = min(d, 10)Hep kirala1. gün satın alBaşa baş (10. gün al)ALG = 19OPT = 10

En kötü durum d = 10: ALG = 19, OPT = 10 → oran 1,9 = 2 − 1/B. Hiçbir d bundan kötü değildir.

Kayak Kiralama

Neden Daha İyisi Yok? Alt Sınır

Her deterministik strateji tek bir sayı ile tanımlanır: k = satın alma günü.

  • Düşman: satın aldığınız günden sonra hava bozar, yani d = k.
  • ALG = (k − 1) kira + B, OPT = min(k, B).
  • k < B: oran (k − 1 + B) / k ≥ (2B − 1) / B.
  • k ≥ B: oran (k − 1 + B) / B ≥ (2B − 1) / B.
  • En iyisi k = B: oran 2 − 1/B.
Rastgele seçilen k ile beklenen oran e / (e − 1) ≈ 1,58'e iner (Karlin vd., 1994).
kkiraALGOPToran
1010110
211125,5
541452,8
981892
10919101,9
111020102
151424102,4
201929102,9

B = 10; d = k (düşmanın seçimi). Tablo, en kötü oranın k = B'de en küçük olduğunu gösterir.

Kayak Kiralama

Deneyin: Kayak Kiralama

Strateji: k − 1 gün kirala, k. gün hâlâ kayıyorsan satın al. En kötü oran, düşmanın d = k seçtiği durumdur.

Sayfalama

Sayfalama Problemi (Paging)

İşlemciistek:sayfa 4Önbellek (k = 3)701Yavaş bellek0 1 2 34 5 6 7…yükleçıkar
  • Hızlı bellek (önbellek, cache) k sayfa tutar; yavaş bellek sınırsızdır.
  • İstenen sayfa önbellekteyse isabet (hit, maliyet 0); değilse sayfa hatası (page fault, maliyet 1): sayfa yüklenir.
  • Önbellek doluysa hangi sayfa çıkarılacak? Gelecek istekler bilinmez: tipik bir çevrimiçi problem.
  • Amaç: toplam sayfa hatası sayısını en aza indirmek.

Sayfalama

Sayfa Çıkarma Politikaları

PolitikaHangi sayfayı çıkarır?Çevrimiçi?Rekabet oranı
FIFOÖnbelleğe en önce yüklenen sayfayı (kuyruk)evetk
LRUEn uzun süredir kullanılmayan sayfayı (least recently used)evetk
FWFHata olunca ve önbellek doluysa hepsini boşaltır (flush when full)evetk
LFUEn az sıklıkla kullanılan sayfayı (least frequently used)evetsınırsız
LIFOEn son yüklenen sayfayıevetsınırsız
OPT (MIN)Bir sonraki kullanımı en uzak gelecekte olanı (Belady, 1966)hayır1
OPT (longest forward distance) geleceği bilmeyi gerektirir; uygulanamaz ama karşılaştırma ölçütü olarak kullanılır. Kanıtlanabilir biçimde en az sayfa hatasını verir.

Sayfalama · Adım adım

FIFO Adım Adım

FIFO: önbellek bir kuyruk gibi davranır; en önce gelen ilk çıkar. İstek dizisi 7 0 1 2 0 3 0 4 2 3 0 3 2, k = 3. H: hata, ✓: isabet.

İstekÇ1Ç2Ç3Sonuç77H012030423032FIFO · k = 3 · sayfa hatası: 1

İstek 1: sayfa 7 yok → sayfa hatası; boş çerçeve Ç1'e yüklenir. Toplam hata: 1.

İstekÇ1Ç2Ç3Sonuç77H070H12030423032FIFO · k = 3 · sayfa hatası: 2

İstek 2: sayfa 0 yok → sayfa hatası; boş çerçeve Ç2'e yüklenir. Toplam hata: 2.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2030423032FIFO · k = 3 · sayfa hatası: 3

İstek 3: sayfa 1 yok → sayfa hatası; boş çerçeve Ç3'e yüklenir. Toplam hata: 3.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H030423032FIFO · k = 3 · sayfa hatası: 4

İstek 4: sayfa 2 yok → sayfa hatası; en önce yüklenen 7 çıkarılır. Toplam hata: 4.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓30423032FIFO · k = 3 · sayfa hatası: 4

İstek 5: sayfa 0 önbellekte → isabet. FIFO sırası değişmez. Toplam hata: 4.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0423032FIFO · k = 3 · sayfa hatası: 5

İstek 6: sayfa 3 yok → sayfa hatası; en önce yüklenen 0 çıkarılır. Toplam hata: 5.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0230H423032FIFO · k = 3 · sayfa hatası: 6

İstek 7: sayfa 0 yok → sayfa hatası; en önce yüklenen 1 çıkarılır. Toplam hata: 6.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0230H4430H23032FIFO · k = 3 · sayfa hatası: 7

İstek 8: sayfa 4 yok → sayfa hatası; en önce yüklenen 2 çıkarılır. Toplam hata: 7.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0230H4430H2420H3032FIFO · k = 3 · sayfa hatası: 8

İstek 9: sayfa 2 yok → sayfa hatası; en önce yüklenen 3 çıkarılır. Toplam hata: 8.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0230H4430H2420H3423H032FIFO · k = 3 · sayfa hatası: 9

İstek 10: sayfa 3 yok → sayfa hatası; en önce yüklenen 0 çıkarılır. Toplam hata: 9.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0230H4430H2420H3423H0023H32FIFO · k = 3 · sayfa hatası: 10

İstek 11: sayfa 0 yok → sayfa hatası; en önce yüklenen 4 çıkarılır. Toplam hata: 10.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0230H4430H2420H3423H0023H3023✓2FIFO · k = 3 · sayfa hatası: 10

İstek 12: sayfa 3 önbellekte → isabet. FIFO sırası değişmez. Toplam hata: 10.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3231H0230H4430H2420H3423H0023H3023✓2023✓FIFO · k = 3 · sayfa hatası: 10

İstek 13: sayfa 2 önbellekte → isabet. FIFO sırası değişmez. Toplam hata: 10.

Sayfalama · Adım adım

LRU Adım Adım

LRU: her sayfanın son kullanım zamanı izlenir; en eskisi çıkar. İstek dizisi 7 0 1 2 0 3 0 4 2 3 0 3 2, k = 3. H: hata, ✓: isabet.

İstekÇ1Ç2Ç3Sonuç77H012030423032LRU · k = 3 · sayfa hatası: 1

İstek 1: sayfa 7 yok → sayfa hatası; boş çerçeve Ç1'e yüklenir. Toplam hata: 1.

İstekÇ1Ç2Ç3Sonuç77H070H12030423032LRU · k = 3 · sayfa hatası: 2

İstek 2: sayfa 0 yok → sayfa hatası; boş çerçeve Ç2'e yüklenir. Toplam hata: 2.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2030423032LRU · k = 3 · sayfa hatası: 3

İstek 3: sayfa 1 yok → sayfa hatası; boş çerçeve Ç3'e yüklenir. Toplam hata: 3.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H030423032LRU · k = 3 · sayfa hatası: 4

İstek 4: sayfa 2 yok → sayfa hatası; en uzun süredir kullanılmayan 7 çıkarılır. Toplam hata: 4.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓30423032LRU · k = 3 · sayfa hatası: 4

İstek 5: sayfa 0 önbellekte → isabet. 0 artık en yeni kullanılan sayfa. Toplam hata: 4.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0423032LRU · k = 3 · sayfa hatası: 5

İstek 6: sayfa 3 yok → sayfa hatası; en uzun süredir kullanılmayan 1 çıkarılır. Toplam hata: 5.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓423032LRU · k = 3 · sayfa hatası: 5

İstek 7: sayfa 0 önbellekte → isabet. 0 artık en yeni kullanılan sayfa. Toplam hata: 5.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4403H23032LRU · k = 3 · sayfa hatası: 6

İstek 8: sayfa 4 yok → sayfa hatası; en uzun süredir kullanılmayan 2 çıkarılır. Toplam hata: 6.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4403H2402H3032LRU · k = 3 · sayfa hatası: 7

İstek 9: sayfa 2 yok → sayfa hatası; en uzun süredir kullanılmayan 3 çıkarılır. Toplam hata: 7.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4403H2402H3432H032LRU · k = 3 · sayfa hatası: 8

İstek 10: sayfa 3 yok → sayfa hatası; en uzun süredir kullanılmayan 0 çıkarılır. Toplam hata: 8.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4403H2402H3432H0032H32LRU · k = 3 · sayfa hatası: 9

İstek 11: sayfa 0 yok → sayfa hatası; en uzun süredir kullanılmayan 4 çıkarılır. Toplam hata: 9.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4403H2402H3432H0032H3032✓2LRU · k = 3 · sayfa hatası: 9

İstek 12: sayfa 3 önbellekte → isabet. 3 artık en yeni kullanılan sayfa. Toplam hata: 9.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4403H2402H3432H0032H3032✓2032✓LRU · k = 3 · sayfa hatası: 9

İstek 13: sayfa 2 önbellekte → isabet. 2 artık en yeni kullanılan sayfa. Toplam hata: 9.

Sayfalama · Adım adım

OPT Adım Adım

OPT: geleceği bilir; bir sonraki kullanımı en uzak olan sayfayı çıkarır. İstek dizisi 7 0 1 2 0 3 0 4 2 3 0 3 2, k = 3. H: hata, ✓: isabet.

İstekÇ1Ç2Ç3Sonuç77H012030423032OPT · k = 3 · sayfa hatası: 1

İstek 1: sayfa 7 yok → sayfa hatası; boş çerçeve Ç1'e yüklenir. Toplam hata: 1.

İstekÇ1Ç2Ç3Sonuç77H070H12030423032OPT · k = 3 · sayfa hatası: 2

İstek 2: sayfa 0 yok → sayfa hatası; boş çerçeve Ç2'e yüklenir. Toplam hata: 2.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2030423032OPT · k = 3 · sayfa hatası: 3

İstek 3: sayfa 1 yok → sayfa hatası; boş çerçeve Ç3'e yüklenir. Toplam hata: 3.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H030423032OPT · k = 3 · sayfa hatası: 4

İstek 4: sayfa 2 yok → sayfa hatası; 7 bir daha hiç istenmiyor → çıkarılır. Toplam hata: 4.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓30423032OPT · k = 3 · sayfa hatası: 4

İstek 5: sayfa 0 önbellekte → isabet. Toplam hata: 4.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0423032OPT · k = 3 · sayfa hatası: 5

İstek 6: sayfa 3 yok → sayfa hatası; 1 bir daha hiç istenmiyor → çıkarılır. Toplam hata: 5.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓423032OPT · k = 3 · sayfa hatası: 5

İstek 7: sayfa 0 önbellekte → isabet. Toplam hata: 5.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4243H23032OPT · k = 3 · sayfa hatası: 6

İstek 8: sayfa 4 yok → sayfa hatası; bir sonraki kullanımı en uzak olan 0 (11. istek) çıkarılır. Toplam hata: 6.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4243H2243✓3032OPT · k = 3 · sayfa hatası: 6

İstek 9: sayfa 2 önbellekte → isabet. Toplam hata: 6.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4243H2243✓3243✓032OPT · k = 3 · sayfa hatası: 6

İstek 10: sayfa 3 önbellekte → isabet. Toplam hata: 6.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4243H2243✓3243✓0203H32OPT · k = 3 · sayfa hatası: 7

İstek 11: sayfa 0 yok → sayfa hatası; 4 bir daha hiç istenmiyor → çıkarılır. Toplam hata: 7.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4243H2243✓3243✓0203H3203✓2OPT · k = 3 · sayfa hatası: 7

İstek 12: sayfa 3 önbellekte → isabet. Toplam hata: 7.

İstekÇ1Ç2Ç3Sonuç77H070H1701H2201H0201✓3203H0203✓4243H2243✓3243✓0203H3203✓2203✓OPT · k = 3 · sayfa hatası: 7

İstek 13: sayfa 2 önbellekte → isabet. Toplam hata: 7.

Sayfalama

Üç Politikanın Karşılaştırması

PolitikaSayfa hatasıİsabetALG / OPTGerekli bilgi
FIFO1031,43Yükleme sırası (kuyruk)
LRU941,29Son kullanım zamanı
OPT761Tüm gelecek istekler
  • İlk k = 3 hata kaçınılmazdır (zorunlu / soğuk hatalar, compulsory misses): her politika öder.
  • LRU, yerellik (locality of reference) olan dizilerde iyidir: yakın geçmişte kullanılan sayfa yakında yine kullanılır. Burada 0 sayfası sık istendiği için FIFO onu gereksiz yere çıkarır.
  • Gerçek sistemlerde LRU'ya yakın, ucuz yaklaşımlar kullanılır: saat algoritması (clock / ikinci şans).

Sayfalama · Kodu adım adım çalıştır

LRU: Kodu Adım Adım İzle

istek:123142onb:en eskien yeni

Önbellek boş, hata = 0. Liste başı en eski, sonu en yeni kullanılan sayfa.

istek:123142onb:en eskien yeni

Sayfa 1 listede yok: remove false → else dalı.

istek:123142onb:en eskien yeni

hata = 1. Önbellekte yer var (boyut 0 < 3) → çıkarma yok.

istek:123142onb:1en eskien yeni

Sayfa 1 sona eklenir.

istek:123142onb:1en eskien yeni

Sayfa 2 listede yok: remove false → else dalı.

istek:123142onb:1en eskien yeni

hata = 2. Önbellekte yer var (boyut 1 < 3) → çıkarma yok.

istek:123142onb:12en eskien yeni

Sayfa 2 sona eklenir.

istek:123142onb:12en eskien yeni

Sayfa 3 listede yok: remove false → else dalı.

istek:123142onb:12en eskien yeni

hata = 3. Önbellekte yer var (boyut 2 < 3) → çıkarma yok.

istek:123142onb:123en eskien yeni

Sayfa 3 sona eklenir.

istek:123142onb:23en eskien yeni

Sayfa 1 listede: remove true döner ve onu listeden çıkarır → isabet.

istek:123142onb:231en eskien yeni

Sayfa 1 sona eklenir: artık en yeni kullanılan.

istek:123142onb:231en eskien yeni

Sayfa 4 listede yok: remove false → else dalı.

istek:123142onb:31en eskien yeniçıkan: 2

hata = 4. Önbellek dolu → baştaki (en eski kullanılan) 2 çıkarılır.

istek:123142onb:314en eskien yeni

Sayfa 4 sona eklenir.

istek:123142onb:314en eskien yeni

Sayfa 2 listede yok: remove false → else dalı.

istek:123142onb:14en eskien yeniçıkan: 3

hata = 5. Önbellek dolu → baştaki (en eski kullanılan) 3 çıkarılır.

istek:123142onb:142en eskien yeni

Sayfa 2 sona eklenir.

istek:123142onb:142en eskien yeni

Dizi bitti: 6 istekte 5 sayfa hatası, 1 isabet. remove listeyi taradığı için her istek O(k); HashMap + çift bağlı liste ile O(1) olur.

int lruHata(int[] istekler, int k) {
  var onb = new LinkedList<Integer>();
  int hata = 0;
  for (int sayfa : istekler) {
    if (onb.remove((Integer) sayfa)) {
      onb.addLast(sayfa); // en yeni yap
    } else {
      hata++;
      if (onb.size() == k)
        onb.removeFirst(); // en eskiyi at
      onb.addLast(sayfa);
    }
  }
  return hata;
}

Sayfalama

LRU Önbelleği: O(1) Uygulama

class LruOnbellek<A, D>
    extends LinkedHashMap<A, D> {
  private final int k;

  LruOnbellek(int k) {
    super(16, 0.75f, true); // erişim sırası
    this.k = k;
  }

  @Override
  protected boolean removeEldestEntry(
      Map.Entry<A, D> enEski) {
    return size() > k;      // k aşılınca at
  }
}
  • LinkedHashMap = hash tablosu + çift bağlı liste.
  • true (accessOrder): her get/put elemanı listenin sonuna taşır.
  • removeEldestEntry: boyut k'yı aşınca baştaki (en eski kullanılan) silinir.
  • Bul, taşı, sil: hepsi O(1); bellek O(k).
FIFO için aynı sınıf false (insertion order) ile kurulur: erişim sırayı değiştirmez.

Sayfalama

Teorem: Deterministik Alt Sınır k

  • k + 1 farklı sayfa yeter. Düşman her adımda ALG'nin önbelleğinde olmayan tek sayfayı ister → ALG her istekte hata yapar.
  • OPT (en uzağı çıkar) bir hata yaptığında, çıkardığı sayfa en az k − 1 istek boyunca istenmez → OPT en çok k istekte bir hata yapar.
  • Sonuç: ALG / OPT → k (Sleator ve Tarjan, 1985).
Örnekte (k = 3, LRU'ya karşı): LRU 12 hata, OPT 6 hata; ilk 3 zorunlu hata dışarıda tutulursa 9'a 3.
İstekÇ1Ç2Ç3Sonuç11H212H3123H4423H1413H2412H3312H4342H1341H2241H3231H4234HLRU · k = 3 · sayfa hatası: 12İstekÇ1Ç2Ç3Sonuç11H212H3123H4124H1124✓2124✓3134H4134✓1134✓2234H3234✓4234✓OPT · k = 3 · sayfa hatası: 6

Sayfalama

Teorem: LRU (ve FIFO) k-Rekabetçidir

701evre 12030evre 2423evre 3032evre 4
  • Diziyi evrelere (phase) böl: her evre, k farklı sayfa içeren en uzun parça; (k + 1). farklı sayfa yeni evreyi başlatır.
  • LRU, bir evrede en çok k hata yapar: evrede istenen bir sayfa, evre bitene kadar çıkarılmaz (ondan daha eski kullanılmış en az bir sayfa hep vardır). Her farklı sayfa en çok bir kez hata verir.
  • OPT, ardışık iki evre başına en az 1 hata yapar: bir evrenin 2. isteğinden sonraki evrenin 1. isteğine kadar k + 1 farklı sayfa istenir; k çerçeveye sığmaz.
  • m evre için LRU ≤ k · m, OPT ≥ m − 1 → LRU ≤ k · OPT + k.
Örnek dizide 4 evre: LRU = 9 ≤ 3 · 4, OPT = 7 ≥ 3. Teori en kötü durumu sınırlar; gerçek dizilerde yerellik sayesinde LRU, OPT'ye çok daha yakındır.

Sayfalama

Belady Anomalisi: Daha Çok Bellek, Daha Çok Hata

İstekÇ1Ç2Ç3Sonuç11H212H3123H4423H1413H2412H5512H1512✓2512✓3532H4534H5534✓FIFO · k = 3 · sayfa hatası: 9İstekÇ1Ç2Ç3Ç4Sonuç11H212H3123H41234H11234✓21234✓55234H15134H25124H35123H44123H54523HFIFO · k = 4 · sayfa hatası: 10
  • Dizi: 1 2 3 4 1 2 5 1 2 3 4 5.
  • FIFO, k = 3: 9 hata; k = 4: 10 hata. Önbellek büyüdü, hata arttı!
  • LRU aynı dizide: k = 3 → 10, k = 4 → 8. LRU ve OPT bir yığın algoritmasıdır (stack algorithm): k çerçevedeki sayfalar, k + 1 çerçevedekilerin alt kümesidir → anomali olmaz.

Sayfalama

Rastgele Sayfalama: İşaretleme Algoritması

İşaretleme (Marking)

  1. Evre başında tüm sayfaların işaretini kaldır.
  2. İstenen sayfayı işaretle (isabet ya da hata).
  3. Hata olursa işaretsiz sayfalardan birini rastgele çıkar.
  4. Tüm sayfalar işaretliyse yeni evre başlar (adım 1).

Sonuçlar

  • Habersiz düşmana karşı beklenen oran 2Hk (Fiat vd., 1991).
  • Hk = 1 + 1/2 + … + 1/k ≈ ln k. k = 8 için H8 ≈ 2,72 → oran ≈ 5,4 (deterministikte 8).
  • Hiçbir rastgele algoritma Hk'dan iyi olamaz.
  • LRU da bir işaretleme algoritmasıdır (en eski işaretsizi seçer).
Rastgelelik, düşmanın "ALG'nin önbelleğinde olmayan sayfayı iste" stratejisini bozar: hangi sayfanın çıktığını bilemez.

Sayfalama

Deneyin: Sayfalama Politikaları

0–9 arası rakamlar, boşlukla ayrılmış (en çok 16 istek). Turuncu hücre: yeni yüklenen sayfa · yeşil: isabet. Enter = yeniden çalıştır.

Liste Güncelleme

Liste Güncelleme Problemi (List Update)

  • n elemanlı bir bağlı liste; i. konumdaki elemana erişmenin maliyeti i'dir (baştan taranır).
  • Erişilen eleman, erişimden sonra ücretsiz olarak öne doğru taşınabilir.
  • İstekler çevrimiçi gelir: hangi elemanın sık isteneceği bilinmez.
Öne taşı (MTF)Move-to-front: erişilen eleman listenin başına alınır.
Yer değiştirTranspose: erişilen eleman bir önceki ile yer değiştirir.
Sıklık sayacıFrequency count: elemanlar erişim sayısına göre azalan sırada tutulur.
Uygulamalar: kendini düzenleyen listeler (self-organizing lists), hash tablosu kovalarındaki zincirler, MTF dönüşümü ile veri sıkıştırma (bzip2).

Liste Güncelleme · Adım adım

Öne Taşı (MTF) Adım Adım

Başlangıç listesi A B C D E; istekler E D E A D E.

öncesonraA1B2C3D4E5EABCDistek: Emaliyet: 5toplam: 5

İstek E: 5. konumda → maliyet 5; başa taşınır. Toplam: 5.

öncesonraE1A2B3C4D5DEABCistek: Dmaliyet: 5toplam: 10

İstek D: 5. konumda → maliyet 5; başa taşınır. Toplam: 10.

öncesonraD1E2A3B4C5EDABCistek: Emaliyet: 2toplam: 12

İstek E: 2. konumda → maliyet 2; başa taşınır. Toplam: 12.

öncesonraE1D2A3B4C5AEDBCistek: Amaliyet: 3toplam: 15

İstek A: 3. konumda → maliyet 3; başa taşınır. Toplam: 15.

öncesonraA1E2D3B4C5DAEBCistek: Dmaliyet: 3toplam: 18

İstek D: 3. konumda → maliyet 3; başa taşınır. Toplam: 18.

öncesonraD1A2E3B4C5EDABCistek: Emaliyet: 3toplam: 21

İstek E: 3. konumda → maliyet 3; başa taşınır. Toplam: 21. Aynı dizide hiç taşımayan liste 24, yer değiştirme (transpose) 26 öder.

StratejiEDEADEToplam
Öne taşı (MTF)55233321
Taşıma yok54514524
Yer değiştir55515526

Liste Güncelleme

Teorem: MTF 2-Rekabetçidir

  • Sleator ve Tarjan (1985): her istek dizisi σ için MTF(σ) ≤ 2 · OPT(σ) (yaklaşık; ücretli takaslar sayılmazsa).
  • Kanıt fikri: potansiyel fonksiyonu Φ = MTF listesi ile OPT listesi arasındaki ters sıralı çift (inversion) sayısı. Her erişimde MTF'nin gerçek maliyeti + ΔΦ ≤ 2 · (OPT maliyeti) − 1. Bu, amortize analizdir.

Yer değiştir rekabetçi değil

  • Son iki eleman sırayla istenir: xn, xn−1, xn, … Her erişim yerini değiştirir ama hep n. ve (n−1). konumda kalır → istek başına ≈ n. MTF ise ilk ikisinden sonra istek başına 2 öder.

Sıklık sayacı da değil

  • Önce x1 n kez, x2 n − 1 kez, … istenir; sonra ters sırada. Sayaç eski sırayı uzun süre korur; maliyet Θ(n) kat kötüleşebilir.

Veri Akışları

Veri Akışı (Data Stream) Modeli

  • Elemanlar x1, x2, … tek tek gelir; akış çok uzun ya da sonsuz olabilir.
  • Her elemana bir kez bakılır (tek geçiş); geçmiş tümüyle saklanamaz.
  • Her an bir sorunun cevabı hazır olmalı: "şu ana kadarki ortalama / ortanca / bir örneklem nedir?"
ProblemSaklanan özetEleman başınaBellek
Hareketli ortalama (son k)Kuyruk + toplamO(1)O(k)
Çevrimiçi ortancaMax-yığın + min-yığınO(log n)O(n)
Rezervuar örneklemek elemanlık örneklemO(1)O(k)
Akışta örüntü aramaSon m karakter + kayan hashO(1)O(m)
Çalışan ortalaman ve μO(1)O(1)

Veri Akışları

Hareketli Ortalama (Moving Average)

  • Akıştaki son k elemanın ortalaması: sensör verisini yumuşatma, borsada 50 günlük ortalama.
  • Saf yöntem her seferinde k elemanı toplar: O(k).
  • Akıllı yöntem: kayan pencere (sliding window). Toplamı tut; yeni eleman girerken ekle, en eski çıkarken çıkar: O(1).
toplam ← toplam − xt−k + xt
ortalama = toplam / min(t, k)
class HareketliOrtalama {
  private final int k;
  private final Queue<Integer> pencere
      = new LinkedList<>();
  private int toplam = 0;

  HareketliOrtalama(int k) { this.k = k; }

  double sonraki(int deger) {
    if (pencere.size() == k)
      toplam -= pencere.poll();
    pencere.offer(deger);
    toplam += deger;
    return toplam / (double) pencere.size();
  }
}

Veri Akışları · Kodu adım adım çalıştır

Hareketli Ortalama: Kodu Adım Adım İzle

akış:486210pencere:toplam = 0

Yeni değer 4. Pencerede 0 eleman var (< 3) → çıkarma yok.

akış:486210pencere:4toplam = 4

4 kuyruğa eklenir, toplama katılır: toplam = 4.

akış:486210pencere:4toplam = 4

Ortalama = 4 / 1 = 4.

akış:486210pencere:4toplam = 4

Yeni değer 8. Pencerede 1 eleman var (< 3) → çıkarma yok.

akış:486210pencere:48toplam = 12

8 kuyruğa eklenir, toplama katılır: toplam = 12.

akış:486210pencere:48toplam = 12

Ortalama = 12 / 2 = 6.

akış:486210pencere:48toplam = 12

Yeni değer 6. Pencerede 2 eleman var (< 3) → çıkarma yok.

akış:486210pencere:486toplam = 18

6 kuyruğa eklenir, toplama katılır: toplam = 18.

akış:486210pencere:486toplam = 18

Ortalama = 18 / 3 = 6.

akış:486210pencere:486toplam = 18

Yeni değer 2. Pencere dolu (boyut 3 = k) → en eski çıkarılacak.

akış:486210pencere:86çıkan: 4toplam = 14

En eski eleman 4 kuyruktan alınır, toplamdan çıkarılır: toplam = 14.

akış:486210pencere:862toplam = 16

2 kuyruğa eklenir, toplama katılır: toplam = 16.

akış:486210pencere:862toplam = 16

Ortalama = 16 / 3 = 5,33.

akış:486210pencere:862toplam = 16

Yeni değer 10. Pencere dolu (boyut 3 = k) → en eski çıkarılacak.

akış:486210pencere:62çıkan: 8toplam = 8

En eski eleman 8 kuyruktan alınır, toplamdan çıkarılır: toplam = 8.

akış:486210pencere:6210toplam = 18

10 kuyruğa eklenir, toplama katılır: toplam = 18.

akış:486210pencere:6210toplam = 18

Ortalama = 18 / 3 = 6.

double sonraki(int deger) {
  if (pencere.size() == k)
    toplam -= pencere.poll(); // en eski
  pencere.offer(deger);
  toplam += deger;
  return toplam / (double) pencere.size();
}

Veri Akışları

Çevrimiçi Ortanca (Running Median)

  • Her yeni elemandan sonra o ana kadarki ortanca (median) istenir.
  • Her seferinde sıralamak: O(n log n). Sıralı diziye eklemek: O(n).
  • İki yığın (heap): küçük yarı bir max-yığında (sol), büyük yarı bir min-yığında (sag).
  • Değişmezler: sol'daki her eleman ≤ sag'daki her eleman; |sol| = |sag| ya da |sol| = |sag| + 1.
  • Ortanca yığın tepelerinden O(1)'de okunur; ekleme O(log n).
sol (max)tepe = 53 1≤ 5sag (min)tepe = 815≥ 8ortanca = 5 (5 eleman)
Sayı adedi tekse ortanca sol'un tepesi; çiftse iki tepenin ortalamasıdır. Java'da max-yığın: new PriorityQueue<>((a, b) -> b - a).

Veri Akışları · Kodu adım adım çalıştır

Çevrimiçi Ortanca: Kodu Adım Adım İzle

akış:5151387sol(max)sag(min)5boş

x = 5: sol boş → sol yığınına eklenir.

akış:5151387sol(max)sag(min)5boş

Boyutlar 1 ve 0: denge tamam, taşıma yok.

akış:5151387sol(max)sag(min)5boşortanca = 5

Eleman sayısı tek: ortanca = sol tepesi = 5.

akış:5151387sol(max)sag(min)515

x = 15: 15 > 5 → sag yığınına eklenir.

akış:5151387sol(max)sag(min)515

Boyutlar 1 ve 1: denge tamam, taşıma yok.

akış:5151387sol(max)sag(min)515ortanca = 10

Eleman sayısı çift: ortanca = (5 + 15) / 2 = 10.

akış:5151387sol(max)sag(min)5115

x = 1: 1 ≤ 5 → sol yığınına eklenir.

akış:5151387sol(max)sag(min)5115

Boyutlar 2 ve 1: denge tamam, taşıma yok.

akış:5151387sol(max)sag(min)5115ortanca = 5

Eleman sayısı tek: ortanca = sol tepesi = 5.

akış:5151387sol(max)sag(min)53115

x = 3: 3 ≤ 5 → sol yığınına eklenir.

akış:5151387sol(max)sag(min)31515

Denge bozuldu (|sol| = 3, |sag| = 1): sol tepesi 5 sag yığınına taşınır.

akış:5151387sol(max)sag(min)31515ortanca = 4

Eleman sayısı çift: ortanca = (3 + 5) / 2 = 4.

akış:5151387sol(max)sag(min)315815

x = 8: 8 > 3 → sag yığınına eklenir.

akış:5151387sol(max)sag(min)531815

Denge bozuldu (|sol| = 2, |sag| = 3): sag tepesi 5 sol yığınına taşınır.

akış:5151387sol(max)sag(min)531815ortanca = 5

Eleman sayısı tek: ortanca = sol tepesi = 5.

akış:5151387sol(max)sag(min)5317815

x = 7: 7 > 5 → sag yığınına eklenir.

akış:5151387sol(max)sag(min)5317815

Boyutlar 3 ve 3: denge tamam, taşıma yok.

akış:5151387sol(max)sag(min)5317815ortanca = 6

Eleman sayısı çift: ortanca = (5 + 7) / 2 = 6.

void ekle(int x) {
  if (sol.isEmpty() || x <= sol.peek())
    sol.offer(x);          // küçük yarı
  else
    sag.offer(x);          // büyük yarı
  if (sol.size() > sag.size() + 1)
    sag.offer(sol.poll());
  else if (sag.size() > sol.size())
    sol.offer(sag.poll());
}
double ortanca() {
  if (sol.size() == sag.size())
    return (sol.peek() + sag.peek()) / 2.0;
  return sol.peek();
}

Veri Akışları

Rezervuar Örnekleme (Reservoir Sampling)

  • Uzunluğu bilinmeyen bir akıştan, her elemanın eşit olasılıkla seçildiği k elemanlı bir örneklem tutmak.
  • Algoritma R (Vitter, 1985): ilk k elemanı rezervuara koy. Sonra 0 tabanlı i. eleman için (i ≥ k) j = rastgele[0, i] seç; j < k ise rezervuar[j] ← xi.
  • i. eleman k / (i + 1) olasılıkla girer; girerse rastgele bir yerdeki elemanı çıkarır.
Kanıt (n eleman sonunda her eleman k / n olasılıkla rezervuardadır): xi girer: k/(i+1). Sonraki her t > i adımında çıkarılmama olasılığı 1 − (k/(t+1)) · (1/k) = t/(t+1). Çarpım:
k/(i+1) · (i+1)/(i+2) · … · (n−1)/n = k / n

İlk k eleman için de aynı: girme olasılığı 1, sonraki çarpım k/(k+1) · … · (n−1)/n = k/n. Bellek O(k), eleman başına O(1).

Veri Akışları · Kodu adım adım çalıştır

Rezervuar Örnekleme: Kodu Adım Adım İzle

akis:100201302403504605r:100201302

İlk k = 3 eleman (10, 20, 30) doğrudan rezervuara konur.

akis:100201302403504605r:100201302

i = 3 (değer 40): j = rastgele[0, 3] → j = 1 çıktı (bu izlemede sabitlendi).

akis:100201302403504605r:100401302

j = 1 < 3 → r[1] = 40 (20 çıkar). 40'in girme olasılığı 3/4.

akis:100201302403504605r:100401302

i = 4 (değer 50): j = rastgele[0, 4] → j = 4 çıktı (bu izlemede sabitlendi).

akis:100201302403504605r:100401302

j = 4 ≥ 3 → 50 rezervuara girmez; rezervuar değişmez.

akis:100201302403504605r:100401302

i = 5 (değer 60): j = rastgele[0, 5] → j = 0 çıktı (bu izlemede sabitlendi).

akis:100201302403504605r:600401302

j = 0 < 3 → r[0] = 60 (10 çıkar). 60'in girme olasılığı 3/6.

akis:100201302403504605r:600401302

Akış bitti: örneklem [60, 40, 30]. Başka j değerleriyle başka sonuç çıkar; her eleman 3/6 = 1/2 olasılıkla seçilir.

List<Integer> rezervuar(int[] akis, int k) {
  List<Integer> r = new ArrayList<>();
  for (int i = 0; i < k; i++) r.add(akis[i]);
  for (int i = k; i < akis.length; i++) {
    int j = rastgele.nextInt(i + 1); // 0..i
    if (j < k)
      r.set(j, akis[i]);
  }
  return r;
}

Veri Akışları

Akışta Örüntü Arama: Kayan Hash

Akış karakter karakter gelir; örüntü "AB" (m = 2), h = c0·101 + c1 (A = 65, B = 66, C = 67, D = 68). h("AB") = 6631. Yeni karakter gelince hash O(1)'de güncellenir:

hyeni = (heski − cçıkan · 101m−1) · 101 + cgiren
konumpencerehesaphashsonuç
0CA67·101 + 656832—
1AB(6832 − 67·101)·101 + 666631eşleşme
2BD(6631 − 65·101)·101 + 686734—
3DA(6734 − 66·101)·101 + 656933—
4AB(6933 − 68·101)·101 + 666631eşleşme

Akış "CABDAB": örüntü 1. ve 4. konumda. Hash eşitse karakterler de karşılaştırılır (çakışma olabilir). Hash'i her pencerede baştan hesaplamak O(m) sürer; kayan güncelleme ile O(1)'e iner.

Artımlı Öğrenme · Adım adım

Artımlı Öğrenme (Incremental Learning)

Özgün veriMODEL 1Artımlı öğrenme (zaman)

Başlangıçta model özgün veri kümesi ile eğitilir: MODEL 1.

Özgün veriMODEL 1Yeni veri 1öğrenmeArtımlı öğrenme (zaman)

Yeni veri 1 gelir. Tüm veriyle baştan eğitmek yerine model yalnızca yeni veriyle güncellenir.

Özgün veriMODEL 1Yeni veri 1öğrenmeMODEL 2Artımlı öğrenme (zaman)

MODEL 2 hem eski hem yeni verideki bilgiyi temsil eder; eski veri yeniden işlenmez.

Özgün veriMODEL 1Yeni veri 1öğrenmeMODEL 2Yeni veri 2öğrenmeArtımlı öğrenme (zaman)

Yeni veri 2 gelir; aynı güncelleme tekrarlanır.

Özgün veriMODEL 1Yeni veri 1öğrenmeMODEL 2Yeni veri 2öğrenmeMODEL 3Artımlı öğrenme (zaman)

MODEL 3 üç veri kümesinin bilgisini taşır. Model hep güncel, maliyet yalnızca yeni veri kadardır.

Artımlı Öğrenme

Artımlı Güncelleme ve Zorlukları

Çalışan ortalama

Ortalama yeni elemanla güncellenir; geçmişi saklamaya gerek yoktur:

μn = μn−1 + (xn − μn−1) / n

Akış 4, 8, 6: μ = 4 → 4 + (8 − 4)/2 = 6 → 6 + (6 − 6)/3 = 6.

Çevrimiçi gradyan inişi

w ← w − η · ∇ℓ(w; xt, yt)

Her örnek bir kez kullanılır; η: öğrenme oranı.

Zorluklar

  • Felaket boyutunda unutma (catastrophic forgetting): yeni veriye uyum sağlarken eski bilgi kaybolur.
  • Kavram kayması (concept drift): verinin dağılımı zamanla değişir; eski veri yanıltıcı olabilir.
  • Sıra etkisi: veri hangi sırayla gelirse model ona göre şekillenir.
  • Gürültü: tek bir aykırı örnek modeli bozabilir; küçük η ve kayan pencere yardımcı olur.

Özet

Problemler ve Sonuçlar

ProblemÇevrimiçi algoritmaSonuçNot
Kayak kiralamaB − 1 gün kirala, sonra al2 − 1/Bdeterministikte en iyi; rastgele e/(e−1)
SayfalamaLRU, FIFO, FWFkdeterministikte en iyi
SayfalamaLFU, LIFOsınırsızrekabetçi değil
Sayfalama (rastgele)İşaretleme2Hkalt sınır Hk
Liste güncellemeÖne taşı (MTF)2yer değiştirme ve sıklık sayacı rekabetçi değil
Hareketli ortalamaKuyruk + toplamO(1)bellek O(k)
Çevrimiçi ortancaİki yığınO(log n)ortanca okuma O(1)
Rezervuar örneklemeAlgoritma RO(1)her eleman k/n olasılıkla

Üst beş satırdaki sayılar rekabet oranı; alttakiler eleman başına zamandır.

Özet

Özet

KonuHatırlanacaklar
Modelgirdi parça parça gelir; karar hemen verilir ve geri alınamaz
Rekabet oranıALG(σ) ≤ c · OPT(σ) + α, her σ için; en kötü durum analizi, düşman modeli
Kayak kiralamaOPT = min(d, B); başa baş stratejisi 2 − 1/B; daha iyi deterministik strateji yok
SayfalamaFIFO, LRU k-rekabetçi; OPT en uzak geleceği çıkarır; FIFO'da Belady anomalisi
Liste güncellememaliyet = konum; MTF 2-rekabetçi (potansiyel fonksiyonu: ters çiftler)
Veri akışlarıtek geçiş, az bellek: kayan pencere, iki yığın, rezervuar, kayan hash
Artımlı öğrenmemodel yeni veriyle güncellenir; unutma ve kavram kayması zorlukları

Özet

Sık Yapılan Hatalar

"Çevrimiçi = internet" sanmakÇevrimiçi algoritma, girdinin zamanla açığa çıktığı modeldir; ağ bağlantısıyla ilgisi yoktur.
Oranı ortalama durumla karıştırmakRekabet oranı en kötü girdiye göredir; "genelde iyi çalışır" bir rekabet oranı değildir.
FIFO ile LRU'yu karıştırmakFIFO'da isabet sırayı değiştirmez; LRU'da isabet sayfayı en yeni yapar.
Zorunlu hataları unutmakİlk k farklı sayfa her politikada hata verir; OPT bile 0 hata yapamaz.
Rezervuarda yanlış aralıkj = rastgele[0, i] olmalı (i dahil, 0 tabanlı). nextInt(i) yazmak olasılıkları bozar.
Ortancada dengeyi unutmakYalnızca eklemek yetmez; boyut farkı 1'i aşınca tepe öbür yığına taşınmalıdır.

Özet

Örnek Problemler

  1. İstek dizisi 1 2 3 4 1 2 5 1 2 3 4 5, k = 3 için OPT kaç sayfa hatası yapar?
  2. Kayak kiralamada B = 20. Başa baş stratejisinin oranı nedir? 5. gün satın alan stratejinin en kötü oranı nedir?
  3. A B C D listesinde MTF ile D C D A isteklerinin toplam maliyeti nedir?
  4. Akış 2, 9, 4, 7 için çevrimiçi ortancaları sırasıyla yazın.
  5. Rezervuar örneklemede k = 2, akışın 0 tabanlı 9. elemanı rezervuara hangi olasılıkla girer? Akış 10 elemanla biterse bu eleman sonda hangi olasılıkla rezervuardadır?
Cevapları göster
  1. 7 hata: 1 2 3 (zorunlu), 4 (3'ü at), 5 (4'ü at), 3 (1 ya da 2'yi at), 4. FIFO 9, LRU 10 yapar.
  2. 2 − 1/20 = 1,95. k = 5: d = 5 iken ALG = 4 + 20 = 24, OPT = 5 → 4,8.
  3. D: 4 → D A B C; C: 4 → C D A B; D: 2 → D C A B; A: 3 → A D C B. Toplam 13.
  4. 2 → 2; 2, 9 → 5,5; 2, 4, 9 → 4; 2, 4, 7, 9 → 5,5.
  5. Girme: k/(i + 1) = 2/10 = 1/5. Son eleman olduğu için sonda da 1/5 = k/n.

Özet

Alıştırmalar

  1. FIFO sayfalamayı bir Queue ve bir HashSet ile O(1) zamanda yazın.
  2. OPT'yi (Belady) Java ile yazın. Zaman karmaşıklığı nedir?
  3. Kayak kiralamada "B/2. gün satın al" stratejisinin oranını bulun.
  4. Çevrimiçi ortancaya sil(x) eklemek neden zordur?
  5. k = 1 rezervuarda 3 elemanlı akışın her elemanının 1/3 olasılıkla seçildiğini gösterin.
  6. Son k elemanın en büyüğünü amortize O(1) zamanda bulun.
Cevaplar / ipuçları
  1. İsabet: kume.contains(p). Hata: doluysa kume.remove(kuyruk.poll()); sonra offer + add.
  2. Hata başına ileri tarama: toplam O(n² · k); sonraki kullanım indisleri önceden hesaplanıp yığında tutulursa O(n log k).
  3. d = B/2 iken ALG = (B/2 − 1) + B, OPT = B/2 → oran 3 − 2/B. Başa baştan (2 − 1/B) kötü.
  4. Yığın keyfi elemanı hızlı silemez; sayaçlı TreeMap ya da tembel silme gerekir.
  5. 1. eleman: 1 · (1/2) · (2/3) = 1/3; 2. eleman: (1/2) · (2/3) = 1/3; 3. eleman: 1/3.
  6. Monoton azalan deque: yeni gelen küçükleri arkadan atar, pencere dışı baştan çıkar; baştaki en büyüktür.

Özet

Kaynaklar

  • A. Borodin ve R. El-Yaniv, Online Computation and Competitive Analysis, Cambridge University Press, 1998.
  • D. D. Sleator ve R. E. Tarjan, "Amortized Efficiency of List Update and Paging Rules", Communications of the ACM 28(2), 1985.
  • L. A. Belady, "A Study of Replacement Algorithms for a Virtual-Storage Computer", IBM Systems Journal 5(2), 1966.
  • A. Fiat, R. M. Karp, M. Luby, L. A. McGeoch, D. D. Sleator ve N. E. Young, "Competitive Paging Algorithms", Journal of Algorithms 12(4), 1991.
  • J. S. Vitter, "Random Sampling with a Reservoir", ACM Transactions on Mathematical Software 11(1), 1985.
  • Cormen, Leiserson, Rivest ve Stein, Introduction to Algorithms, 4. baskı, 2022 (Bölüm 27: Online Algorithms).

Son

Bölüm 9: Çevrimiçi Algoritmalar
Sonraki bölüm: Bölüm 10: Paralel Algoritmalar
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.