İçeriğe geç
academia.sh

Ders 23 / 23

Alıştırma Ortamlarını Kullanma

Tekrarlı çalışmanın ilerleme ölçütünün ortak tanımın beş kalıbı üzerinde sayılması: 144 problem çözen ortam beş kalıbı da görüyor ama denge oranı 0,2431, 30 problem çözen ortamda 0,6667.

İçindekiler

Önceki iki ders tek bir çözümle ilgiliydi: hangi kalıp seçilir, seçilen kalıp nasıl sınanır. Bu ders soruyu tek çözümün dışına taşır. Alıştırma tekrarlı bir iştir ve tekrarlı işin bir ilerleme ölçütü olmak zorundadır, yoksa çalışma sürer ama nereye gittiği bilinmez.

Ortamlar türleriyle anılır, çünkü ölçülen şey ortamın kendisi değil, ürettiği problem akışının biçimidir. Sonuç iki adımda çıkar: çözülen problem sayısı bir ilerleme ölçütü değildir, kaç ayrı kalıp görüldüğü de değildir.

Üç Ortam Türü

Havuz tabanlı alıştırma ortamında çok sayıda problem durur ve seçimi çalışan yapar. Seçim serbest olduğu için tanıdık olana kayar; kalıp dağılımı çalışanın alışkanlığını yansıtır. Zamanlı yarışma ortamında kümeyi ortam belirler ve çalışan hepsini görmek zorundadır; küme küçüktür. Şirket içi değerlendirmede problem sayısı en azdır, dağılımı yine çalışan seçmez, girdiler hazırlanmamıştır.

  • AD21 — Kalıp kümesi ortak tanımın beş kalıbıdır: iki işaretçi, kayan pencere, açgözlü, geri izleme, not alma. Kurs boyunca ölçülen kalıplar bunlardır.
  • AD22 — Bir tur, ortamda geçirilen bir çalışma oturumudur. Tur başına problem sayısı ortam türüne göre sabittir: havuz 24, yarışma 5, değerlendirme 2. Altı tur ölçülür.
  • AD23 — Havuz tabanlı ortamda seçimin ağırlığı 50, 30, 10, 6, 4’tür; diğer iki ortamda dağılım düzgündür. Ağırlık, çalışanın tanıdık kalıba dönme eğilimini modeller.
  • AD24 — Seçim ortak tanımın belirlenimci üreteciyle yapılır; random kullanılmaz.
  • AD25Denge oranı, en az görülen kalıbın sayısının eşit dağılımdaki paya bölümüdür. Beş kalıp eşit görülseydi oran 1,0000 olurdu.
"""Uc ortam turunde kalip cesitliligi , ortak tanimin bes kalibi uzerinde."""
TOHUM, IKINCI = 20260218, 20260219
KALIP = ["iki isaretci", "kayan pencere", "acgozlu", "geri izleme", "not alma"]
ORTAM = [("havuz tabanli alistirma ", 24, [50, 30, 10, 6, 4]),
         ("zamanli yarisma         ", 5, [20, 20, 20, 20, 20]),
         ("sirket ici degerlendirme", 2, [20, 20, 20, 20, 20])]


def uretec(tohum):
    d = tohum

    def sonraki(n):
        nonlocal d
        d = (d * 1103515245 + 12345) % 2147483648
        return d % n
    return sonraki


def sec(r, agirlik):
    x = r(sum(agirlik))
    for i, a in enumerate(agirlik):
        if x < a:
            return i
        x -= a
    return len(agirlik) - 1


def olcut(sayim):
    toplam = sum(sayim)
    esit = toplam / len(sayim)
    return {"problem": toplam, "kapsanan": sum(1 for c in sayim if c),
            "denge": round(min(sayim) / esit, 4),
            "bas_iki": round(sum(sorted(sayim)[-2:]) / toplam, 4)}


def kosum(tohum, tur=6):
    print(f"tohum {tohum} , {tur} tur")
    print("ortam                     problem  kapsanan   denge  bas iki  dagilim")
    for ad, basina, agirlik in ORTAM:
        r = uretec(tohum)
        sayim = [0] * len(KALIP)
        for _ in range(tur * basina):
            sayim[sec(r, agirlik)] += 1
        o = olcut(sayim)
        print(f"{ad}  {o['problem']:7d}  {o['kapsanan']:8d}  {o['denge']:6.4f}"
              f"  {o['bas_iki']:7.4f}  {sayim}")


