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

Bölüm 9: Çevrimiçi Algoritmalar · Çalışma Soruları
Çevrimiçi modelRekabet oranıKayak kiralamaSayfalama: FIFO, LRU, OPTListe güncellemeVeri akışlarıRezervuar örnekleme
Sercan KÜLCÜ

Çoktan Seçmeli · Çevrimiçi Model

Soru 1: Hangisi Çevrimiçi Çalışabilir?

Öğeler tek tek geliyor ve her öğe geldiğinde o ana kadarki öğelerin sıralı hâli hazır olmalı. Hangi algoritma bu çevrimiçi modele doğal olarak uyar?

B: Eklemeli sıralama gelen öğeyi o ana kadarki sıralı diziye yerleştirir; geleceği bilmesi gerekmez. Seçimli sıralama ilk adımda bile tüm girdinin en küçüğünü bilmek zorundadır; birleştirme ve QuickSort da girdinin tamamına ihtiyaç duyar (çevrimdışı).

Çoktan Seçmeli · Çevrimiçi Model

Soru 2: Rekabet Oranının Tanımı

Bir en küçükleme probleminde çevrimiçi algoritma ALG için "c-rekabetçidir" ifadesi ne anlama gelir?

A: Rekabet oranı bir en kötü durum garantisidir: her σ için maliyet OPT'nin c katını (artı sabit) aşmaz. Olasılık varsayımı yoktur (B ortalama durumdur). Ölçülen maliyettir, süre değil. D yalnızca bir girdiden söz eder; garanti tüm girdiler içindir.

Çoktan Seçmeli · Çevrimiçi Model

Soru 3: Düşman Türleri

Rastgele bir sayfalama algoritmasını analiz ederken habersiz (oblivious) düşman için hangisi doğrudur?

C: Habersiz düşman algoritmayı bilir ama yazı-tura sonuçlarını göremez; diziyi önceden belirler ve beklenen maliyet ölçülür. B uyarlanır (adaptive) düşmandır; bu durumda rastgeleliğin faydası azalır. İşaretleme algoritmasının 2Hk oranı habersiz düşmana karşıdır.

Adım Adım Çalıştırma · Kayak Kiralama

Soru 4: Başa Baş Stratejisi

kayakMaliyet(5, 5, 7): B = 5, satın alma günü k = 5, gerçek gün sayısı d = 7. Maliyet nasıl birikir, rekabet oranı nedir?

gün 1gün 2gün 3gün 4gün 5gün 6gün 7

Satın alma 5 TL, kira günlüğü 1 TL. Strateji: k − 1 = 4 gün kirala, 5. gün hâlâ kayılıyorsa satın al. Sezon d = 7 gün sürecek (algoritma bunu bilmiyor).

Kgün 1gün 2gün 3gün 4gün 5gün 6gün 7

gün = 1 ≠ k → kiralanır: maliyet = 1.

Kgün 1Kgün 2gün 3gün 4gün 5gün 6gün 7

gün = 2 ≠ k → kiralanır: maliyet = 2.

Kgün 1Kgün 2Kgün 3gün 4gün 5gün 6gün 7

gün = 3 ≠ k → kiralanır: maliyet = 3.

Kgün 1Kgün 2Kgün 3Kgün 4gün 5gün 6gün 7

gün = 4 ≠ k → kiralanır: maliyet = 4.

Kgün 1Kgün 2Kgün 3Kgün 4Sgün 5–gün 6–gün 7

gün = 5 = k → satın alınır: maliyet = 4 + 5 = 9, break. Kalan günler (6, 7) bedavadır.

Kgün 1Kgün 2Kgün 3Kgün 4Sgün 5–gün 6–gün 7

ALG = 9, OPT = min(d, B) = min(7, 5) = 5 → oran 1,8 = 2 − 1/B. d = 5 olsaydı da ALG 9, OPT 5 olurdu: düşmanın en iyi seçimi d = k'dir.

