Dinamik Programlama hakkında bilgi edindim ve oldukça yeni. Dinamik Programlamanın “yinelemeli” ve “özyinelemeli” bir şekilde uygulanıp uygulanamayacağını ya da sadece bu yöntemlerden birini uygulamak için iyi bir uygulama olduğunu bilmek istedim. İyi örnekler/bağlantılar yardımcı olabilir.Dinamik Programlama özyinelemeli veya yinelemeli
cevap
Evet, DP her ikisine de uygulanabilir.
buradan başlayın: Sonra uygulama için problemleri (bu sorunların her biri ayrıca bir Editorial fikir açıklayan var TopCoder.com sen bağlantılar bulacaksınız, Dynamic Programming: From novice to advanced ve ilk eğitim için
A Tutorial on Dynamic Programming sahip http://en.wikipedia.org/wiki/Dynamic_programming
çözelti geride.
Dinamik programlama ters uygulanan yinelemeli bir çözelti olarak (birçok durumda) görülebilir.
K Bir özyinelemede, (veya başka bir değer) için bazı durma koşuluyla x(n+1) = f(x(n))
değerini hesaplarsınız. Çoğu durumda f
işlevi, min/max işlevinin bir işlevidir, ancak olması gerekmez. Ayrıca, fonksiyonun tek bir değişken alması gerekmiyor.
Dinamik programlama birden fazla değişkeni sonra, f(1)
sonra f(2)
vb
f(0)
hesaplayarak bu problemi çözecek, normalde fonksiyonunu hesaplamak için bazı doğal düzen olmazdı.
Dinamik programlamanın çözebileceği bir örnek: Size 3 golf sopası verilir. Her golf kulübü bir golf topu x ileri mesafe gönderebilir (örneğin, 24, 37 ve 54 adet). Soru şu: tam olarak 200 birim uzakta olan bir deliğe çarpar mısınız? Ve eğer yapabiliyorsanız, ihtiyacınız olan minimum çekim sayısı. n 0 ise fonksiyon shot(n)
döner, bazı büyük sayı n 0'dan düşükse 0, bu önemsiz bir uygulanmasına olanak sağlayacak
shots(200) = min(shots(200-24),shots(200-37),shots(200-54))
, ve ifadeyi:
özyinelemeli çözüm gibi bir şey olurdu aksi takdirde. Bununla birlikte, n'nin büyük değerleri için, yukarıdaki ifadenin farklı dallarından aynı değerleri tekrar ve tekrar vuracaksınız. Bu durumda, sadece 0'dan başlamak ve shots(0)
, shots(1)
, shots(2)
hesaplamak daha iyidir. Bu, bu problemin "dinamik programlama" çözümü olabilir - üstel zaman yerine doğrusal zaman ve sabit alan (3 yollu bir ağaçtan geçerek)) ve en iyi doğrusal boşluk (çağrı yığını için).
- 1. Yinelemeli Sorgu - yaprak düğümleri aktif verileri aşağıdaki özyinelemeli sorgu Verilen
- 2. Haskell'de Data.Map ile dinamik programlama?
- 3. Yinelemeli ayrıştırıcıyı
- 4. Özyinelemeli
- 5. Dinamik Programlama ve Sırt Çantası Uygulaması
- 6. en uzun palindromik alt dizgi özyinelemeli çözüm
- 7. dinamik programlama - en uygun kırılma noktası
- 8. Alanda ne zaman dinamik programlama kullandınız?
- 9. Ayrık Sırt Çantası Dinamik Programlama Python3
- 10. Statik ve dinamik programlama dilleri arasında farklı
- 11. scala'daki özyinelemeli yapıları ayrıştırma
- 12. SQL-özyinelemeli ifadeler nasıl çalışır?
- 13. Standart olmayan ek açıklamaları (veya tanımlamaları) kullanıyorsunuz ve hangi sebepten dolayı. Yinelemeli ek açıklamalara ne dersiniz?
- 14. Özyinelemeli çağrı ile Python üreteci
- 15. cbind ürün yinelemeli
- 16. Özyinelemeli Harita Oluşturma ExpandoObject
- 17. PHP script dili veya programlama dili?
- 18. Kakao programlama ile kavramsal veya teknik sorun
- 19. LOGO programlama dili için EBNF veya BNF
- 20. Scala'da yinelemeli döngüler nasıl yapılır
- 21. C++ özyinelemeli şablon indirimi
- 22. 4clojure: set-intersection, yinelemeli lambda
- 23. Haskell, özyinelemeli çağrı, birçok argüman
- 24. dur jquery onChange özyinelemeli yineleme
- 25. Yinelemeli işlevim neden şablonumda yalnızca bir kez yazdırılıyor?
- 26. N Queen özyinelemeli program
- 27. Özyinelemeli Dosya .net
- 28. Sabitleme özyinelemeli veri yapısı
- 29. Özyinelemeli bir işlevdeki bir hatayı anlama?
- 30. Özenimli olarak yinelemeli ilişkiyi yükle
Yukarıdan aşağıya yaklaşma, belleğe attığınız takdirde dinamik programlama olarak kabul edilir. Aşağıdan yukarıya DP ve yukarıdan aşağı DP her ikisi de DP'dir. – harold
@harold haklısınız, muhtemelen hafızaya alma hakkında bir şeyler eklemiş olmalıyım (bellek gereksinimini makul tutmak istiyorsanız biraz daha zordur, aşağıdan yukarıya doğru değerlerini unutabileceğiniz zaman bilmeniz gerekir) oldukça açık). –
Önbelleğe alma ile özyinelemeli çözüm, 0..200 sayılarının yalnızca küçük bir alt kümesine bakarken, yinelemeli çözüm bunların tümüne bakmak zorundadır (en azından bunu önlemek için basit değildir). Yani, bu durumda özyineli çözüm daha hızlı çalışacak gibi görünüyor. – AlwaysLearning