kosum(TOHUM)
print()
kosum(IKINCI)
print()
print("havuz tabanli ortam , tur tur birikimli (tohum 20260218)")
print("tur  problem  kapsanan   denge  bas iki")
r = uretec(TOHUM)
sayim = [0] * len(KALIP)
for t in range(1, 7):
    for _ in range(24):
        sayim[sec(r, ORTAM[0][2])] += 1
    o = olcut(sayim)
    print(f"{t:3d}  {o['problem']:7d}  {o['kapsanan']:8d}  {o['denge']:6.4f}"
          f"  {o['bas_iki']:7.4f}")
tohum 20260218 , 6 tur
ortam                     problem  kapsanan   denge  bas iki  dagilim
havuz tabanli alistirma       144         5  0.2431   0.7986  [64, 51, 11, 11, 7]
zamanli yarisma                30         5  0.6667   0.5000  [4, 5, 9, 6, 6]
sirket ici degerlendirme       12         5  0.4167   0.5833  [1, 4, 3, 2, 2]

tohum 20260219 , 6 tur
ortam                     problem  kapsanan   denge  bas iki  dagilim
havuz tabanli alistirma       144         5  0.1389   0.8194  [76, 42, 16, 6, 4]
zamanli yarisma                30         5  0.6667   0.5667  [8, 4, 9, 4, 5]
sirket ici degerlendirme       12         5  0.4167   0.6667  [1, 1, 5, 2, 3]

havuz tabanli ortam , tur tur birikimli (tohum 20260218)
tur  problem  kapsanan   denge  bas iki
  1       24         4  0.0000   0.8333
  2       48         5  0.2083   0.7917
  3       72         5  0.2778   0.7639
  4       96         5  0.2604   0.7500
  5      120         5  0.2500   0.7750
  6      144         5  0.2431   0.7986

Birinci tablo iki ölçütü aynı anda çürütüyor. Havuz tabanlı ortam 144, zamanlı yarışma 30, şirket içi değerlendirme 12 problem çözüyor — arada 12 kat fark var. Buna karşılık kapsanan kalıp sayısı üçünde de 5. Yani iki soru da ortamları ayırt etmiyor: “kaç problem çözdüm” 12 kat sapıyor, “kaç ayrı kalıp gördüm” hiç oynamıyor.

Ayırt eden ölçüt dağılımdır. Havuz tabanlı ortamda denge oranı 0,2431: en az görülen kalıp, eşit dağılımdaki payının dörtte birinden azını alıyor ve en çok görülen iki kalıp problemlerin 0,7986’sını kaplıyor. Zamanlı yarışma 30 problemle 0,6667 denge veriyor — beş kat az problemle 2,74 kat dengeli. Şirket içi değerlendirmedeki 0,4167 ise dağılımdan değil, örneklemin küçüklüğünden gelir.

Üçüncü tablo dersin en aykırı sonucudur. Havuz tabanlı ortamda kapsama ikinci turda 5’e çıkıyor ve bir daha hiç değişmiyor: üçüncü turdan altıncı tura kadar çözülen 72 problem kapsama ölçütüne hiçbir şey eklemiyor. Denge oranı ise üçüncü turda 0,2778 ile en yüksek noktasına çıkıp sonra düşüyor — dördüncü turda 0,2604, altıncı turda 0,2431. Problem sayısı artarken ilerleme ölçütü geriliyor, çünkü eklenen her problem baskın iki kalıba gidiyor.

İkinci dağarcık sıralamayı doğruluyor: 20260219 tohumunda havuz 0,1389, yarışma 0,6667, değerlendirme 0,4167. Havuzun değeri 0,2431’den 0,1389’a düşüyor, yani mutlak değer dağarcığa bağlıdır; ama üç ortamın sırası ve havuz ile yarışma arasındaki büyüklük farkı iki dağarcıkta da aynı yönde.

Ortam Hatayı Gösteriyor mu

Dağılım tek başına da yetmez. Bir kalıbı elli kez uygulamak, o kalıbın ön koşulu bozulduğunda ne yaptığını göstermez — ortak tanımın birinci okuması bunu zaten kanıtladı: ön koşul sağlanan 40 girdinin 40’ında iki işaretçi kâhinle aynı yanıtı veriyor; ön koşulu sağlayan girdilerle dolu bir ortamda çalışan biri kalıbın yanlışını hiç görmez.