int kayakMaliyet(int B, int k, int d) {
  int maliyet = 0;
  for (int gun = 1; gun <= d; gun++) {
    if (gun == k) { maliyet += B; break; }  // satın al
    maliyet += 1;  // kirala
  }
  return maliyet;
}

Çıktı Sorusu · Kayak Kiralama

Soru 5: B = 12 için Oranlar

Kayak kiralamada satın alma fiyatı B = 12 TL. (a) Başa baş stratejisinin (11 gün kirala, 12. gün al) rekabet oranı nedir? (b) 4. gün satın alan stratejinin en kötü durum oranı nedir; düşman hangi d'yi seçer?

Cevabı göster
  • (a) Düşman d = 12 seçer: ALG = 11 + 12 = 23, OPT = 12 → 23/12 = 2 − 1/12 ≈ 1,92.
  • (b) Düşman satın alınan gün sezonu bitirir: d = 4. ALG = 3 kira + 12 = 15, OPT = min(4, 12) = 4 → 15/4 = 3,75.

Genel: k < B için oran (k − 1 + B)/k, k ≥ B için (k − 1 + B)/B; ikisi de k = B'de en küçük değeri 2 − 1/B alır. Erken satın almak da geç satın almak da kötüdür.

Çoktan Seçmeli · Kayak Kiralama

Soru 6: Geç Satın Alma

B = 10 iken 15. gün satın alan (14 gün kiralayan) deterministik stratejinin en kötü durum rekabet oranı kaçtır?

B: Düşman d = 15 seçer: ALG = 14 + 10 = 24, OPT = min(15, 10) = 10 → 2,4. 1,9 başa baş stratejisinin (k = 10) oranıdır; 1,5 = 15/10 satın alma bedelini unutmaktır; 2,9, k = 20 içindir.

Klasik Soru · Kayak Kiralama

Soru 7: Neden 2 − 1/B'den İyisi Yok?

Kayak kiralamada hiçbir deterministik çevrimiçi stratejinin 2 − 1/B'den iyi rekabet oranına sahip olamayacağını düşman argümanıyla gösterin. Rastgelelik bu sınırı nasıl değiştirir?

Cevabı göster

Deterministik her strateji tek bir sayıyla tanımlanır: k = satın alma günü. Düşman kodu bildiği için sezonu tam satın alınan gün bitirir: d = k.

  • ALG = (k − 1) + B, OPT = min(k, B).
  • k < B (k ≤ B − 1): oran (k − 1 + B)/k = 1 + (B − 1)/k ≥ 1 + 1 = 2 > 2 − 1/B.
  • k ≥ B: oran (k − 1 + B)/B ≥ (2B − 1)/B.

Her k için oran ≥ 2 − 1/B; eşitlik k = B'de. Rastgele seçilen k ile düşman satın alma gününü bilemez: beklenen oran e/(e − 1) ≈ 1,58'e iner (Karlin vd.).

Adım Adım Çalıştırma · Sayfalama

Soru 8: FIFO Sayfalama İzleme

fifoHata(new int[]{1, 2, 3, 1, 4, 1, 2, 5}, 3) çağrısında kuyruk nasıl değişir, kaç sayfa hatası olur?

baş: en eski

k = 3 çerçeve, önbellek boş. İstekler: 1 2 3 1 4 1 2 5. Kuyruğun başı en önce yüklenen sayfadır.

1

Sayfa 1 yok → sayfa hatası, hata = 1. Yer var, çıkarma yok.

12

Sayfa 2 yok → sayfa hatası, hata = 2. Yer var, çıkarma yok.

123

Sayfa 3 yok → sayfa hatası, hata = 3. Yer var, çıkarma yok.

123isabet

Sayfa 1 kümede → isabet, continue. FIFO'da isabet kuyruk sırasını değiştirmez.

2341 çıktı

