Dinamik Programlama Nedir?

Dinamik programlama, bilgisayar bilimi alanına atıfta bulunurken, sorunu daha küçük problem kümelerine bölerek karmaşık problemleri çözme amaçlı benzer bir bilgisayar algoritmaları grubunu tanımlar. İlk olarak 1950'lerde Richard Bellman tarafından yaratılan dinamik programlama, üst üste binen alt problemler veya en uygun alt yapılarla ilgili problemlerle çalışır. Dinamik programlamanın nasıl çalıştığını anlamak için, bu iki terimin arkasındaki konsepti anlamak en iyisidir.

Örtüşen alt problemler, daha küçük denklem kümelerine bölündüğünde, küçük denklemlerin parçalarını bir cevaba ulaşmak için bir defadan fazla tekrar kullanan karmaşık denklemleri tanımlar. Örneğin, bir sayı kümesi kullanarak tüm olası sonuçları hesaplamak için söylenen matematiksel bir denklem, diğer sonuçları sadece bir kez hesaplarken aynı sonucu birçok kez hesaplayabilir. Dinamik programlama, bu problemi, sonucu ilk hesapladıktan sonra, bu sonucu kaydetmesi ve cevabı tekrar hesaplamak yerine, daha sonra denklemde tutması gerektiğini söyleyecektir. Uzun ve karmaşık süreçler ve denklemlerle uğraşırken, bu zaman kazandırır ve çok daha az adım kullanarak daha hızlı bir çözüm oluşturur.

En iyi alt yapılar, tüm alt sorunlara en iyi cevabı bularak ve sonra en iyi toplam cevabı oluşturarak bir çözüm oluşturur. Karmaşık bir problemi daha küçük problemlere ayırdıktan sonra, bilgisayar her problem için en iyi cevabın ne olduğunu belirlemek için matematiksel bir sistem kullanır. Asıl sorunun cevabını daha küçük cevaplardan hesaplar. Bu süreçte kusurlar vardır. En iyi matematiksel olarak çalışan çözümü verirken, problemin türüne ve gerçek dünya ile olan ilişkisine bağlı olarak gerçek hayatta en iyi çözüm olabilir veya olmayabilir.

Bu işlemlerin herhangi birinde, dinamik programlama algoritması, çözüme giden en kısa yolu bulmaya çalışır. Bunu yapmak için iki yaklaşımdan birini alabilir. Yukarıdan aşağıya yaklaşım, denklemi daha küçük denklemlere böler ve gerektiğinde bu denklemlerin cevaplarını yeniden kullanır. Aşağıdan yukarıya yaklaşım, denklemi yıktıktan sonra en küçük matematiksel değeri çözmeye çalışır ve daha sonra oradan en büyüğüne doğru ilerler. Her iki yaklaşım da zaman kazandırır, ancak dinamik programlama yalnızca orijinal problemin bir noktada denklemi çözmek için tekrar kullanılan daha küçük denklemlere bölündüğü durumlarda çalışır.