Burada ölçülen şey ortamın karışımıdır: girdilerin yüzde kaçı ön koşulu sağlıyor, ve bu oran görülen yanlış yanıt sayısını nasıl değiştiriyor. İki seçim politikası karşılaştırılır.

  • AD26 — Havuz tabanlı ortamda girdilerin yüzde 90’ı, zamanlı yarışmada yüzde 75’i, şirket içi değerlendirmede yüzde 50’si ön koşulu sağlar. Havuzda problemler kalıba göre hazırlanmıştır, değerlendirmede girdi olduğu gibi gelir.
  • AD27Alışkanlıkla seçim, en çok pratik edilen kalıbı her probleme uygular ve ön koşulu sınamaz.
  • AD28Ön koşul kontrolüyle seçim, önce girdinin sıralı olup olmadığına bakar; sıralı değilse kalıbı uygulamaz, kâhine düşer. Sınama en fazla n1n-1 adımdır ve ilk aykırı çiftte durur.
  • AD29 — Her ortamda 40 problem çözülür ve hedef 11’dir.
"""Iki secim politikasi , kahin karsisinda , uc ortam karisimi."""
TOHUM, IKINCI = 20260218, 20260219


def uretec(tohum):
    d = tohum

    def sonraki(n):
        nonlocal d
        d = (d * 1103515245 + 12345) % 2147483648
        return d % n
    return sonraki


class Sayac:
    def __init__(self):
        self.adim = 0

    def say(self, n=1):
        self.adim += n


def karisim(sirali_oran, tohum=TOHUM, n=40, uzunluk=12):
    """sirali_oran: girdilerin yuzde kaci on_kosulu sagliyor."""
    r = uretec(tohum)
    kume = []
    for _ in range(n):
        dizi = [r(30) - 9 for _ in range(uzunluk)]
        kume.append(sorted(dizi) if r(100) < sirali_oran else dizi)
    return kume


def kahin_ciftler(dizi, hedef, s):
    for i in range(len(dizi)):
        for j in range(i + 1, len(dizi)):
            s.say()
            if dizi[i] + dizi[j] == hedef:
                return True
    return False


def iki_isaretci(dizi, hedef, s):
    sol, sag = 0, len(dizi) - 1
    while sol < sag:
        s.say()
        t = dizi[sol] + dizi[sag]
        if t == hedef:
            return True
        sol, sag = (sol + 1, sag) if t < hedef else (sol, sag - 1)
    return False


def aliskanlik(dizi, hedef, s):
    """En cok pratik edilen kalibi her probleme uygular."""
    return iki_isaretci(dizi, hedef, s)


def on_kosul_kontrolu(dizi, hedef, s):
    """Once on_kosulu sinar; saglanmiyorsa kahine duser."""
    for i in range(len(dizi) - 1):
        s.say()
        if dizi[i] > dizi[i + 1]:
            return kahin_ciftler(dizi, hedef, s)
    return iki_isaretci(dizi, hedef, s)


def olc(politika, kume, hedef=11):
    ayrilan, ak, ah = 0, 0, 0
    for dizi in kume:
        s1, s2 = Sayac(), Sayac()
        a = politika(list(dizi), hedef, s1)
        b = kahin_ciftler(list(dizi), hedef, s2)
        ak, ah = ak + s1.adim, ah + s2.adim
        if a != b:
            ayrilan += 1
    return ayrilan, ak, ah


ORTAM = [("havuz tabanli alistirma ", 90), ("zamanli yarisma         ", 75),
         ("sirket ici degerlendirme", 50)]

for tohum in (TOHUM, IKINCI):
    print(f"tohum {tohum} , her ortamda 40 problem , hedef 11")
    print("ortam                     sirali  aliskanlik      on_kosul kontrolu   kahin")
    print("                          girdi   ayrilan  adim   ayrilan  adim      adim")
    for ad, oran in ORTAM:
        K = karisim(oran, tohum)
        s = sum(1 for d in K if d == sorted(d))
        a1, k1, h1 = olc(aliskanlik, K)
        a2, k2, _ = olc(on_kosul_kontrolu, K)
        print(f"{ad}  {s:6d}  {a1:7d}  {k1:4d}   {a2:7d}  {k2:4d}      {h1:4d}")
    print()
tohum 20260218 , her ortamda 40 problem , hedef 11
ortam                     sirali  aliskanlik      on_kosul kontrolu   kahin
                          girdi   ayrilan  adim   ayrilan  adim      adim
havuz tabanli alistirma       34        5   165         0   600       834
zamanli yarisma               29        8   199         0   681       914
sirket ici degerlendirme      17       15   255         0   754       856

tohum 20260219 , her ortamda 40 problem , hedef 11
ortam                     sirali  aliskanlik      on_kosul kontrolu   kahin
                          girdi   ayrilan  adim   ayrilan  adim      adim
havuz tabanli alistirma       36        2   213         0   609      1055
zamanli yarisma               31        4   238         0   691      1079
sirket ici degerlendirme      22       10   296         0   823      1161