Sayfa 4 yok → sayfa hatası, hata = 4. Kuyruk dolu → baştaki 1 atılır.

3412 çıktı

Sayfa 1 yok → sayfa hatası, hata = 5. Kuyruk dolu → baştaki 2 atılır.

4123 çıktı

Sayfa 2 yok → sayfa hatası, hata = 6. Kuyruk dolu → baştaki 3 atılır.

1254 çıktı

Sayfa 5 yok → sayfa hatası, hata = 7. Kuyruk dolu → baştaki 4 atılır.

125

8 istekte 7 sayfa hatası. 1 sayfası sık istenmesine rağmen yalnızca "en eski yüklenen" olduğu için 4 gelince atıldı; aynı dizide LRU 6, OPT 5 hata yapar.

int fifoHata(int[] istekler, int k) {
  Queue<Integer> kuyruk = new LinkedList<>();
  Set<Integer> kume = new HashSet<>();
  int hata = 0;
  for (int sayfa : istekler) {
    if (kume.contains(sayfa)) continue;  // isabet
    hata++;
    if (kuyruk.size() == k)
      kume.remove(kuyruk.poll());  // en eskiyi at
    kuyruk.offer(sayfa); kume.add(sayfa);
  }
  return hata;
}

Adım Adım Çalıştırma · Sayfalama

Soru 9: LRU Sayfalama İzleme

lruHata(new int[]{2, 3, 2, 1, 5, 2, 4, 5, 3, 2}, 3) çağrısında onb listesi nasıl değişir, kaç sayfa hatası olur?

baş: en eski

k = 3, liste boş. İstekler: 2 3 2 1 5 2 4 5 3 2. Liste başı en uzun süredir kullanılmayan sayfadır.

2

Sayfa 2 yok → hata = 1. Yer var.

23

Sayfa 3 yok → hata = 2. Yer var.

32isabet

Sayfa 2 listede: remove true → isabet; sona eklenir, artık en yeni kullanılan.

321

Sayfa 1 yok → hata = 3. Yer var.

2153 çıktı

Sayfa 5 yok → hata = 4. Dolu → baştaki (en eski kullanılan) 3 atılır.

152isabet

Sayfa 2 listede: remove true → isabet; sona eklenir, artık en yeni kullanılan.

5241 çıktı

Sayfa 4 yok → hata = 5. Dolu → baştaki (en eski kullanılan) 1 atılır.

245isabet

Sayfa 5 listede: remove true → isabet; sona eklenir, artık en yeni kullanılan.

4532 çıktı

Sayfa 3 yok → hata = 6. Dolu → baştaki (en eski kullanılan) 2 atılır.

5324 çıktı

Sayfa 2 yok → hata = 7. Dolu → baştaki (en eski kullanılan) 4 atılır.

532

10 istekte 7 hata, 3 isabet. remove listeyi taradığı için her istek O(k); LinkedHashMap 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;
}

Çıktı Sorusu · Sayfalama

Soru 10: Aynı Dizide OPT

Önceki sorudaki dizi (2 3 2 1 5 2 4 5 3 2) ve k = 3 için Belady'nin OPT politikası (bir sonraki kullanımı en uzak olanı çıkar) kaç sayfa hatası yapar? Her çıkarmada hangi sayfa atılır?

Cevabı göster
İstek2321524532
SonuçHH✓HH✓H✓✓H
Çıkan124
  • 5 gelince önbellek {2, 3, 1}: sonraki kullanımlar 2 → 6., 3 → 9., 1 → hiç → 1 atılır.
  • 4 gelince {2, 3, 5}: 2 → 10., 3 → 9., 5 → 8. → en uzak 2 atılır.
  • Son 2 gelince {4, 3, 5}: 4 bir daha istenmiyor → 4 atılır.

OPT = 6 hata; LRU ve FIFO 7. İlk 3 farklı sayfanın hatası (2, 3, 1) her politikada zorunludur.

Çıktı Sorusu · Sayfalama

