T: tema · Z: kodu büyüt · S: konuşmacı notları · F: tam ekran · Esc: genel bakış · ⌂ ders haritası
OYUNLARDA YAPAY ZEKÂ · ALGORİTMALAR
Algoritma
Analizi
Analysis of algorithms — “ne kadar hızlı?” sorusuna bilimsel yöntemle cevap
PRESS ▶ TO START

Bu derste oyunun haritası 🗺️

  1. Bilimsel yöntem: tahmin, deney, doğrulama
  2. Gözlem: süre ölçmek, iki katına çıkarma deneyi doubling test
  3. Matematiksel model: maliyet × sıklık, ~ gösterimi tilde
  4. Büyüme mertebeleri: 1, lg N, N, N lg N, N², N³, 2ᴺ order of growth
  5. Algoritmalar teorisi: en iyi/en kötü durum, Büyük-O Big-O
  6. Bellek: bir nesne kaç bayt?
  7. ⚠️ Tuzaklar: önbellek, JIT, ölçüm hataları
🎮 Bu dersin sonunda…

…“Oyunda 500 yerine 2000 düşman olursa ne olur?” sorusuna kodu çalıştırmadan, sayıyla cevap verebileceksiniz.

🤔 ISINMA SORUSU

Oyununuzda 100 düşman var ve her düşman diğer her düşmanla çarpışma kontrolü yapıyor. Oyun 60 FPS’te akıcı.

Düşman sayısını 200’e çıkardınız. Çarpışma kontrolleri ne kadar uzun sürer?

A) 2 katı · B) 4 katı · C) 100 katı · D) değişmez

Cevap: ~4 katı. Çiftlerin sayısı N²/2 ile büyür: N iki katına → N² dört katına. 1000 düşmanda 100 katı! 😱

Oyun geliştirici neden umursamalı?

⏱️
Kare bütçesi60 FPS = her şey için 16,6 ms. Fizik, YZ, çizim, ses… hepsi bu sürenin içinde
📱
Zayıf cihazlarSizin PC’nizde akıcı olan, öğrencinin eski telefonunda?
📈
ÖlçeklenmeTest haritasında 50 birim; oyuncular 500 birimle oynayınca?
🌐
Sunucular1000 oyuncudan 100.000’e çıkınca sunucu maliyeti
🧠
Oyun YZ’siYol bulma, karar ağaçları: düşünme süresi sınırlı
🔬
ProfilerUnity Profiler’ın söylediğini anlamak

Mini sözlük

running timeçalışma süresiProgramın bir girdi için harcadığı süre
order of growthbüyüme mertebesiN büyüdükçe sürenin nasıl büyüdüğü: N, N², …
doubling testiki katına çıkarma deneyiN’i 2 katına çıkarıp sürenin kaç katına çıktığını ölçmek
power lawkuvvet yasasıT(N) = a · Nᵇ biçiminde bir ilişki
tilde notation~ gösterimiBaskın terimi (katsayısıyla) tutup gerisini atmak
Big-OBüyük-OÜst sınır gösterimi (sabitleri de atar)
best / worst / average caseen iyi / en kötü / ortalamaHangi girdide ne kadar sürer?
profilerprofil çıkarıcıProgramın zamanını nerede harcadığını gösteren araç
LEVEL 0
Bilimsel Yöntem
gözlemle · hipotez kur · tahmin et · doğrula
  • bilimsel yöntem
  • gözlem: ölçmek
  • matematiksel model
  • büyüme mertebeleri
  • algoritmalar teorisi
  • bellek
  • tuzaklar

Programlara bir fizikçi gibi bakmak

  1. Gözlemle: programı farklı N’lerle çalıştır, süreyi ölç.
  2. Hipotez kur: gözlemlere uyan bir model öner (ör. süre ≈ a · N²).
  3. Tahmin et: modelle daha büyük bir N için süreyi hesapla.
  4. Doğrula: o N ile gerçekten çalıştır; tahmin tuttu mu?
  5. Tekrarla: tutmadıysa modeli düzelt.