Üç sayı yan yana. Kâhin: havuz karışımında 834 adım, 40 girdinin 40’ında doğru. Kalıp: alışkanlıkla seçim 165 adım, ön koşul kontrolüyle seçim 600 adım. Ayrılan girdi: alışkanlıkla seçim havuzda 5, yarışmada 8, değerlendirmede 15; ön koşul kontrolü üç ortamda da 0.

Birinci okuma ortamla ilgilidir. Aynı politika, aynı kalıp, aynı problem sayısı — ve gördüğü yanlış yanıt sayısı 5’ten 15’e, üç katına çıkıyor. Farkı yaratan tek şey ortamın girdi karışımıdır: havuzda 40 girdinin 34’ü ön koşulu sağlıyor, değerlendirmede 17’si. Hazırlanmış girdilerle çalışan biri kalıbının yanlışını daha az görür, ve az görmek düzelmek değildir.

İkinci okuma politikayla ilgilidir. Ön koşul kontrolü üç ortamda da 0 ayrılan girdi veriyor, yani hiç yanılmıyor; bedeli havuz karışımında 165 adımdan 600 adıma çıkmak, yani 3,64 kat. Buna karşılık kâhinin 834 adımının hâlâ altında: kontrol, doğruluğu kaba kuvvet pahasına değil, kaba kuvvetin yüzde 72’si pahasına satın alıyor. İkinci dağarcık aynı sıralamayı veriyor (2, 4, 10) ve ön koşul kontrolü orada da üç ortamda 0 ayrılan girdi üretiyor; mutlak sayılar dağarcığa bağlı, sıralama değil.

Buradan tekrarlı çalışmanın ilerleme ölçütü çıkar ve üç sayıdan oluşur: kaç kalıp görüldü, dağılımın denge oranı, ve kaç kalıp ön koşulu bozulmuş hâlde görüldü. Çözülen problem sayısı bu üçünün hiçbirini vermez.

Özet

  • Ortamlar türleriyle ayrılır: havuz tabanlı alıştırmada dağılımı çalışan seçer, zamanlı yarışmada ve şirket içi değerlendirmede ortam seçer ve küme küçüktür.
  • Çözülen problem sayısı ortamları 12 kat ayırıyor (144, 30, 12) ama kapsanan kalıp sayısı üçünde de 5; iki ölçüt de ilerlemeyi göstermiyor.
  • Ayırt eden ölçüt dağılımdır: havuz tabanlı ortamda denge oranı 0,2431 ve baskın iki kalıp problemlerin 0,7986’sını kaplıyor; zamanlı yarışma beş kat az problemle 0,6667 veriyor.
  • Kapsama ikinci turda 5’e çıkıp donuyor, denge oranı üçüncü turda 0,2778 ile tepe yapıp 0,2431’e geriliyor — problem eklemek ölçütü kötüleştirebiliyor.
  • Ortamın girdi karışımı görülen yanlışı belirliyor: aynı politika havuzda 5, yarışmada 8, şirket içi değerlendirmede 15 ayrılan girdi üretiyor.
  • Ön koşul kontrolüyle seçim üç ortamda da 0 ayrılan girdi veriyor; bedeli 165 adımdan 600 adıma çıkmak, yani kâhinin 834 adımının yüzde 72’si.

Kurs Kapanışı

Yirmi üç ders tek bir soruyu sordu: bir kalıp seçmek neyi kabul etmektir. Yanıt her derste üç sayıyla verildi. Kâhin her zaman kaba kuvvetti ve her zaman doğruydu — ama her zaman pahalı değildi: En Uzun Yol Problemi sekiz düğümde kâhini 562, kalıbı 3626 adımda ölçtü ve eşiğin on düğümde olduğunu gösterdi. Kalıp genellikle daha az adım harcadı. Ayrılan girdi, kalıbın kâhinden farklı yanıt verdiği girdi sayısıydı. Kursun kuralı buydu: bir kalıbın sayısı kazandırdığı adım değil, ön koşulu bozulduğunda verdiği yanlış yanıt sayısıdır.