Soru 11: LinkedHashMap ile LRU

Sunumdaki LruOnbellek sınıfı (super(16, 0.75f, true), removeEldestEntry: size() > k) ile aşağıdaki kod ne yazdırır? Kurucudaki true, false yapılırsa (ekleme sırası) ilk satır ne olur?

LruOnbellek<Integer, String> c =
    new LruOnbellek<>(2);
c.put(1, "a");
c.put(2, "b");
c.get(1);
c.put(3, "c");
System.out.println(c.keySet());
System.out.println(c.get(2));
Cevabı göster

Çıktı:

[1, 3]
null
  • put(1), put(2) → sıra 1, 2. get(1) erişim sırasında 1'i sona taşır → 2, 1.
  • put(3) → boyut 3 > 2: en eski (baştaki) 2 silinir → 1, 3.
  • get(2) → null (sayfa hatası).

false ile erişim sırayı değiştirmez (FIFO): put(3) en önce eklenen 1'i siler → [2, 3].

Çıktı Sorusu · Sayfalama

Soru 12: Belady Anomalisi

İstek dizisi 0 1 2 3 0 1 4 0 1 2 3 4. FIFO ve LRU, k = 3 ve k = 4 çerçeveyle kaçar sayfa hatası yapar? Sonucu yorumlayın.

Cevabı göster
Politikak = 3k = 4
FIFO910
LRU108

FIFO'da önbellek büyüdüğü hâlde hata 9'dan 10'a arttı: Belady anomalisi. k = 4'te 0, 1 sayfaları sıra gereği tam ihtiyaç duyulmadan önce atılır.

LRU ve OPT birer yığın algoritmasıdır: k çerçevedeki sayfalar her an k + 1 çerçevedekilerin alt kümesidir, bu yüzden çerçeve artınca hata artamaz (LRU: 10 → 8).

Çoktan Seçmeli · Sayfalama

Soru 13: FIFO ile LRU Farkı

Önbellekte 3, 5, 8 sayfaları var (FIFO yükleme sırası 3, 5, 8; LRU kullanım sırası da başlangıçta 3, 5, 8). Sırasıyla 3 (isabet) ve 9 (hata) isteniyor. FIFO ve LRU 9 için hangi sayfaları çıkarır?

A: FIFO'da isabet sırayı değiştirmez: en önce yüklenen 3 çıkar (hemen az önce kullanılmış olsa da). LRU'da isabet 3'ü en yeni yapar (sıra 5, 8, 3); en uzun süredir kullanılmayan 5 çıkar. İki politikanın tek farkı isabetin sırayı güncelleyip güncellememesidir.

Klasik Soru · Sayfalama

Soru 14: OPT Neden Uygulanamaz?

Belady'nin OPT politikası neden gerçek bir işletim sisteminde kullanılamaz, buna rağmen neden önemlidir? İstek dizisi önceden verilmiş olsaydı OPT'yi nasıl gerçeklerdiniz; zaman karmaşıklığı ne olurdu?

Cevabı göster

OPT "bir sonraki kullanımı en uzak olan sayfayı" çıkarır: bu, gelecekteki istekleri bilmeyi gerektirir. Çevrimiçi bir sistem σt geldiğinde σt+1'i bilmez; OPT çevrimdışı bir algoritmadır.

  • Önemi: kanıtlanabilir biçimde en az sayfa hatasını verir; rekabet oranlarında karşılaştırma ölçütüdür (ALG / OPT) ve gerçek politikaların ne kadar iyileştirilebileceğini gösterir.
  • Gerçekleme (dizi biliniyorsa): her hatada önbellekteki k sayfanın sonraki kullanımını ileri tarayarak bulmak O(n · k) → toplam O(n² · k). Sonraki kullanım indisleri sondan başa bir geçişte önceden hesaplanıp önbellek bir max-heap'te tutulursa O(n log k).

Çoktan Seçmeli · Sayfalama

