İçeriğe atla
CodeItRaw
Dinamik Programlama

Ders 2/4

Dallanan bir özyinelemeyi DP'ye çevirmenin en kısa yolu hatırlamaktır: fonksiyona girerken "bunu daha önce çözdüm mü?" diye sözlüğe bak, çıkarken cevabı sözlüğe yaz. Kodun geri kalanı aynı kalır; çağrı ağacının tekrar eden bütün dalları tek bir okumaya iner.

def best(i, memo):
if i >= len(values):
return 0
if i not in memo:
take = values[i] + best(i + 2, memo)
skip = best(i + 1, memo)
memo[i] = max(take, skip)
return memo[i]
Yan yana iki elemanı alamadığın bir sırada en büyük toplam: i'yi alırsan bir sonrakini atlarsın (i + 2), almazsan sıradakine geçersin. Sözlük olmadan çağrı sayısı her elemanda ikiye katlanır; sözlükle her i bir kez hesaplanır.

Aynı çözüm tabloyla, sondan başa ya da baştan sona da yazılır; hatta burada yalnızca son iki değere ihtiyaç olduğu için iki değişken yeter. Önce hatırlayan özyinelemeyi yaz ve doğru olduğunu gör; sadeleştirmek ondan sonra gelir.

Görevler

Görevler sırayla açılır. Hepsini çözünce sonraki ders açılır.

Bu dersin görevleri, önceki dersler bitince açılır. Anlatımı şimdiden okuyabilirsin.

  1. 01

    Hatırlayan Fibonacci

    Kod Okuma · Big-O Oku

  2. 02

    Komşuları Uyandırma

    Fonksiyon

Sırayı beklemeden çözmek istersen bütün problemler kilitsiz açık: Problemler listesi