Optimization
- Dart kursu
- İleri seviye
- Ders 76/83
- 5 dk
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
// 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
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ü
if (____(n)) return cache[n]!;
if (cache.containsKey(n)) return cache[n]!;
Açıklama: cache.containsKey(n) ile önbellekte var mı kontrol edilir.