Soru 15: Evre Sayısı

k = 3 için istek dizisi 1 2 3 1 4 5 6 4 1 2 evrelere bölünüyor (her evre k farklı sayfa içeren en uzun parça). Kaç evre vardır ve LRU'nun bu dizideki hata sayısı için evre argümanı hangi üst sınırı verir?

1231456412evre 1evre 2evre 3

D: [1 2 3 1] [4 5 6 4] [1 2]: dördüncü farklı sayfa (4, sonra 1) yeni evre başlatır. LRU evre başına en çok k hata yapar → ≤ 3 · 3 = 9 (gerçekte 8: ikinci evrede 4 isabettir). OPT ise ardışık iki evre başına en az 1 hata yapar.

Çoktan Seçmeli · Sayfalama

Soru 16: İşaretleme Algoritmasının Oranı

Rastgele işaretleme (marking) algoritması habersiz düşmana karşı 2Hk-rekabetçidir. k = 4 için bu oran yaklaşık kaçtır?

D: H₄ = 1 + 1/2 + 1/3 + 1/4 = 25/12 ≈ 2,08 → 2H₄ = 25/6 ≈ 4,17. 2,08, rastgele algoritmalar için alt sınır Hk'dır; 4,00 deterministik LRU/FIFO'nun k oranıdır; 8,00 = 2k.

Çoktan Seçmeli · Sayfalama

Soru 17: Zorunlu Hatalar

Bir istek dizisinde 6 farklı sayfa geçiyor ve önbellek k = 3 çerçeveli, başta boş. Geleceği bilen OPT politikası için kesin olarak ne söylenebilir?

B: Her farklı sayfa ilk istendiğinde önbellekte olamaz (zorunlu/soğuk hata): en az 6 hata, hangi politika olursa olsun. Üst sınır dizinin uzunluğuna bağlıdır; 6 ile sınırlı değildir (D yanlış).

Klasik Soru · Sayfalama

Soru 18: Deterministik Alt Sınır k

Hiçbir deterministik sayfalama algoritmasının k'dan iyi rekabet oranına sahip olamayacağını, yalnızca k + 1 farklı sayfa kullanan bir düşman dizisiyle gösterin.

Cevabı göster
  • Düşman algoritmanın kodunu bilir; her adımda ALG'nin önbelleğinde olmayan tek sayfayı ister (k + 1 sayfadan biri her zaman dışarıdadır). ALG her istekte hata yapar: n istekte n hata.
  • OPT bir hata yaptığında bir sonraki kullanımı en uzak sayfayı çıkarır. Diğer k − 1 sayfa o sayfadan önce istenmek zorundadır, yani sonraki hataya kadar en az k istek geçer: OPT en çok ⌈n/k⌉ hata yapar.

Oran ALG / OPT ≥ n / (n/k) = k (Sleator ve Tarjan). LRU ve FIFO bu sınıra ulaşır (k-rekabetçi); daha iyisi için rastgelelik gerekir (2Hk).

Adım Adım Çalıştırma · Liste Güncelleme

Soru 19: Öne Taşı İzleme

mtfMaliyet, A B C D listesi ve D D C D C D istekleriyle çağrılıyor. Her istekte maliyet ve liste nasıl değişir?

ABCD

Liste A B C D; istekler D D C D C D. i. konumdaki öğeye erişmek i birim tutar (baştan taranır).

DABC+4

D: 4. konumda → maliyet 4, toplam 4; D başa taşınır.

DABC+1

D: 1. konumda → maliyet 1, toplam 5; D başa taşınır.

CDAB+4

C: 4. konumda → maliyet 4, toplam 9; C başa taşınır.

DCAB+2

D: 2. konumda → maliyet 2, toplam 11; D başa taşınır.

CDAB+2

C: 2. konumda → maliyet 2, toplam 13; C başa taşınır.

DCAB+2

