Özyinelemeli algoritmanızı hızlandırmaya çalışıyorsanız, bellek yeterli olabilir. Bu işlev çağrılarının sonuçlarını saklama tekniği, böylece aynı parametrelere sahip gelecek çağrılar sadece sonucu yeniden kullanabilir. Bu, eğer fonksiyonunuz (ve sadece eğer)
- yan etkisi yoktur ve
- yalnızca parametrelerine bağlıdır (yani bazı durumlara bağlı değildir).
Fonksiyon aynı parametrelerle tekrar tekrar çağrıldığında (ve sadece) zamandan tasarruf etmenizi sağlar. Popüler örnekler arasında Fibonacci sayılarının özyinelemeli tanımı, yani
f( 0 )f( 1 )f( n + 2 )= 0= 1= f( n + 1 ) + f( n ), n ≥ 0
ff( n )f( n + 1 )
Bunun aksine, birleştirme sıralaması gibi algoritmalar için notlamanın işe yaramaz olduğunu unutmayın: genellikle az sayıda (varsa) kısmi liste aynıdır ve eşitlik kontrolleri pahalıdır (sıralama sadece biraz daha maliyetlidir!).
Pratik uygulamalarda, sonuçları nasıl sakladığınız performans açısından büyük önem taşır. Karma tabloları kullanmak bariz bir seçim olabilir, ancak yerelliği bozabilir. Parametreleriniz negatif olmayan tamsayılarsa, diziler doğal bir seçimdir, ancak yalnızca bazı girişler kullanırsanız büyük bellek yüküne neden olabilir. Dolayısıyla, memoizasyon, etki ve maliyet arasında bir değiş tokuştur; İşe yarayıp yaramayacağı sizin özel senaryonuza bağlıdır.
Dinamik programlama tamamen başka bir yaratıktır. Bu özellik ile ilgili sorunlar için geçerlidir
- alt problemlere ayrılabilir (muhtemelen birden fazla şekilde),
- bu alt problemler bağımsız olarak çözülebilir,
- Bu alt problemlerin (optimal) çözümleri, orijinal sorunun (optimal) çözümleriyle birleştirilebilir ve
- alt problemler aynı özelliğe sahiptir (veya önemsizdir).
Bu genellikle (dolaylı olarak) insanlar Bellman'ın Optimallik İlkesini çağırdığında ima edilir .
Şimdi, bu sadece belirli bir özyineleme ile ifade edilebilecek bir sınıf problemini tanımlamaktadır . Bunların değerlendirilmesi (genellikle) etkilidir çünkü memoizasyon büyük etkiye uygulanabilir (yukarıya bakınız); genellikle, daha büyük sorunların bir parçası olarak daha küçük alt problemler ortaya çıkar. Popüler örnekler düzenleme mesafesini ve Bellman-Ford algoritmasını içerir .