giriş     kayıt
dynamic programming

daha alt problemlere bölünerek çözülebilen ve aynı çözümlere birden fazla kez ihtiyaç duyan problemlerde kullanılabilecek bir yaklaşım.

nasıl peki? bir kere çözülmüş problemi hafızada tutup, ihtiyaç duyulduğunda tekrar tekrar çözmekten kurtularak.

bir örnek - fibonacci

fibonacci sayıları: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
bildiğiniz gibi her bir sayı kendinden önceki iki sayının toplamından geliyor.
yani,
fib(n) = fib(n-1) + fib(n-2)
fib(n) = (n == 0 veya n == 1 için n)
her bulduğumuz alt sonucu hafızada tutuyoruz ve bir başka problemde diziyi kontrol ediyoruz aradığımız değer var mı diye, varsa kullanıyoruz, yoksa hesaplayıp yola devam ediyoruz.
bu time complexity'i n^2 den n'e getiriyor.

-