D: 2. konumda → maliyet 2, toplam 15; D başa taşınır.

DCAB

MTF toplamı 15. Aynı dizide hiç taşımayan liste 4+4+3+4+3+4 = 22, transpoz (bir öne al) 17 öder: sık istenen D ve C hızla öne gelir.

int mtfMaliyet(LinkedList<Character> liste, char[] istekler) {
  int toplam = 0;
  for (char x : istekler) {
    int konum = liste.indexOf(x) + 1;  // 1 tabanlı
    toplam += konum;
    liste.remove((Character) x);
    liste.addFirst(x);  // öne taşı
  }
  return toplam;
}

Çoktan Seçmeli · Liste Güncelleme

Soru 20: Liste Güncelleme Stratejileri

Liste güncelleme problemindeki stratejiler için hangisi doğrudur?

C: Sleator–Tarjan: MTF ≤ 2 · OPT; potansiyel Φ = MTF ve OPT listeleri arasındaki ters sıralı çiftler (amortize analiz). Transpoz son iki öğe sırayla istenince istek başına ≈ n öder; sıklık sayacı sıra değişince eski düzeni uzun süre korur. MTF bazı dizilerde (ör. A B C D'de C A C D B A) taşımamaktan kötü olabilir.

Adım Adım Çalıştırma · Veri Akışları

Soru 21: Hareketli Ortalama İzleme

k = 3 iken sonraki sırasıyla 6, 2, 7, 3, 9 ile çağrılıp sonuçlar yazdırılıyor. Çıktı nedir?

k = 3'lük kayan pencere boş. Akış: 6, 2, 7, 3, 9.

6ort 6,00

6 eklenir: toplam = 6, ortalama = 6 / 1 = 6,0.

62ort 4,00

2 eklenir: toplam = 8, ortalama = 8 / 2 = 4,0.

627ort 5,00

7 eklenir: toplam = 15, ortalama = 15 / 3 = 5,0.

27−6

Yeni değer 3; pencere dolu → en eski 6 çıkarılır, toplam = 9.

273ort 4,00

3 eklenir: toplam = 12, ortalama = 12 / 3 = 4,0.

73−2

Yeni değer 9; pencere dolu → en eski 2 çıkarılır, toplam = 10.

739ort 6,33

9 eklenir: toplam = 19, ortalama = 19 / 3 = 6,333333333333333. Her çağrı O(1): toplam baştan hesaplanmaz.

double sonraki(int deger) {
  if (pencere.size() == k)
    toplam -= pencere.poll();  // en eski
  pencere.offer(deger);
  toplam += deger;
  return toplam / (double) pencere.size();
}
// main: k = 3; her x için println(sonraki(x))

Çıktı Sorusu · Veri Akışları

Soru 22: Çevrimiçi Ortanca

İki heap'li çevrimiçi ortanca yapısına (sol: max-heap, sag: min-heap) sırasıyla 7, 3, 9, 1, 5 ekleniyor ve her eklemeden sonra System.out.print(ortanca() + " ") çalıştırılıyor. Çıktı nedir? En sonda heap'lerde ne vardır?

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();
}
Cevabı göster

Çıktı: 7.0 5.0 7.0 5.0 5.0

xsol (max-heap)sag (min-heap)ortanca
77—7 (tek)
337(3 + 7)/2 = 5
93, 7 (7 geri taşındı)97
11, 37, 9(3 + 7)/2 = 5
51, 3, 57, 95

9 eklenince sag'a girer, sag > sol olduğu için sag'ın tepesi 7 sol'a taşınır. 1 eklenince sol 3 öğeye çıkar, tepe 7 sag'a geçer. ortanca() double döndürür: tek sayıda da 7.0 yazılır.

Çıktı Sorusu · Veri Akışları

Soru 23: Rezervuar Örnekleme

