Bir süredir dinamik programlama üzerinde çalışıyorum. Dinamik bir programlama özyinelemesini değerlendirmenin standart yolu, gerekli tüm değerlerin bir tablosunu oluşturmak ve satır satır doldurmaktır. Giriş için Cormen, Leiserson ve ark.'nın "Algoritmalara Giriş" bölümüne bakınız .
Tablo tabanlı hesaplama şemasına iki boyutta (satır satır doldurma) odaklanıyorum ve hücre bağımlılıklarının yapısını araştırıyorum, yani başka bir hücrenin hesaplanabilmesi için hangi hücrelerin yapılması gerekiyor. Biz birlikte göstermek hücre hücre endeksleri sette i bağlıdır. Γ'nin çevrimsiz olması gerektiğini unutmayın .
Hesaplanan gerçek fonksiyondan soyutladım ve özyinelemeli yapısına konsantre oldum. Resmen, bir recurrrence düşünün olmaya dinamik programlama o formu varsa
ile , ~ Γ d ( i ) = { ( j , d ( j ) ) | j ∈ Γ d ( i ) } ve f değil bazı (hesaplanabilir) işlevi ˜ Γ d dışında d kullanın .
nin tanecikliği , mevcut hücrenin (sol, üst-sol, üst, üst-sağ, ...) pürüzlü alanlarıyla kısıtlanırken, esasen üç vakanın (simetri ve dönüşe kadar) geçerli olduğu gözlemlenir. tablonun nasıl doldurulabileceğini bildiren dinamik programlama özyinelemeleri:
Kırmızı alanlar (aşırı yakınlık) den anlamına gelir . Birinci ve ikinci durumlar alt kümeleri kabul etmektedir, üçüncü durum en kötü durumdur (dizin dönüşümüne kadar). Kırmızı alanların tamamının Γ ile örtülmesi kesinlikle gerekli değildir ; tablonun her kırmızı kısmındaki bazı hücreler kırmızıya boyamak için yeterlidir. Beyaz alanlar explictly gerekmektedir değildir Gerekli hücreleri içerir.
Birinci durum için örnekler düzenleme mesafesi ve en uzun ortak alt dizidir , ikinci durum Bellman & Ford ve CYK için geçerlidir . Daha az belirgin örnekler arasında, teklif edilen vakalara uyacak şekilde döndürülebildikleri için satırlar (veya sütunlar) yerine köşegenler üzerinde çalışma; Örnek için Joe'nun cevabına bakınız .
Yine de üçüncü vaka için (doğal) bir örneğim yok! Benim sorum şu: Üçüncü vaka dinamik programlama özyinelemeleri / sorunları için örnekler nelerdir?