CodeBlanks Logo Icon CodeBlanks

Optimization

Yaygın optimizasyon tekniklerini öğrenirsin.

Optimizasyon ve önbellekleme

Optimizasyon, bir kodu daha hızlı çalışacak biçimde değiştirmektir. En etkili yöntemlerden biri önbellekleme (caching): tekrar tekrar hesaplanan sonuçu bir haritada (map) saklamak. Aynı girdi geldiğinde hesap yerine haritadan okunur.

Klasik örnek: Fibonacci. fib(n) = fib(n-1) + fib(n-2) özgünlü (naive) yazımda aynı alt problem birçok kez hesaplanır; fib(40) milyonlarca çağrı yapar. cache haritası tutup her fib(k) sonuçunu saklarsan her değer bir kez hesaplanır. Bu teknik memoization denir; karmaşıklığı üsselden (exponential) doğrusala (linear) iner.

Memoized fibonacci

Önbellekli fibonacci yazımı: final cache = <int, int>{}; haritası tutulur. fib(n) içinde önce cache.containsKey(n) ile var mı bakılır; varsa cache[n]! döndürülür. Yoksa fib(n-1) + fib(n-2) hesaplanıp cache[n] = result ile saklanır.

fib(10) = 55, fib(20) = 6765. Önbelleksiz fib(20) 10946 çağrı yapar; önbellekli ise yalnızca 20. ! (null assertion) haritanın int? döndürmesine karşın değerin null olmadığını belirtir. Bu desen, dinamik programlamanın (dynamic programming) temelidir.

Uygulama Memoized fibonacci

final cache = <int, int>{}; haritasını tanımla (main dışında). int fib(int n) fonksiyonunu yaz: n < 2 ise n döndür; cache.containsKey(n) ise cache[n]! döndür; değilse fib(n-1) + fib(n-2) hesapla, cache[n] = result ile sakla, döndür. main içinde print('fib(10): ${fib(10)}') ve print('fib(20): ${fib(20)}') ekle.

Başlangıç kodu

main.dart
// cache haritasını tanımla
// fib fonksiyonunu yaz (önbellekleme ile)

void main() {
  // fib(10) ve fib(20) sonuçlarını yazdır
}

Örnek çözüm

main.dart
final cache = <int, int>{};

int fib(int n) {
  if (n < 2) return n;
  if (cache.containsKey(n)) return cache[n]!;
  final result = fib(n - 1) + fib(n - 2);
  cache[n] = result;
  return result;
}

void main() {
  print('fib(10): ${fib(10)}');
  print('fib(20): ${fib(20)}');
}

Beklenen çıktı

fib(10): 55
fib(20): 6765

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 memoization ne yapar?

  • Şifreler
  • Serileştirir
  • Sıkıştırır
  • Önbellekle hesaplar Doğru cevap

Açıklama: memoization önbellekle tekrarlı hesabı hızlandırır.

2 Optimizasyon kavramlarını eşleştir

Kavram Anlamı
cache Önbellek
fib Fibonacci
containsKey Anahtar var mı
memouze Önbellekleme

3 cache anahtar kontrolü

Soru
if (____(n)) return cache[n]!;
Cevap
if (cache.containsKey(n)) return cache[n]!;

Açıklama: cache.containsKey(n) ile önbellekte var mı kontrol edilir.

İleri seviye bölümündeki tüm dersler