rezervuar(new int[]{5, 8, 2, 9, 4, 7}, 2) çağrılıyor; rastgele.nextInt(i + 1) sırasıyla 1, 3, 0, 4 döndürüyor. Dönen liste nedir? 0 tabanlı 3. öğe (9) rezervuara hangi olasılıkla girer, akış sonunda hangi olasılıkla rezervuardadır?

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;
}
Cevabı göster
  • İlk k = 2 öğe: r = [5, 8].
  • i = 2 (2), j = 1 < 2 → r[1] = 2 → [5, 2].
  • i = 3 (9), j = 3 ≥ 2 → girmez.
  • i = 4 (4), j = 0 → r[0] = 4 → [4, 2].
  • i = 5 (7), j = 4 → girmez.

Sonuç [4, 2].

4021

9'un girme olasılığı k/(i + 1) = 2/4 = 1/2; akış sonunda rezervuarda olma olasılığı her öğe gibi k/n = 2/6 = 1/3 (1/2 · 4/5 · 5/6).

Çoktan Seçmeli · Veri Akışları

Soru 24: Rezervuarda Kalma Olasılığı

k = 3'lük rezervuar örneklemede 0 tabanlı i = 11. öğe gelince rezervuara hangi olasılıkla girer? Akış toplam n = 20 öğeyle biterse bu öğe sonda hangi olasılıkla rezervuardadır?

A: Girme k/(i + 1) = 3/12 = 1/4. Sonraki her t > i adımında çıkarılmama (t)/(t + 1); çarpım 1/4 · 12/13 · … · 19/20 = 3/20 = k/n: her öğe için aynı. 3/11, aralığı nextInt(i) sanmaktır; 1/20 tek öğeli örneklem içindir.

Çoktan Seçmeli · Veri Akışları

Soru 25: nextInt(i) Hatası

Rezervuar kodunda rastgele.nextInt(i + 1) yerine rastgele.nextInt(i) yazılırsa (i ≥ k) ne olur?

B: nextInt(i) 0 … i − 1 üretir; j < k olasılığı k/(i + 1) yerine k/i olur. Geç gelen öğeler gereğinden sık girer, erkenler daha sık çıkar: örneklem düzgün değildir. i = k'da olasılık 1'e çıkar: k. öğe kesin girer.

Çıktı Sorusu · Veri Akışları

Soru 26: Akışta Kayan Hash

Akış karakter karakter geliyor: "ACAC". Örüntü "CA" (m = 2), h = c₀ · 101 + c₁ (A = 65, C = 67). Her konumdaki pencere için kayan güncelleme hyeni = (heski − cçıkan · 101) · 101 + cgiren ile hash'i hesaplayın; eşleşme hangi konumdadır?

Cevabı göster
konumpencerehesaphashsonuç
0AC65 · 101 + 676632—
1CA(6632 − 65 · 101) · 101 + 656832eşleşme
2AC(6832 − 67 · 101) · 101 + 676632—

h("CA") = 67 · 101 + 65 = 6832 → eşleşme 1. konumda. Hash eşitliğinde karakterler de karşılaştırılır (çakışma olabilir). Güncelleme O(1): akışta yalnızca son m karakter saklanır.

Çoktan Seçmeli · Veri Akışları

Soru 27: Çalışan Ortalama

Çalışan ortalama μn = μn−1 + (xn − μn−1) / n formülüyle güncelleniyor. Akış 4, 8, 6, 10 için son μ kaçtır?

C: μ = 4 → 4 + (8 − 4)/2 = 6 → 6 + (6 − 6)/3 = 6 → 6 + (10 − 6)/4 = 7 = (4 + 8 + 6 + 10)/4. 7,5, son iki değerin hareketli ortalaması gibi davranmaktır; 8, son adımda n yerine 2'ye bölmektir. Geçmiş saklanmaz: O(1) bellek.

Son

Bölüm 9: Çevrimiçi Algoritmalar: Çalışma Soruları
Konu anlatımı: Çevrimiçi Algoritmalar sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.