📜 Knuth’un fikri1960’larda Donald Knuth, bir programın çalışma süresinin de doğa olayları gibi matematiksel olarak modellenebileceğini gösterdi. Fizikçiler gezegenlerin hareketini tahmin ediyorsa, biz de programlarımızın süresini tahmin edebiliriz.

Önemli fark: doğa bize sunulur, ama programları biz yazarız → deneyleri tekrar tekrar, ucuza yapabiliriz.

LEVEL 1
Gözlem
kronometre, iki katına çıkarma, log-log grafiği
  • bilimsel yöntem
  • gözlem: ölçmek
  • matematiksel model
  • büyüme mertebeleri
  • algoritmalar teorisi
  • bellek
  • tuzaklar

Süre nasıl ölçülür? Kronometre

🎒 f"…{x:.2f}" (Python) ve $"…{x:F2}" (C#): değişkeni metnin içine yerleştir, 2 basamakla yaz (string interpolation).

🧪 İki katına çıkarma deneyi doubling test

📐 Kuvvet yasası ve log-log grafiği

Pek çok algoritmada süre şu biçimdedir: \( T(N) = a \cdot N^b \)

  • İki tarafın logaritmasını alırsak: \( \lg T = b \cdot \lg N + \lg a \) → bir doğru! Eğimi b.
  • N’i ikiye katlarsak: \( \frac{T(2N)}{T(N)} = \frac{a (2N)^b}{a N^b} = 2^b \) → oran 4 ise b = 2, oran 8 ise b = 3.
  • b’yi bulunca a’yı da bir ölçümden hesaplarız → artık her N için tahmin yapabiliriz.
Kısayol
oranbbüyüme
~10sabit / log
~21doğrusal
~2,1–2,3~1,1N lg N
~42karesel
~83kübik

🔗 Başka gözle: etkileşimli anlatımlar ve yazılar

Aynı konuyu başka bir anlatımla, kendi elinizle oynayarak görmek çok işe yarar. Kartlar yeni sekmede açılır; çoğu İngilizce ama görsel ve etkileşimli.

Quiz 1 · gözlem
Bir programı N = 1000, 2000, 4000 ile çalıştırdınız: 0,5 sn, 4 sn, 32 sn. N = 8000 için tahmin?
Oran her seferinde 8 → b = lg 8 = 3 (kübik). Bir sonraki adımda da ~8 kat: 32 × 8 = 256 sn. N = 16.000 için ~34 dakika! Bu yüzden kübik algoritmalar büyük N’de kullanılamaz.
LEVEL 2
Matematiksel Model
toplam süre = Σ (maliyet × sıklık)
  • bilimsel yöntem
  • gözlem: ölçmek
  • matematiksel model
  • büyüme mertebeleri
  • algoritmalar teorisi
  • bellek
  • tuzaklar

Knuth’un formülü: maliyet × sıklık

Programın toplam süresi = her komutun maliyeti × o komutun kaç kez çalıştığı (sıklık), hepsinin toplamı.

  • Maliyet: makineye, derleyiciye bağlı (bir toplama, bir karşılaştırma…)
  • Sıklık: algoritmaya ve girdiye bağlı → bunu hesaplayabiliriz!

Örnek problem: ThreeSum — N sayı arasından toplamı tam 0 olan kaç üçlü var?

🎮 Oyun versiyonu: Kart oyununda +/− değerli kartlardan “toplam enerjisi 0 olan üç kartlık kombo” kaç tane?

Hangi satır kaç kez çalışır?

🎒 Ön bilgi: kaç çift, kaç üçlü?

for j in range(i + 1, n): j hep i’den büyük → her çift bir kez sayılır.

  • N nesneden çift sayısı: \( \binom{N}{2} = \frac{N(N-1)}{2} \sim \frac{N^2}{2} \)
  • N nesneden üçlü sayısı: \( \binom{N}{3} = \frac{N(N-1)(N-2)}{6} \sim \frac{N^3}{6} \)

\( \binom{N}{2} \) “N’den 2 seç” diye okunur (kombinasyon). Sıra önemsiz: (Ork, Goblin) ile (Goblin, Ork) aynı çift.

~ gösterimi: küçük terimleri at tilde notation

\( \frac{N(N-1)(N-2)}{6} = \frac{N^3}{6} - \frac{N^2}{2} + \frac{N}{3} \)

NN³/6tam değerfark
10167120%28
100166.667161.700%3
1.000166,7 milyon166,2 milyon%0,3

N büyüdükçe baskın terim (N³/6) her şeyi belirler. Yazarız: ~N³/6 (“yaklaşık N³/6”).

Önerme (ThreeSum)Kaba kuvvet ThreeSum, N sayı için ~N³/6 kez “üç sayıyı topla ve karşılaştır” işlemi yapar.

Hipotezimiz (b = 3, oran 8) ile matematiksel model aynı şeyi söylüyor ✔ — bilimsel yöntem!

🎬 Ara: Büyük-O, 100 saniyede

Big-O Notation in 100 Seconds
Fireship · 1 dk 39 sn · YouTube’da aç

Bu bölümdeki tilde (~) ve büyüme mertebesi fikrinin en kısa özeti. Derste izleyip “hangi slayttaki demoya karşılık geliyor?” diye eşleştirin.

🤔 İzlerkenVideoda O(1), O(n), O(n²) ve O(log n) için hangi örnekler veriliyor? Bizim “iki katına çıkarma deneyi”nde oran 4 çıkan algoritma hangi sınıfa girer?
Quiz 2 · model
Aşağıdaki kodda tick() yaklaşık kaç kez çağrılır?
for i in range(N):
  for j in range(N):
    tick()
İkinci döngü bu kez 0’dan başlıyor (i+1’den değil): her i için N tur → toplam N × N = N². range(i + 1, N) olsaydı ~N²/2 olurdu. Sabit çarpan (½) büyüme mertebesini değiştirmez ama gerçek süreyi değiştirir.
LEVEL 3
Büyüme Mertebeleri
order of growth — algoritmaların imzası
  • bilimsel yöntem
  • gözlem: ölçmek
  • matematiksel model
  • büyüme mertebeleri
  • algoritmalar teorisi
  • bellek
  • tuzaklar

Birkaç fonksiyon her şeyi açıklıyor

büyümeadıkod kalıbı🎮 örnekT(2N)/T(N)
1sabita[i] = xbir değişken güncelle1
lg Nlogaritmikyarıya bölikili arama, BST~1
Ndoğrusaltek döngütüm düşmanları güncelle2
N lg Ndoğrusal-log.böl ve fethetsıralama (mergesort)~2
N²kareseliki iç içe döngütüm çiftlerde çarpışma4
N³kübiküç iç içe döngüThreeSum8
2ᴺüsteltüm alt kümeleren iyi ekipman kombinasyonu2ᴺ (!)

İlk dördü “iyi” sınıf: büyük problemlere ölçeklenir. Karesel ve kübik ancak küçük N’de. Üstel: N = 50’de bile evrenin ömrü yetmez.

🎮 Kare bütçesi: 60 FPS’te en fazla kaç N?

🔗 Ayrıntısı: Y18 · YZ Performansı (zaman dilimleme ve YZ LOD’u) sunumunda.

📜 Satranç tahtası ve buğday taneleri

Efsaneye göre satrancı icat eden bilge, hükümdardan ödül olarak şunu ister: ilk kareye 1 buğday tanesi, ikinciye 2, üçüncüye 4… her kareye bir öncekinin iki katı.

Hükümdar güler: “Bu kadar mı?” 64. kareye gelince toplam: \( 2^{64} - 1 \approx 1{,}8 \times 10^{19} \) tane — dünyanın yüzlerce yıllık buğday üretimi! 🌾

🎮 Oyunda üstel patlama

Envanterde 30 eşya var; her birini “giy/giyme” diye deneyerek en güçlü kombinasyonu arıyorsunuz: \( 2^{30} \approx \) 1 milyar deneme.

40 eşya → 1 trilyon. 60 eşya → imkânsız. Çözüm: daha akıllı algoritmalar (açgözlü yaklaşım, dinamik programlama) ya da yaklaşık çözümler.

Quiz 3 · büyüme
Aşağıdaki kodun büyüme mertebesi nedir?
for i in range(N):
  j = 1
  while j < N:
    tick()
    j = j * 2
İç döngü j’yi her seferinde ikiye katlıyor: 1, 2, 4, …, N → ~lg N tur (ikili arama gibi!). Dış döngü N tur. Toplam: N lg N. Laboratuvarda deneyin: oran ~2,1–2,2 çıkmalı.

🧪 Kod laboratuvarı: kendi kodunun büyümesini ölç

Önce tahmin et, sonra çalıştır:
  1. Şu anki kod: oran ve b ne çıkar?
  2. İç döngüyü j = 0’dan başlat. Sayı nasıl değişti, b değişti mi?
  3. İç döngüyü for (let j = 1; j < N; j *= 2) yap.
  4. Üçüncü bir iç içe döngü ekle. · Bonus: tek döngünün içine 10 turluk sabit bir döngü koy — b değişir mi?

Daha iyi algoritma, daha hızlı bilgisayardan iyidir

ThreeSum’u daha akıllı yapabilir miyiz?

  1. Diziyi sırala: N lg N (sıralama dersleri)
  2. Her (i, j) çifti için −(a[i] + a[j]) değerini ikili aramayla ara (arama dersi): N² çift × lg N
  3. Toplam: ~N² lg N
NN³/6 (kaba kuvvet)N² lg N
1.000~2 sn*~0,01 sn
8.000~17 dk~1 sn
1 milyon~5 yıl~6 saat

* kabaca, hızlı bir makinede. Hızlı bilgisayar sabiti küçültür; iyi algoritma üssü küçültür.

💡 Ana mesajBilgisayarlar her yıl hızlanıyor ama problemler de büyüyor. Karesel ya da kübik bir algoritma, yeni bilgisayarda daha da yetersiz kalır: 10 kat hızlı makine, 10 kat büyük problemi karesel algoritmayla 10 kat daha yavaş çözer.
LEVEL 4
Algoritmalar Teorisi
en iyi, en kötü, ortalama · Büyük-O
  • bilimsel yöntem
  • gözlem: ölçmek
  • matematiksel model
  • büyüme mertebeleri
  • algoritmalar teorisi
  • bellek
  • tuzaklar

Girdiye bağlı: en iyi, en kötü, ortalama

  • En kötü durum worst case: hiçbir girdi bundan uzun sürmez → garanti. Oyunlarda en önemlisi: kare asla takılmasın!
  • Ortalama durum average case: “tipik” girdilerde beklenen süre (girdinin rastgele olduğu varsayımıyla)
  • En iyi durum best case: en şanslı girdi — genelde pek bir şey söylemez
🎮 Örnek: sıralı arama

En iyi: aranan ilk eleman → 1 · Ortalama: ~N/2 · En kötü: N (ya da yok).

Oyun tasarımında “ortalama iyi ama bazen çok kötü” algoritmalar, ara sıra gelen takılmalara (frame spike) yol açar — oyuncunun en çok fark ettiği şey!

Büyük-O, Büyük-Omega, Büyük-Teta Big-O · Ω · Θ

gösterimanlamıbenzetme
Θ(N²)tam olarak N² gibi büyür“yolculuk ~2 saat”
O(N²)en fazla N² gibi (üst sınır)“en fazla 2 saat”
Ω(N²)en az N² gibi (alt sınır)“en az 2 saat”
~N²/2yaklaşık N²/2 (katsayı dahil)“1 saat 58 dakika”
Hangisini kullanalım?

İş ilanlarında ve mülakatlarda Büyük-O sorulur. Algoritma analizinde ise çoğu zaman ~ (tilde) kullanılır, çünkü sabiti korur: selection sort (~N²/2) ile insertion sort (~N²/4) ikisi de O(N²) ama biri iki kat hızlı.

Dikkat: “O(N²)” teknik olarak bir üst sınırdır; günlük kullanımda çoğu zaman Θ anlamında söylenir.

Quiz 4 · teori
Algoritma A’nın süresi ~2N², algoritma B’ninki ~100 N lg N. Hangisi daha hızlı?
N = 100: A ≈ 20.000, B ≈ 66.000 → A hızlı. N = 1000: A ≈ 2.000.000, B ≈ 1.000.000 → B hızlı. Büyük N’de büyüme mertebesi kazanır; küçük N’de sabitler. (Sıralama dersindeki “kütüphaneler küçük parçalarda insertion sort kullanır” bilgisinin sebebi bu!)
LEVEL 5
Bellek
bir nesne kaç bayt? 1 milyon nesne kaç MB?
  • bilimsel yöntem
  • gözlem: ölçmek
  • matematiksel model
  • büyüme mertebeleri
  • algoritmalar teorisi
  • bellek
  • tuzaklar

Temel türlerin boyutları

tür (C#)bayt
bool / byte1
char / short2
int / float4
long / double8
referans (64-bit)8
Vector3 (struct)12
nesne başlığı (class)~16
⚙️ Python ve JavaScript

Python’da her şey nesnedir: küçük bir int bile ~28 bayt, listedeki her eleman için +8 bayt referans.

JavaScript’te sayılar 8 baytlık ondalıklı sayıdır (motor bazen tamsayıları sıkıştırır). Bellek kritikse: Int32Array, Float32Array.

Dizi: eleman sayısı × eleman boyutu + küçük bir başlık. Nesne: başlık + alanlar, 8’in katına yuvarlanır (hizalama padding).

1 milyon düşman ne kadar yer kaplar?

LEVEL 6
Tuzaklar
ölçümler neden yalan söyleyebilir?
  • bilimsel yöntem
  • gözlem: ölçmek
  • matematiksel model
  • büyüme mertebeleri
  • algoritmalar teorisi
  • bellek
  • tuzaklar

⚠️ Ölçerken dikkat

  • Isınma JIT warm-up: C# ve JS kodu ilk çalıştırmalarda derlenir → ilk ölçümler yavaş. Birkaç kez çalıştırıp en iyisini/ortancayı alın.
  • Çöp toplayıcı: ölçümün ortasında GC çalışırsa süre fırlar.
  • Önbellek: küçük N önbelleğe sığar, büyük N sığmaz → oran birden değişebilir.
  • Arka plan: tarayıcı sekmeleri, güç tasarrufu modu, ısınan laptop.
  • Girdi: rastgele girdi ≠ gerçek oyun verisi (çoğu zaman neredeyse sıralı!).
📜 Knuth’un ünlü sözü“Erken optimizasyon tüm kötülüklerin anasıdır.” Sözün devamı daha az bilinir: “…ama o kritik %3’lük kısımdaki fırsatları kaçırmamalıyız.” → Önce ölç, darboğazı bul, onu iyileştir.
🎮 Unity’deProfiler (Window → Analysis → Profiler): her karede hangi fonksiyonun kaç ms sürdüğünü ve ne kadar çöp (GC Alloc) ürettiğini gösterir. Tahmin etmeyin, bakın!

Derin hikâye: GTA Online’ın 6 dakikalık yükleme ekranı (2021)

  • GTA Online’ın PC sürümü yıllarca yaklaşık 6 dakikada açılıyordu. Kaynak koduna erişimi olmayan bir oyuncu, takma adı t0st, 2021’de profilleyici ve tersine mühendislik araçlarıyla nedeni aradı.
  • Sebep 1: Yaklaşık 10 MB’lık, 63.000 eşyalık bir JSON dosyası ayrıştırılırken her küçük okumada sscanf, metnin tamamının uzunluğunu (strlen) yeniden hesaplıyordu: farkında olmadan O(n²).
  • Sebep 2: Her eşya listeye eklenmeden önce, listenin baştan sona taranmasıyla “zaten var mı?” diye kontrol ediliyordu: 63.000 eşya için yaklaşık 2 milyar karşılaştırma (yine O(n²)). Üstelik eşyaların hepsi zaten benzersizdi.
  • İki düzeltmeyle yükleme süresi 6 dakikadan 1 dakika 50 saniyeye indi (%69,4 azalma). Rockstar düzeltmeyi oyuna ekledi ve t0st’a hata ödül programından 10.000 dolar verdi.
DersKod “doğru” çalışıyordu; sadece büyüme hızı yanlıştı. Küçük test verisinde fark edilmeyen O(n²), gerçek veri büyüyünce dakikalara dönüştü. Gizli doğrusal işlemleri (strlen, Contains, IndexOf, liste taraması) bir döngünün içinde görünce alarm zilleri çalmalı: tam olarak bu sunumda yaptığımız analiz.

Kaynak: t0st: How I cut GTA Online loading times by 70% · bit-tech

🧰 Kütüphaneler ve araçlar

adplatformne yapar / sınırlarınasıl eklenir
BenchmarkDotNetC# / .NETIsınma, tekrar, istatistik ve bellek ayırma ölçümüyle güvenilir mikro ölçüm. Unity içinde değil, ayrı bir .NET projesinde çalışır.NuGet: BenchmarkDotNet
Unity Performance TestingUnityTest Framework içinde ölçüm: Measure.Method, Measure.Frames; sonuçları sürümler arasında karşılaştırma.Package Manager: com.unity.test-framework.performance
Unity ProfilerUnityKare bazında süre ve bellek ayırma; hedef cihaza bağlanarak ölçüm.Window → Analysis → Profiler
timeit · cProfilePythonKüçük kod parçalarını tekrar tekrar ölçme; fonksiyon bazında profil.standart kütüphane
TinybenchJavaScriptTarayıcı ve Node için küçük, modern ölçüm kütüphanesi.npm install tinybench

🧩 Ölçerken dikkat

  1. Çift-boyut deneyi: N’yi 1.000, 2.000, 4.000… diye ikiye katlayın, süre oranına bakın: ~2 ise doğrusal, ~4 ise karesel, ~2,1 ise N log N.
  2. Isınma: ilk çağrılar (JIT derleme, önbellek) yavaştır; ilk ölçümleri atın.
  3. Release/IL2CPP derlemesi ve hedef cihaz: editörde ölçmek yanıltır.
  4. Bellek ayırma da maliyettir: Unity’de her karede “GC Alloc” sıfıra yakın olmalı.
  5. Tek sayı değil, dağılım: en kötü %1 (takılmalar) ortalamadan önemlidir.
Gizli O(n) çağrılar
  • List.Contains, IndexOf, Remove(item): liste taraması.
  • Döngüde string +=: her seferinde yeni metin (StringBuilder kullanın).
  • LINQ zincirleri (Where().ToList()) her karede: ayırma + tarama.
  • GameObject.Find, FindObjectsOfType: bütün sahneyi tarar.

🤖 Bu konuyu bir YZ kod asistanıyla yazarken

Sık yapılan hatalar — kontrol edin
  • Asistanın “bu O(n log n)” iddiasına ölçmeden inanmak
  • Debug derlemesinde ya da editörde ölçüp karar vermek
  • Tek bir girdi boyutuyla sonuç çıkarmak
  • Döngü içindeki Contains/IndexOf/string birleştirmeyi gözden kaçırmak
İyi bir istek (prompt) örneği

“C# (.NET 8). Aşağıdaki fonksiyonun zaman karmaşıklığını satır satır açıkla; döngü içindeki gizli O(n) çağrıları (Contains, IndexOf, Remove, string birleştirme, LINQ) işaretle ve daha iyi veri yapısı öner. Sonra N = 1.000’den 64.000’e ikişer katlanan bir BenchmarkDotNet deneyi yaz; her satırda süreyi ve bir önceki süreye oranı yazdırsın.”

  • Kodun karmaşıklığını satır satır açıklatın
  • Çift-boyut deneyini (N, 2N, 4N…) ve oranları isteyin
  • Gizli doğrusal çağrıları işaretletin
  • Release derlemesinde ölçmeyi hatırlatın

🚀 Proje ve araştırma önerileri

  1. [kolay] Çift-boyut deneyi — Üç fonksiyon (doğrusal, karesel, N log N) yazıp N’yi ikiye katlayarak süre oranlarını tablolayın.
  2. [kolay] Gizli O(n²) avı — GTA hikâyesindeki hatanın küçük bir kopyasını yazın (döngüde liste taraması), HashSet ile düzeltip ölçün.
  3. [orta] Unity performans testi — Bir yapay zekâ fonksiyonunuz için Performance Testing paketiyle otomatik ölçüm testi; sürümler arasında karşılaştırın.
  4. [araştırma] Önbellek etkisi — Aynı sayıda elemanı dizi ve bağlı liste üzerinde dolaşıp süreleri karşılaştırın; büyük-O’nun anlatmadığı farkı açıklayın.

📄 Akademik okumalar ve kaynaklar

Knuth 1976 · Big Omicron and Big Omega and Big Theta (ACM SIGACT News 8(2))
Asimptotik gösterimin bugünkü anlamı.
Hartmanis & Stearns 1965 · On the Computational Complexity of Algorithms (Trans. AMS 117)
Hesaplama karmaşıklığı alanının başlangıcı.
Sedgewick & Wayne 2011 · Algorithms, 4th Edition — 1.4 Analysis of Algorithms (kitap sitesi)
Çift-boyut deneyi ve bilimsel yöntem.

Neler öğrendik? 🎒

  • Bilimsel yöntem: gözlemle, hipotez kur, tahmin et, doğrula.
  • İki katına çıkarma deneyi: oran = 2ᵇ, b = lg oran.
  • Kuvvet yasası: T(N) = a·Nᵇ → log-log grafikte doğru.
  • Model: maliyet × sıklık; en sık işlemi say; ~ ile sadeleştir.
  • Büyüme mertebeleri: 1, lg N, N, N lg N, N², N³, 2ᴺ.
  • 🎮 Kare bütçesi: 16,6 ms’de kaç N?
  • En kötü / ortalama; Büyük-O, Θ, Ω, ~.
  • Bellek: struct dizisi vs nesneler vs bağlı liste.
  • ⚠️ Ölçüm tuzakları; Profiler kullan.

Alıştırmalar 🏋️

  1. Laboratuvarda while (N > 1) { N = Math.floor(N / 2); } döngüsünün büyümesini ölçün. Neden oran ~1?
  2. p5.js’te N parçacıklık bir sahne yapın ve her karede tüm çiftler için mesafe hesaplayın. FPS’in 30’un altına düştüğü N’i bulun. N’i iki katına çıkarınca FPS ne oluyor?
  3. Unity Profiler ile bir sahnenin en pahalı 3 fonksiyonunu bulun. Hangisi kare sayısına (N’e) bağlı büyüyor?
  4. TwoSum: N sayı arasında toplamı 0 olan kaç çift var? Önce ~N²/2 kaba kuvvet, sonra sırala + ikili arama ile N lg N sürümü yazın; iki katına çıkarma deneyiyle karşılaştırın.
  5. Kendi oyununuzdaki bir varlığın (düşman, mermi) C# sınıfının kaç bayt tuttuğunu tahmin edin. 10.000 tanesi kaç MB?
  6. 🤖 Bir YZ asistanına yazdırdığınız bir fonksiyonun büyüme mertebesini sorun, sonra laboratuvarda ölçerek doğrulayın. Uyuştu mu?

🎮 Bu sunumdaki oyunlar

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

GTA Online 2013 · açık dünya çevrimiçi
Grand Theft Auto V’in çok oyunculu dünyası; PC sürümünün yükleme ekranı yıllarca dakikalarca sürdü.

Kaynaklar: videolar 🎬

Kaynaklar: okuma 📚

NEXT LEVEL ▶
Bağlı Listeler
Dizi mi, bağlı liste mi? Ölçerek karar verelim!
SONRAKİ SUNUM ▶