Ders Kâhin (adım) Kalıp (adım) Ayrılan girdi / bedel
Kaba Kuvvet tam sayım 2640 eleme 866 eleme 0; örnekleme 406’da 14
Böl ve Yönet 3120 doğrusal birleştirme 2680 0; eksik birleştirme 920’de 40/40
Açgözlü Algoritmalar alttan yukarı açgözlü 969 sistemin 827’si (0,8535); en büyük fazlalık 16 para
Dinamik Programlama 163.840 tam anahtarlı not alma 2440 (67,15 kat az) 0; eksik anahtar 39/40; örtüşme yokken defter 19 giriş boşa
Geri İzleme budamasız 960.800 düğüm, n=7 budamalı 552 düğüm 1740,6 kat, oran n ile büyür (72,3 → 8156,2); aşırı budama 0 çözüm
Rastgeleleştirme 780 doğrulamalı örnekleme 944–1056 0; doğrulamasız 200’de, ön koşul bozukken 40/40
İki İşaretçi 972 154 (6,31 kat az) sırasızda 25/40, hızlanma 2,33 kata
Kayan Pencere 2396 867 (2,76 kat az) negatifte 10/40, daha az adımda
Hızlı ve Yavaş İşaretçi 480 299 ikinci kenarda 14/40; adım hiç değişmez
Aralık Birleştirme başlangıca göre sıralama: 40/40 doğru 2154 bitişe göre 29/40, uzunluğa göre ve sıralamasız 40/40
Döngüsel Yerleştirme 1..n, tekrarsız karşılaştırmasız tekrarlıda yalın 40/40, korumalı 39/40, eksikte 0/40
İki Yığın 480 ortanca denge adımıyla 1261 dengesiz 295/480 yanlış; denge kalıbın yarısından fazlası (1261/550)
K’ıncı Eleman dört k x 40 girdi k boyutlu yığın 0/40; “k’ıncı ayrı değer” ayrı sorudur: 27/40
Izgara Gezinmesi aynı komşulukla 40/40 bağlı bileşen tanımlar ayrılınca 38/40
Sırt Çantası bölünebilirde 100.800 açgözlü 174 bölünebilirde 0/40; aynı sıra 0/1’de 5/40, kayıp 7
Gezgin Satıcı 352.800 (20 örnek) en yakın komşu 560 17/20; sapma ort. 9,3, en kötü 33,33; iki değişim 2/20
En Uzun Yol çevrimsizde 40/40 gevşetme yordamı çevrimlide 38/40; en büyük fazla tahmin 228
N Vezir budamalı 2057 düğüm, n=8 simetri elemesiyle 1029 oran 2,00, beş boyda sabit; budamanınki büyür, simetrininki büyümez
At Turu ve Labirent yol modeli 90.111 hücre modeli 25 oran 3604, ayrılan 0
Hamilton Yolları sayma 29.270 karar 1526 oran 19,18; yol bulunmayanların hepsinde karar = sayma
Problem Okuma ve Kısıt 866 karma tablo 486, sıralayan kalıp 1398, sayma 396 yanlış kısıt okuması 40 girdinin 18’inde ayrılıyor (ikinci dağarcıkta 17); n=10<sup>8</sup>’de üç çözüm de bütçeye sığmıyor
Çözüm Doğrulama kaba kuvvet, 52 girdide 1596 doğru iki işaretçi 329 40 rastgele girdi 5 kusurun 4’ünü, 12 kenar durumu 5’ini yakalıyor; aynı kusuru paylaşan kâhinde ayrılan 3’ten 0’a düşüyor
Alıştırma Ortamları 834 alışkanlıkla seçim 165, ön koşul kontrolü 600 havuzda 5, yarışmada 8, değerlendirmede 15 ayrılan girdi; ön koşul kontrolü 0 ayrılan ama 3,64 kat adım

Tablonun ikinci okuması birincisinden değerlidir: hızlandırma yanlışa yaklaştırır ve bazen hızlandırmaz bile. Sırasız girdide iki işaretçinin hızlanması 2,33 kata düşerken 25 girdide yanılıyor; açgözlü 969 sistemin 827’sinde fazla veriyor; not alma örtüşme yokken 19 girişi boşa tutuyor. Hiçbiri saklanmadı: bir kalıbın ne zaman yanıldığını bilmeyen, onu ne zaman seçeceğini de bilemez.

Üçüncü ve kalıcı sonuç kâhinin kendisiyle ilgilidir: kaba kuvvet bir taban değil, bir kâhindir. Kursun bütün sayıları onun sayesinde yazılabildi. Son derste bu bir alışkanlığa döndü: doğruluğu bir görüşe değil, ikinci bir çözümün yanıtına karşı saymak.

Bir sonraki kurs, Hesaplama Kuramı, kâhinin gölgesinde bırakılan soruyu alır. Gezgin satıcı ve Hamilton yolları derslerinde “bu problem neden zor” sorusu açıkça ertelendi. Orada sorulacak olan şudur: bazı problemler için kaba kuvvetten daha iyisinin bilinmemesi, bilgimiz hakkında mı yoksa problemler hakkında mı bir gerçektir. Yanıt karar verilebilirlik, indirgeme ve karmaşıklık sınıflarıyla verilecek.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat